This is a picture of punch-a-sand-bag training session.
It actually felt good during the training and even after, despite discomfort, it feels good to commit to training.
Experience is something you don't get until just after you need it
This is a picture of punch-a-sand-bag training session.
It actually felt good during the training and even after, despite discomfort, it feels good to commit to training.
Phone rings. It is my friend Mor.
- Hi. We have a new startup thing going on. You have to join!
- What are you doing?
- Can’t tell yet. It is in a stealth mode.
- I have to sign NDA to know?
- Nope. We don’t tell anyone before they start working.
- (pause)… I see. Well, anyway, I’ve got the best job now. We are changing the world.
I forgot it a minute later. Few months later, an email:
“Hi,
We went to University together and I remember you as a good guy. I am founding a storage related startup and you have tons of experience. Why don’t you join us? “
It is flattering and all, but I can’t. I am busy improving the world with DirectAccess.
Alon: “We have a chair with your name on, when are you coming to use it?”
Me: “Thanks man! Not in a near future for sure.”
Then, it is Mor again:
- Hi, we still looking for people and your skills are required. Come talk to our VP of R&D.
- I am not looking, but I can hear the guy out. Chances that I will come are zero.
Then it is a previous company:
- We are growing and you should still remember the stuff. Come, you have a potential.
- I am not looking and I am good at my current place.
Then Mor’s company bites the dust. Then one of my previous bosses leaves the company:
- (Me): where are you going now?
- (Her): I am going to start a new project from scratch.
- (Me): what people are you looking for?
BAM!
Once I said it, I understood that something is wrong. It was me asking for position in another company. The thought actually crossed my mind. It never did before despite long hours, frustrations, disappointments and job offers. Now it did.
The good thing is that I know there is a problem and problems I can fix…
It is time for me to learn ASP.NET and AJAX.
Why ASP.NET? Because it is C# and it works well. Because there is a huge MS behind the technology. Because it works well and it is easy to get started with it (there is a Visual Studio Express). Because it is simple.
So to start I went to http://asp.net and started looking at the tutorials. It definitely helps, but you cannot learn programming by reading a book (or a web site). So I fired up VS and created an ASP.NET project.
The first question is whether to use MVC or WebForms:
Since I do believe Scott Hanselman and I am a freak of lower-level and finer control it is MVC for me.
The first steps feel fine, the integration with VS is great: there are actually “Create a view/model/controller” there! However, the problem began when I try to play with AJAX a little bit.
I have started with this tutorial and immediately ran into a problem: what should my partial page to inherit from? No matter what I have tried to do: either “compilation error” or the page “does not implement method” error.
In better cases, I get “unhandled exception”.
In the end, it turned out that when you want to use
Html.RenderPartial("ListContentView", Model);Your “ListContentView” should be a partial view and not a regular view:
Otherwise, life is not good
Recent new form PDC had nearly caused me a heart attack: MS drops Silverlight for web and bets on HTML5.
Few months ago when I was choosing a platform to write my app, Silverlight looked good:
Even worse, detachable feature pushed me to develop a thick client to save the round trips to the server and improve performance.
Few months later, it does not look like a great idea anymore. Not only I have to re-write the app in HTML5/JavaScript, but I also have to re-architecture it to make it more decoupled. On the bright side, I plan to make it a learning experience and also to document the process in my blog to practice a discipline of posting and writing.
I have not worked on my project for months. :(
Now, I am back. At the high point of release frenzy, but still I have an itch to scratch.
It feels good to be back…

Few days ago I have received a Kindle DX. For a long time i thought about buying one and finally I did it.
It was clear to me that I’m getting DX because of the screen size. The regular Kindle narrow lines looks annoying.
AFTER I’ve got it, I started to think why did I buy it? Will I start to read all my books on Kindle? No. First of all, I like the feeling of a real book better. Second, some of the books are unavailable on Kindle, especially books in Russian and Hebrew that I read.
BTW, Kindle DX does not support Unicode. Read and weep. It is only 2010. Amazon still are not aware that there are other languages than English.
Anyway, if I’m not dropping books, then why to get Kindle? It was clear to me that I need one, but why?
First reason I thought of, is that I have a bunch of PDF’s and DOCS that I want to read. Currently the only options are:
I’ve checked and the results were as predicted: I did not read books in PDF and DOC format apart from a very rare exceptions. I hope that with Kindle DX it will change.
Another reason is very simple one. To get a book from Amazon takes about 6-8 weeks using sane delivery method and costs about 30$. This means that it is a huge waste of time and money to get a single book from Amazon. On the other hand, getting a bunch of books is a considerable amount of money.
Taken together, I rarely order books from Amazon and when I do, I do it in batches. Now I have Kindle. I can get a book within minutes, without additional payment and cheaper than the printed edition. I have a feeling that Amazon is about to get much larger part of my income.
“I think this is a beginning of a beautiful friendship …”
It is 10th annual ribosome convention. Best ribosomes from all over the world in the same place. Taken away from their duties and day-to-day business to focus on one and only thing:
Why THE HELL we do not get what was specified after gene translation???
It seems that the final quality of the product is pretty bad. The final thing apears to be a little "hairy". Instead of getting something like this:
We keep on getting stuff like this:
Now the difference is striking, even though, a total average of hair lenght is the same.
On a previous, 9th, congress, one of the seniors ribosomes suggested translation coverage tests before RNA is translated into protein. If the RNA does not pass the test, the protein is not produced. Arbitrarely, the bar was set to 51%, which is the minimal majority. Other candidates: 7, 13, 21 (black jack) 69, did not make it.
This means that RNA tha arrives to ribosome have to be checked for at least 51% of its rate BEFORE the translation is done.
It is plausable to think that 51% coverage will enable us to tell between "desired" and "acquired". "We need more quality!", thought ribosomes.
However, one year later things look much less optimistic. Ribosomes has come to a sad realization - 51% is not enough. RNA coverage did not help!!! Shimps keep on being produced. Moreover, some crazy ribos reached as high as 85% covrage, but still received:
Ribosomes are stuck. Discussions continued until a talk given by some academic-somes. Apparently the above two spieces share 96% of DNA code!!!!
Now this must be wrong. The differences are too large!!!
How can it be????
The answer is simple: there is a huuuuuuuge difference between micro and macro. On a micro level the difference is almost not-recognizable: 4%. It cannot be caught and mapped out by 51% RNA coverage.
On a macro level the difference is huge. Not because the micro parts are different, but because they interact differently one with another.
This means that RNA-level testing and coverage have a very limited payoff. The path to a better final product goes thought a better understanding of the global scope and how things work, much more than in lower testing.
This knowledge is hard to measure and does not seem to bring benefits right away. However, until then we get it - same same, but different...
I’ve downloaded version 1.5 of Mercurial for windows. Install was seamless and now I’ve got a command line to play with.
Lucky me, the setup has added “hg” to the path. I hate it when it does not do that. Since I already have a project this is what I’ve done:
> hg help
Help screen with many options.
> cd TestProject
> hg init
> hg status | less
'less' is not recognized as an internal or external command,
operable program or batch file.
> hg status | more
<A list of files all marked with “?” at the beginning>
> hg add *
> hg status | more
Now all files are marked as added.
> hg commit
<Write a comment>
> hg status | more
Empty line.
I notice that there is some not related directory:
> hg remove BrowserTest
> hg commit
Write a comment.
Now there is some weird zap file in my working directory. I wonder what it is…
To Be Continued …
[Edited]
The best part is that your entire repository for a given project is located in “.hg” directory!!!!
I wanted to write on this topic for a long time, but recent piece by Joel Spolsky has made me do this.
Joel talks about having less conversation in a project and communicate less during software project. The point is logical: the more people involved in decision making, the more time it takes to reach a decision and the less chances of success the project has. Proposed solution is logical as well: limit communication. Do not tell everyone what you are doing and ask their opinion. Decide in small numbers.
I am all for small numbers. Let me decide my own fate. There is one small correction though…
There is a difference between duplex and half-duplex communication. Computer networking distinguishes between those two, however, in a day to day life we tend to forget about half-duplex communication as full duplex is a default:
We are so used with full duplex communication that there is a tendency to think of it as the only type. How it is related to software projects?
I had virtually joined another team during last project. This team held daily sync as the deadline approached and it appears that I misunderstood the purpose of those meetings. I thought that the meetings are there to sync team members regarding their doings, plans, what they did and etc. However, the moment I said: “I am working on a problem A”, the immediate reaction was: "Why don’t you try this”, “You should do that”, “Try to turn this flag on” and etc.
I wasn’t asking for help or directions! I was telling my status so they would know.
This the major difference between full duplex and half-duplex communication. It is good and desired to communicate out your status, plans, what you did, why you are doing this and that. However, this communication is half-duplex. You are not interested in other’s opinions, unless of course you are going full speed into abyss. People have to understand that their opinions are not required, however, they do need to know what their peers have been up to. This knowledge is essential both to prevent duplicate work and to provide a bigger picture.
Communicate out. Do not ask permissions.
Recently I’ve got an email from one of my managers saying: “If the team will solve K bugs this week, I will make you a breakfast”. It can be food, it can be money or it can be sex. Does not matter. The idea is: you work hard and do something that is not possible otherwise and you will get a reward.
This is a good case to apply system thinking!
Managers sometimes think, and my guess is that this manager in particular, that the dynamics looks like this:
Meaning that raising reward/incentive will increase the amount of hard work that people are putting.
There is a number of problems with this approach, for example: it assumes that people aren’t working hard enough already. However, I will concentrate on the connection between reward and hard work.
On a basis of my observations, this method does not work. At least it didn’t in this particular case. It does sounds logic, so why it does not work?
More people-aware managers find out that the connection between award and hard-work is not direct, but rather looks more like this:
Meaning that if the motivation is low, increasing reward will not really increase the amount of hard work. Reward will influence motivation, which in turn will influence hard work.
This view is much more realistic and sometimes appears to work. It does even shows a basic problem with this approach: there is a connection between reward and hard-work and it will go into both directions. Once reward is gone, the hard-work is gone as well.
Even though the above view works from time to time, it is still simplified. One sigh of the simplification is that:
The above two observations together mean that there is another relation that is not covered by the above view.
Closer to reality view looks something like this:
Notice that there is a motivation->hard-work->pride force-feeding loop. Meaning that people with motivation will work harder, will take pride in their work, which will motivate them again.
The inner loop is the one targeted most of the time. This is also the one that is the easiest to target. However, notice that the larger the “greed” the lower the motivation. This means that increasing the reward will increase the “greed”, but decrease motivation. Sometimes it will work, but sometimes the reward will be increased, but this will decrease the motivation in such way that people will not work harder. This will happen when there is no trust between developers and management.
What happened to that manager? He got promoted.
One concept that always fascinated me is the whole-parts thing. How the parts become a whole and how you can dissemble the whole into parts.
System thinking is just a thing about it. Usually, when we try to analize some system, we break it into parts and try to understand each part. Once this is done, we hope to understand how the whole thing is working together. However, there are times where breaking into parts misleads.
This is where System Thinking is coming into play (bing for it). It says that sometimes you better off thinking hollistically instead of zooming in as much as possible.
This is an example from software development.
Sometimes it seems that every fixed bug causes 5 regression bugs. In this case the most common response is to make more checks on the code before check-in. this is how it looks graphically:
What it means is that when "Regression bugs" raise, the process increases. Notice the "+" on the arrow from bugs to process circle. Now, this is something that we decide.
An arrow from process to bugs is something that we anticipate. The arrow is marked with "-" meaning that when process increases we anticipate that the number of regression bugs goes down. Notice that the number of "-" signs on this loop is odd, meaning that this is a balancing loop. Or in other words, it will stabilize itself.
This is "divide and conquer" approach.
However, from experience it is not always works out like this. Thus, if we turn to hollistic system thinking we get another picture:
This picture introduces another feedback loop. The new loop has 2 (even) "-" arrows in it. This means that this is reinforcing loop and it can go wild.
Clearly, this is a simplified view of the process, but even in this simplified view there are two loops that battle one another.
If reinforcing loop wins, then introducing more process wil not make the situation better. In this situation, it is probably better to educate people to fight off this loop.
to be continued ...
Great idea, this buddy thing. There are few caveats thought.


where "=" specifies a total memory that can be used by this program, "-" specifies memory currently used by the program (and mapped by operating system), "0" is a beginning of a memory and "v" points to the largest address used currently by the program.
0--------------------------------------------v
================================================================
Then the next malloc might use freed memory instead of taking new memory from OS. If a new memory has to be taken from operating system a special system call is invoked: sbrk. In human it means system break or move the system break or i need more memory! map more memory for me! NOW!!! move it move it move it move it!!!
0----____---------------_____------------v
================================================================