Vara sanie

by Bogdan Nedelcu 11. February 2010 10:14

Pentru ca anul trecut m-am trezit tarziu cu stagiile si scoala de vara, anul asta ne facem caruta cat mai e zapada afara. Deci avem o sumedenie de proiecte si anuntam deschis sezonul la inscrieri pentru stagii. Ce avem de oferit:

  • Tot felul de proiecte care mai de care mai exotice pe IT dar nu numai
Ce avem nevoie:
  • Studenti pasionati, curiosi, doritori sa experimenteze intr-un cadru foarte dinamic.
Se aplica doar pe twitter, cu DM. http://twitter.com/bogdanelnedelcu

Tags: , , ,

The other perspective

by Bogdan Nedelcu 19. January 2010 01:03

This post is about frameworks, toys, design, usability, copy/paste and education.

I recently had the chance to help some friends to build a new on-line store.

The are called www.HandsOnEducation.ro and promote and sell educational toys all over Romania. Education is good, more if it’s for kids then it’s good for the long term. As I am a supporter of our own products I proposed them to use o ur own ERP OptimusERP to handle the accounting, financials, billing and other important aspects of their business.

The story line is important because it reveals important aspects about application architecture. This new and soon to be famous HandsOnEducation on-line store for educational toys begun in November 2009 when they bought some famous brands and started their business. Because the friends I am talking about had experience with other ERP software I considered a minimal introduction would be enough, so I explained to both of them the basics of the OptimusERP, gave them the CHM manual and decided to offer support if things go bad. It was a pleasant surprise to hear that they managed to discover very quickly how to input in the application the “Received Invoice” and to follow all the steps which will make the products appear in the stock. Due to an exhibition they were supposed to be present (something about kids) they did not have the time to input all the received invoices.

The OptimusERP is based on a 3-Tier architecture functioning very well on low speed connections (even 64Kb), but due to the crowded atmosphere at the exhibition they decided to sell “off-line” and to input the data in the application afterwards. Finishing late and starting early, everybody was too tired to be able to type in the data at the end of the day, so they decided to type in after the show.

Immediately after the exhibition, the first customer came on-line and made a significant order (it was about 100euros, a hand constructible Eiffel Tower). The invoice was introduced in the app, the warning messages ignored and everything went well. The customer paid, money received. Other customers came, things got busy again, but well it’s good to sell…

Several days passed and they managed to enter in the application all the invoices, received and sent. I was asked to help them see the stock values. It is now I realized we missed an important point. A part of the application was configured to allow negative stock, and we used it as it is. So actually we informed the system to sell me objects which I hadn’t yet in the database. No problem I said. Let’s call a consultant and see what options we have.

As you might imagine the only option was to remove all the sent invoices which were introduced before the stock was populated with items, and input them again. I kindly asked them to do this, while helping them to do it faster. After finishing with this we found out that due to fatigue we missed the selling documents at the exhibition. So decided to input them also. As you can imagine that is prior to all the selling we performed. After typing them in, the stock was OK finally, but with one problem: the prices in the stock. This is another important accounting thing because of a FIFO option we had, so this must be corrected also.

In conclusion this lead to two late evenings working the OptimusERP to retype in almost all we had, in the correct and proper order. Doing this on a daily basis, 5 invoices per day is ok, but to type 20 per hour is not so funny. I cannot tell how much I missed the old copy/paste, the EXCEL tables and the undo of Word. I discovered in these hours some major improvements we should perform to our app which I will share with you.

Please note these are not particular problem of our ERP, we designed and implemented it according to “proven” architectural guidelines, well marketed techniques, using best-of-breed frameworks and so on. A lot of the products on the market are designed this way.

Here is what I learned:

  1. No complete training course leads to many later phone calls.
  2. Critical warning sign ignored might lead to inconsistency in stock values
  3. Adding in selling invoices in the improper order and skipping invoices messes up your stock operations
  4. A document is not a set of records, it’s a document. It should be kept as a whole until you decide to input it in the application and be processes.
  5. Undo is a bless, undo should exist for everything. I know a certain order should be preserved but it’s not impossible.
  6. People like to be able to type in a document even if it’s not consistent with your database. Let the checking of consistency/validation for a later step.
  7. People like copy/paste of documents or cells in tables/etc. Record based/web based systems are not copy/paste friendly. Hardly you can copy a set of records.
  8. The critical reports should be presented to the user early on.

Starting a new business goes with a lot of enthusiasm and I believe my friends at HandsOnEducation have more than what it takes to make this move. Helping them starting off helped me realize once again how important is to actually put yourself in your customer’s shoes.

In the next post I will share with you the changes we performed in the architecture and usability of our app and how did the educational startup receive them.

kick it on DotNetKicks.com

Tags: , , , ,

Diverse | Guidelines

Business Objectives as key architectural pillars - doubled by fractal inspiration

by Bogdan Nedelcu 17. January 2010 23:34

This article is inspired by Udi’s post Non-functional Architectural Woes.
This is how the business has been done for decades and will continue to be done for decades more” (Udi Dahan 2010)

As we build enterprise systems we are confronted with continuous change in the business requirements while the business as a whole remains the same as time goes by.

In a previous post i was investigating the possibility to indentify and cover the entire scope of the project using fractal theory. Based on the fact that scope of a project is discovered as we and are constructing the system, a method for uniformly (in terms of distribution) discovery of new parts of project scope would be appreciated.

One might notice that business objectives resembles to its business area, but are also somehow particular. The more you add businesses objectives together the more they look closer to the whole industry pattern. The more you dive into one’s business speciffic objectives, the more you find differences from the industry though keeping an resemblance to the whole. Makes me think again to fractal theory. The attached movie shows how a mathematical figure (the Mandelbrot set) is zoomed in and shows us details about it’s composition and resemblances of the initial picture.

As Udi says, and I kind of agree, the architectural pillars we should be interested in discovering while building an application should be close related to the functional requirements, more specifically business objectives. Decomposing the business objectives into smaller objectives (specific to the particular business and not the the whole) is quite hard.

It is not hard to decompose business objective into smaller ones because we don’t know how, it is hard because we have no clear knowledge on how to identify the real valuable objectives and to cover all of them. We should seek the method for covering all, the method for identifying the processes valuable, all-in-one the method (the fractal function as one might say). And if this method is applied over and over it might guarantee that we are able to find the all the most valuable objectives which if implemented might lead us to a stable business architecture.

You might say that agile methods cover this by iterating and clarifying objectives as the software evolves, whereas Waterfall methods rely on well documented living documents. Both strive to complete the business objectives.

One method, which I can guarantee to work if applied over and over, is to read and comment what other great guys have to say about things you are trying to discover, to be inspired by them and to constantly learn about the targeted business domain.

Tags: ,

Diverse | General

Valuable presentation of John Seddon about Lean Services

by Bogdan Nedelcu 5. January 2010 00:09

I watched a nice presentation at InfoQ of John Seddon about Lean Services. He makes a valuable point about identifying costs not in activity but in the process.

Some key points John mades in re-thinking lean services:

1. Do not apply same principles from manufacturing to services

2. Study your process and follow a piece of work from entrance to exit (value work and wasted work)

3. Study demand and see which is predictable and address it using another system

4. Identify system's conditions for creating waste, not activities performed by people

5. Change is emerging, something you never plan for

6. Putting control in the hand of the workers give you more control than you ever had

7. Never manage with targets, never manage with other arbitrary measures unless you're going over a clif

8. Use measures that derive from purpose and put them in the hand of the workers

Both inspirational and controversial I might say.

 

More resources about him, including podcasts can be found here

Hope it helps. 

Tags:

Diverse | General

A visual Kanban dashboard using a blog engine (ex: Sharepoint)

by Bogdan Nedelcu 30. December 2009 14:41

If you’re interested in means of improving your performance, and you search on the net, you cannot miss Kanban. The concept is very simple and I belive easy to implement. While I haven’t yet tried it myself, I searched for some software which will allow me to track the cards in the different swimlanes.

I have found a nice hosted solution at AgileZen which judging by their presentation movies is quite an impressive piece of work. Listen to an episode of Hanselminutes if you want a piece of the history of this application and the technique as well.

Another simple implementation of a Kanban dashboard is the One-Html-File which is straightforward and simple to understand for a beginner. So I thought to combine this nice idea of one-file dashboard (mainly a javascript page) with a blog site inorder to have a storage behind the board.

The concept is :

 

  1. 1      Create a blog site for each kanban project (eg: http://demokanban.blogetery.com/)
  2. 2      For each swimline in your process define acategory in the blog
  3. 3.      For each kanban card we shall create a post onthe blog (http://demokanban.blogetery.com/2009/12/27/s1-integrate-sms-payment/) and select a category where to post it.

 

In order to display a Kanban board I wrote a simple javascript page which reads the RSS feed of the blog and creates a visual representation of the cards. Note that the script provided can be used with any blog as long as it follows the RSS format and follows the above concept.

You can find bellow 9 steps to transform a simple bloggingsharepoint site into a fully functional Kanban borad.

Step 1: Create ablog site on a sharepoint machine.

 

 
Step 2: Create the categories (a Ready category for each onesignifies the waiting queue) 
 
 
You can type, in the name of the category the maximum numberof accepted cards. This will not limit but will have a visual inpact on theuser. To have them ordered use a number and a dot.
 

Step 3: Createthe posts and assign them to each category you choose.

Input at least one post in each category in order to see agood visual representation.
 
 
Step 4. Check theposts are correctly displayed in the first page of the blog
 
 
 
Step 5: Create a documentlibrary to store your dashboard
 
 
Step 6: Copy the following two files in this document library.

 
 

Step 7: Use windows explorer view to edit the HTML file andto change the URL property in the javascript to point to your RSS address ofthe sharepoint blog. You can find this bi right clicking on the small RSS icon   on the first page of the blog.

The address should look like this:

url: "http://appsrv:45421/dotnet/demokanban/_layouts/listfeed.aspx?List={CA1E35D6-6264-473B-849D-80851416A380}", 
 
Step 8: Add a “Pageviewer” webpart to the first page of your blog and type in the address of thekanban.html file you just uploaded.
 
 
 
Step 9: Check tosee if your board looks like this
 
 
 
By using sharepoint you can benefit from all theinfrastructure of users, portal integration, addressability, file attachmentand others , which can provide your kanban board with all the bells andwhistles you need.
this is not the best board representation it exists but for sure it can be used to start experimenting.
 
The files are bellow:

jquery.js (55.91 kb)

kanban.htm (2.38 kb)

kick it on DotNetKicks.com

Tags: ,

General | Guidelines

Some thoughts about leadership and change management

by Bogdan Nedelcu 13. October 2009 00:12

An oposable debate arount management being the same aschange management is the concept of management as being a repetable process anda measurable one. Management should be governed by a common seed, surrounded byadapted activities to different contexts. The seed should be the same for sometime, in order to evaluate the eficacity of the management process. In thispoint of view, management is a rotating circle while change management is aprocess of transformation from one state to another which is not alwaysreversible. Management processes should last as long they provide value to thebusiness, while change management should be activated when value is no moreprovided. Value should not be seekd when changing management and should beregarded as an invested energy to move the system from one state to another.This is equivalent to phisics where to move a system from an stable equilibriumto another state of stable equilibrium necessitates kinetic energy. Managementis stable equilibrium and change management is the process of transformingbetween two states of stable equilibrium.

Leadership is not always directly related to management, theycan coexist in the same person or can be two separated things. Leaders oftenfind themselves in the imposibility of performing managerial tasks as they arerepetitiv, while managers find difficult to do leadership as they requireinspiration, charisma and personal involvement in day to day activities ofpeople. Combining the two requires either a natural talent either an good selfdiscipline as to not let any of the two sides overwhelm the other. Leadingpeople means you should look more into the future, inspire them to live theirdreams, managing means to look at the process and improve it, not alwaysrelying on people but rather on the organisational setup. Balancing the twomentalities should be the focus of any person trying to lead a team because teamsneed leaders but also good managers. 

Tags: , ,

Using ADO.NET Data Servics in Silverlight 3 and eager loading parent entities

by Andrei.Rinea 5. October 2009 10:19

We decided that in our Silverlight app that we develop we should not waste time writing WCF services manually to interact with data. So we turned to ADO.NET Data Services.  

I created a small Web App to host the ADO.NET Data Service which exposed the Entity Framework Model. All fine and dandy, being a bit pedant I created a very small console application just to add a service reference and test the data retrieval. All went well. Then I put the querying logic in the Silverlight app.

Something like

var employees = (from e in GetFreshContext().Employees select e).ToArray();

But upon running in Silverlight (in the console app it ran great) I get thrown with this exception : 

System.NotSupportedException: Specified method is not supported.
at System.Data.Services.Client.DataServiceQuery`1. System.Collections.Generic.IEnumerable <TElement>.GetEnumerator()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at MyApp.MainPage..ctor()
at MyApp.App.Application_Startup(Object sender, StartupEventArgs e)
at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

Why?! The very same code doesn't work in Silverlight no matter how I try. Searching on the web desperately, led me in the end to this nice post on the blog called (how ironically?) theproblemsolver : Consuming an ADO.NET Data Service from Silverlight written by Maurice De Beijer

It turns out you can't query synchronously in Silverlight although the exception did **NOT** contain any clue whatsoever regarding this although it should. The correct way :

var query = from t in GetFreshContext().Employee select t;
var dsQuery = (DataServiceQuery<Employee>)query;
dsQuery.BeginExecute(result =>
{
    ComboEmployees.ItemsSource = dsQuery.EndExecute(result).ToArray();
}, null);
ComboEmployees.DisplayMemberPath = "FullName";
 

Then I ran across another problem and it puzzled me for a while too until I found the answer. Specifically I needed to load the Department along with Employee (the entities are different in the real app). Retrieving the list of employees brought the Department property null.

I (might) retrieve a long list of employees so re-querying for each employee entity for the department would be a very costful operation (too many HTTP requests). Looking for solutions I came across Typed Eager Loading Using Entity Framework (& What is Eager Loading vs Deferred Loading) which solves the magic string problem of eager loading but I didn't really care about the string.

I needed the entities eager-loaded. However on Silverlight/ADO.NET Data Services I don't have the option of

DbDataContext.Categories.Include(“Products”)

as presented in the blog post.

Finally it turns out that, as John Papa describes in the MSDN Magazine (Using Silverlight 2 With ADO.NET Data Services), you have an Expand method :

var query = from t in GetFreshContext().Employee.Expand("Department") select t;
var dsQuery = (DataServiceQuery<Employee>)query;
dsQuery.BeginExecute(result =>
{
    ComboEmployees.ItemsSource = dsQuery.EndExecute(result).ToArray();
}, null);
ComboEmployees.DisplayMemberPath = "FullName";

Cross posted from http://blog.andrei.rinea.ro/post/2009/08/19/Using-ADONET-Data-Servics-in-Silverlight-3-and-eager-loading-parent-entities.aspx

Tags: ,

Silverlight

Better management

by Bogdan Nedelcu 11. September 2009 02:07

I will use this post to gather resources about blogs/webcasts for management, leadership, speaking, etc. Here you go!

1. Better Management.com -  http://www.bettermanagement.com/ 

2. Harvard Business School Working Knowledge - http://hbswk.hbs.edu/ 

 

Tags: , ,

Some thoughts about problem solving

by Bogdan Nedelcu 9. September 2009 14:52

I remember from a book called "How to build your own space ship - The science of personal space travel": one problem with the space modules was that of heating, once they are up in space, the temperature on the side facing the sun is tremendous high compared to the face facing the deep space. The design team was confronted with chosing between a complex head transfer engine or a sophisticated material which would resist both at high and very low temperatures. One brilliant engineer came up with the excellent idea to spin the vehicle at a certain speed in order regularize the temperature.

Problem solving is fascinating. Listen to this web cast and figure out what to do when such brilliant ideas are not available.

 

Tags: , ,

The WayBack Machine and archive.org project

by Bogdan Nedelcu 6. September 2009 21:27

Saturday night I had the pleasure to meet Aaron Binns and chatted with him for some hours. 
He is working on an interesting project called archive.org. Trying to archive everything available on the internet and store for eternity. A good application is the WayBack machine. It shows how your web site looked several years ago. Let's see TeamNet in the time machine.

Tags:

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

RecentComments

Comment RSS

Calendar

<<  March 2010  >>
MoTuWeThFrSaSu
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar