Tuesday, August 26, 2008

Into the Sea

The knots are tight, full sails, hearts prepared, fear crushed ... ready to cross the sea, into the chaos... everywhere is dark ...fight the infinite waves and furious pirates in the way ...

Well, the modern day version of the above is the situation of our team getting prepared to participate in the second Digital Media Festival. What we are planning to do is to prepare a playable demo version of Soshiant. How much work does it need? Lots, lots and lots... enough to make what we want to do seem like wishing for a miracle and favor insanity over rationality.

Our team, Syrous, Farshid, Peyman, Soheil, Yaser and Faham, being the symbols of bravery and courage have all united and prepared themselves for the Uber-Challenge. At last we know that we have got "the Force" with us!

Every second counts from now and is lived, life begins!

Wednesday, August 20, 2008

Lets get disconnected from Time!

How can some code behave absolutely fine when being inspected under a debugger, and go absolutely nuts once running free!!?
Well, enter Real Time code which is synchronized with the time we measure! This happens in the Soshiant project. The project is real time, although "Soft Real-time" since it has to respond in a specific time frame, known as each Frame of the application which one main loop executes, and also dependent on the actual time which goes by in our real world. Every frame knows the time passed since the last one, for example 16ms. This time is used as an input value to different algorithms in the code, such as the animation code which uses it to find out about the correct transformations that needs to be applied to the characeter bones in the current frame.
What the debugger does is to first of all stop the execution of the program on a specific point, the break point, and enable you to trace the code line by line from that point on. Stopping the execution means stopping the main loop and bringing its frequency down but the real time which we sense is of course not going to stop so the result is loss of synchronization between the frames and the time. If in normal execution the 10th frame is performed at time 300ms, tracing line by line using the debugger will cause the 10th frame to be executed at time 900ms. This would mean that this frame would witness different states for functions which are dependent on the real time while debugging. A practical problem as a result of this problem would be when you see wierd behavior during two animations being blended into each other which happens during 0.2 seconds, but breaking the code execution at the start of the blend will not let you follow the logic as it happens since that 0.2 seconds of real time will pass as soon as your debugger stops the code for you to evaluate.
Solutions? Short answer, to output trace what you want to monitor while the application is running and not to use break points. Not a real nice solution and sometimes cumbersome. Other solution might be to decouple the algorithms which rely on time from the real time we measure and provide a virtual time system for the application. Speaking about time, we might not be able to find out which time is the real one and which is virtual, relativity anyone?


Sunday, August 17, 2008

9.69s


A little correction is needed due to the spectacular performance of yesterday!

Lightning Bolt.

9.69

Saturday, August 16, 2008

9.72s

The Olympic Games are beautiful. All the athletes from all around the world, each showing huge mastery in a specific field, all competing. Yes it has its ugly spikes too but overall the level of beauty is huge.

My favorite to watch, the 100m sprint, where a whole life is lived in less than 10 seconds, very short, very strong and focused, no tiny mistakes. After all isn't our whole life a 100 m sprint also?

One sight from the opening ceremony of the Olympics made think a bit, most of the athletes in the parade had a digital camera or a handicam in their hands, capturing the moment, it was a reflective experience where you would doubt in who is the real audience, the people watching the athletes or the athletes watching the people?

The Art of Basketball



An artist showing off his art!

Yeah Wade!

Monday, August 11, 2008

Today is a gift

Kung Fu Panda is fun to watch.The 3D rendering has a unique style which makes it seem like traditional 2D animation, the animation weights and timing are tremendous, unlike the 3D animations from the previous years where every character seemed like a robot, overall lighting and colors look beautiful, not to mention the whole story concept which revolves around Kung Fu which is great. I specially enjoyed the Zen quotes of the master, "Oogway", and this one:"Yesterday is history, tomorrow is a mystery, but today is a gift. That is why it is called the present.".

Saturday, August 09, 2008

Black-Risks

The best parts of development in a coding project is when you don't know what you want to do, and once you decide, you simply implement. The worst parts, project wise, are the parts when you know exactly what you want to do, but do not know how to do it. The reason for not knowing is usually due to abstractions inside the frameworks and libraries you are using. These are the real risks which can take a lot of time the first time they are encountered and get solved right away the next times. These are the issues which make deterministic project effort requirements almost impossible. A good name for such things might be "Semantic Black Holes".
We are faced with a lot in Soshiant.
Of course it is possible to reach deep inside these black holes and find out everything about how things are done and need to be done but the only thing lost during this process is the single crucial parameter usually represented using the "t" symbol.
On the other end the same frameworks speed up and help out in many tasks and provide lots of useful features which if you wanted to start and implement yourself it would have needed lots of time too.
Time saved for needed features which exist in a library and can be used: t1
Time spent to find out how the library can tweak to provide the exact need that you have: t2
Happiness = t1 - t2