Sunday, September 27, 2009

Scrum - Estimating Stories

Let's imagine that we have a bunch of things which we want to do. Let's call these things stories. Now imagine that we don't know exactly how to do all that things but we would like to know when we finish all of them and how much work left. We would like to correct our estimations, know more as we will go forward with finishing every next story. What we can do? We take out as much as we can from the only information which we have - the bunch of stories and our experience (if we have one).

Some of the stories are complex, some are simple but seem to require a lot of work. So which word would cover complexity and time at once? The word is effort! OK, so currently we know that we want to estimate the effort required to do the stories. But which unit we are going to use? How we will measure that, in hours, in meters? Actually it is just our guess, so this is an abstract unit. We can call it however we want, but because it is relate to stories let's call this unit just a story point.

OK, so we have kind of an abstract unit and a bunch of stories. So what we can do now is for example choose one small and one big story, and assign to them appropriately small and big amount of story points. Now we can compare other stories to them. Thanks to that we will know relative effort of the stories. When we start to do the stories we will learn how much time one story point takes us and based on that better estimate when we are going to finish all bunch.

This is just the general idea behind the story points. In the next post I'll give you more details.

Wednesday, September 23, 2009

If-Modified-Since

When using If-Modified-Since it is important to remember that milliseconds are truncated. Many people and books say that the solution is to always truncate milliseconds before storing the time. It is NOT a good solution if the server can update entities more than once per second. Look at the example scenario below:

Client:
- getFeed Time: 12:12:12:1
Server:
- First Feed Update Time: 12:12:12:4
- Return Feed, Last Updated 12:12:12 Time: 12:12:12:14
- Second Feed Update Time: 12:12:12:56
Client:
- getFeed since 12:12:12
Server:
- Return Not Modified after 12:12:12

Server compares seconds instead of milliseconds and replies Not Modified, although there was an update after returning the feed (Second Feed Update). The solution is to store lastCheckedTime in the beginning of a request processing on the server and use it as Last Updated. Than the client would ask about changes using that time.

The other soultion is to use counters instead of timestamps.

I'll exmplain it better when I find more time:).

Monday, September 21, 2009

"Nasza Klasa" User Interface and User Experience

There is a polish web site called nasza-klasa. Recently a new function was added there - Ĺšledzik. It allows users to write a short message which is then shown on a start page of her\his friends. When I saw it first time, I asked myself: "What is this!?!". It seems that there are other users who don't like it either. I took time and figured out why my reaction was like that. Especially that the idea behind that function is really good. I realized that the problem is with its place on the web site, how it is shown. It is a first thing which I see after login and it's not what I used to see and what I would like to see first. Currently users have to always scroll down first to see information which is more important for them, to start to browse the web site like they already get used to do. I suppose that the reaction would be completely different if the new function would be put in a different place.

This is a really good example how important UI\UX are.

Monday, September 14, 2009

Android game

Almost one year ago I started developing a simple game for Android. I always wanted to create a game which would look like drawn on the paper. Unfortunately I had to stop working on the game, but below you can see something working:).

Saturday, September 12, 2009

Eclipse E4 and XWT - First Steps

I've been working with wxWidgets, Qt, GTK, JFace, SWT and Windows Presentation Foundation. Now it's time to check XWT. In order to do that I've started to write my next application using that tool. So far I found only two problems. One is that preview for XWT UI doesn't work for the examples from eclipse cvs (at least on Ubuntu) and second that XWT versions of the examples doesn't want to compile (a solution is described below).

If you want to start with XWT I would suggest reading the source code of examples:
  1. Download the newest Eclipse e4
  2. Start it
  3. From main menu choose File->Import
  4. Select CVS->Projects from CVS
  5. Select Create a new repository location
  6. Paste :pserver:dev.eclipse.org:/cvsroot/eclipse to Host
  7. Set anonymous as a user
  8. Leave an empty password
  9. Select Use an existing module
  10. From the list of modules select all examples in e4->org.eclipse.e4.xwt->examples
  11. Select also e4->org.eclipse.e4.xwt->bundles->org.eclipse.e4.xwt.ui.workbench (without this bundle xwt examples don't want compile)
  12. Click Finish
To run one of examples:
  1. Start Eclipse e4
  2. Open file contacts.product from a project org.eclipse.e4.demo.contacts
  3. Choose Overview tab in a view where file was opened
  4. Click Launch an Eclipse application
Useful links:

http://www.vogella.de/blog/2009/08/18/eclipse-e4-css/
http://www.soyatec.org/xwt/trunk/org.soyatec.xwt.emf.demo/src/demo/
http://wiki.eclipse.org/E4/XWT/Running_the_demos
http://wiki.eclipse.org/E4/XWT
http://www.vogella.de/articles/EclipseE4/article.html
http://dev.eclipse.org/blogs/yvesyang/2009/01/17/xwt-getting-started/
http://dev.eclipse.org/blogs/yvesyang/2008/11/28/xwt-declarative-ui-designed-for-eclipse/
http://download.eclipse.org/e4/downloads/drops/S-0.9M5-200907101930/e4-news-M5.html