Wednesday, October 21, 2009
JetBrains is releasing nightly builds of ReSharper since Monday. R# looks very promising so I installed it.
But my favorite tool just got easier to update. Scott Cowan just published a tool to upgrade ReSharper 5.0 EAP automatically. Just like the previous version of the ReSharper Updater, it just works.
Thanks Scott.
Monday, September 28, 2009
Martijn Boland
recently blogged about his first adventures with a new contract using EF. He compares notes with the original
Vote of No Confidence and realizes the fears from back then were right on the money. The thing that totally blows me away is one of the comments to his post:
EF might not have tons of features, but from what I’ve read lately,
performance is not one of its weaknesses, specially when compared to
NHibernate, am I missing something?
Here we go again... I heard NH doesn't perform well, so I'll pick EF.
My statement is: C# doesn't perform well, so pick C. Wait, no... let's go with assembler. Write your own compiler for better performance. And don't forget to bitshift when multiplying or dividing by 2. Cheek in tongue of course... or is it the other way around? ;-)
Seriously now. Don't talk about performance as if it were the holy grail of development. It's not. Think about other
equally important things: maintainability, total cost of ownership, readability, effort, time to market... If you were to ask a customer which of these values are most important to him, do you really think
performance will be the big winner?
Sometime yes. Like in big number crunching batch operations, real-time life monitoring systems or 3D gaming. And you'd be right assuming NH doesn't perform well enough for these scenario's. But let's face it. Most application don't have these critical 1ms per transaction performance requirements. Other aspects have to be taken into account with an equal amount of importance.
This performance argument is really getting boring.
Thursday, September 24, 2009
I was in awe before
the master himself. A week of absolute code bliss with Jean-Paul Boodhoo. It has really been a life changing experience. I know it has changed me and the way I look at code. My focus has changed radically. I now find myself being a nag with team members. Make it work first, then make it as humanly readable as possible. Or maybe it shoul dbe "Make it as readable as humanly possible"...
I just read the
five blog entries I wrote back then, and I'm amazed at the endurance that was required during the course. This was intended: "You only learn when you step outside of your comfort zone". I remember feeling tired on the second day, sleepy on the third, and a real zombie before the end of the week. More than 80 intense work hours squeezed into five exhilarating days.
I remember meeting a bunch of great like-minded people. I can't really say we keep in touch, but I regularly hear about some of them that are active members of the community. I read their blogs, and I hope they sometimes glance my way.
If you ever get a chance of following a
nothin' but .net bootcamp, DO IT! No excuses, no lame explanations, just do it.
Tuesday, September 22, 2009
Just a quick reminder to all interested.
Udi Dahan will be joining the alt.net beers night next Wednesday in Mechelen.
If you also want to be part of it, drop me a mail or add a comment on the google group thread. I'll take care of it.
Look at our
google user group for more info.
Friday, September 04, 2009
Gmail was down a few days ago. That's a big deal, right? Or was it?
Shamelessly reproduced from
http://www.modelmetrics.com/reidcarlberg/four-reasons-i-dont-care-that-gmail-went-down/. It's a bit outdated with this recent outage, but the idea behind the post renders exactly how I feel about it.
Gmail experienced an outage in Europe overnight. There’s some handwringing and frustration about it. But you know what? I don’t care. Here’s why.
1. The last significant Gmail outage looks to have been in August. Four months ago. My old email provider, which cost about $25,000 more per year than our enterprise Google account (which includes a whole lot more), used to “have some issues” (as we put it) about once every four weeks.
2. Google’s Gmail ops team is working on this. Correct that – they worked on it and it’s already fixed. I didn’t have to do anything. I didn’t have to submit a ticket. I didn’t have to call. I didn’t have wonder if anyone else was having the problem. It’s fixed.
3. No matter what the problem was, I’m not going to have to go out and buy a new server or install a patch. I’m not going to have to do anything other than wait a few minutes and try again. Awesome.
4. No matter what the problem was, I’ll bet you $100 I didn’t loose any data and that you didn’t either. The sum total cost of the problem was inconvenience. Although that can feel significant, it’s so much better than incurring substantial actual real dollar costs.
So that’s it. Gmail is back up and all that’s left to do is complain. But I’m going to ignore the complainers on this one. This is definitely no big deal.

Wednesday, September 02, 2009
Yippee, I will be speaking at the upcoming
XP days in Mechelen. This is a first for me, and I'm really excited about this.
Pascal Mestdach and myself have submitted a session on Agile Acceptance testing with FitNesse. It just got approved.
Monday, August 31, 2009
Since the beginning of July, I've been working on a java project. The language is very close to C#, although it has some minor irritating differences, like the lack good generic support, extension methods and closures. The big difference however is not in the language, the tools, the libraries or the utilities. One of the big differences I've seen is the
community.
I've been on many projects that have worked exclusively with Microsoft tools, libraries and (god forbid) examples. When the subject is raised of alternatives like an open source ORM or IoC container the response is predictable. It's a raised eyebrow stating clearly that non-MS solutions couldn't possibly be better than libraries like the EF, EntLib and such. Oh, and were you suggesting using anything else than stored procedures for data access?
Your idea won't scale...
Your idea won't perform...
Your idea won't be secure...
Your idea will be buggy...
Have you thought about the maintenance ...
Let's look over the wall now, shall we? If you announce proudly that you're going to work on a java project with hibernate and spring, you get a blank look from your fellow devs. "Duh! Of course! What else?". This best of breed approach took some years to mature but is way ahead of the default .net crowd.
The alt.net movement, the NHibernate mafia and all those alternative folks who don't adhere to the true MSDN way of doing software development are actually very close to this. The difference is that we are there by choice and by experience. The java guys are there, almost by default. This means that the mainstream java dev knows and understands things like IoC, AoP, ORM. He might have forgotten (or doesn't know) why these practices were introduced, but he's been using them daily for some years. Just like we forgot about writing our own compilers and practicing bit shifts to divide by 2.
I think it is our responsibility to enlighten our colleagues, one at a time, for the rest of our professional lives. To try and bridge that gap between alt.net and the mainstream .net development. And ultimately, as a community, help Microsoft on the course it is taking to embrace open source.
Quoting a fellow alt.net colleague I value greatly:
How on earth did it ever get this far in our industry for this mindset to be considered alternative?
Sunday, August 23, 2009
I was just browsing around and stumbled on this nice site called www.mysterytopia.com. It lists different categories of mysteries, ranging from the classic ancient mysteries to spac

e and astronomy. The first page I hit was "It's official: cows point norht". That's when my eye caught the Belgian flag in the ads rectangle.
I realized this was a live traffic feed telling the world who was watching the site at this time, and that I was on top sporting "Vilvoorde, Brabant: It's official: cows point north". Silly really, until I realized what the favorite topic was of US/Canadian viewers.
Sunday, August 09, 2009
I'd like to compare the java language to .net as I'm experiencing it. First of all, I'd like to point out that the differences are less than the similarities. Purely seen from a syntax point there really are no differences. Except of course if you're used to .net 3.5. This is irritating at first, but after a while you're just resigned to it. Take the simple properties we're so used to in .net
Compare these two identical pieces of code:
java:
private int counter;
public int getCounter(){
return counter;
}
public void setCounter(int value){
counter = value;
}
.net:
public Counter{get; set;}
I know we didn't have them before .net 3.5, and I realize the dangers of overexposing members, but I love the conciseness of automatic properties. For 7 properties I have 7 lines of code in .net and 70 lines of code in java.
Other things you don't get in java are anonymous methods, so that's no lambdas or LINQ either. No extension methods, so bye bye to simple readability like
1.February(2005). Access modifiers are slightly different but that's just something you accept and move in. All in all it's like having to go back to .net 2.0, which a lot of us have to do from time to time.
However, the thing that the .net platform really nailed, compared to java, is generics. I'm going to illustrate this with an example.
.net:
public T Get<T>(int id)
{
return session.Get<T>(id);
}
This is just not possible in java. For example, you cannot ask the type of T at runtime like this
typeof(T)). Generics are just a little syntactical sugar at design time and as a compiler check.
In java, your code will look like this:
<T> public T get(Class<T> clazz, int id){
return (T) session.get(clazz, id);
}
Which makes every caller look like this:
repository.get(Person.class, id);
The cast to T might even fail at runtime if the type returned by
session is not of T.
Primitive types are also something to get used to. In .net, you can easily do
1.ToString(). No such luck in java.
new Integer(1).toString() is the way to go, since
1 is not an object. To me, java seems a more technical language where it is harder to express
intent without giving in too much into technical implementation.
I might sound a little whiny in this post, but all things taken into account, I enjoy this journey into a new, albeit a similar language. I can't wait to get an offer to try Ruby on Rails ;-)
Thursday, August 06, 2009
For many developers, the one-language notion is a sign of lack of professionalism. This is best exemplified by the Pragmatic Programmers' advice to learn a new language every year. The point here is that programming languages do affect the way you think about programming, and learning new languages can do a lot to help you think about solving problems in different ways.
From Martin Fowler’s at http://martinfowler.com/bliki/OneLanguage.html
I got the opportunity to participate in a java project since July. I’m going to share the pleasure and pain this brings to a .net developer. There are interesting differences in language, conventions, tools, application servers, IDE, … Since all I’m doing in the next weeks and maybe months will be java, you’ll hear that from me.
Too bad Martin fowler ended his paragraph with:
It's important to learn languages that are quite different in order to get the benefit of this. Java and C# are too similar to count.
Wednesday, May 20, 2009
I’ve been using Safari books online for a few months now. This is my first experience with an online library so I’d like to share my experience.
As my colleagues can confirm, I’m a fervent reader of technical books, always looking for that extra scrap of information that would give me that insight to move forward. So I’m always looking for new titles to read. Safari books online has an amazing choice of technical books. I was amazed by the sheer number of books I could choose from. I regularly receive emails notifying me of new books added to the collection, so it keeps growing.
I read parts of NHibernate in action, The Zen of CSS design and others.
With that much information at hand, what is more important than having good search capabilities. The search engine doesn’t only return book titles, but also the content inside the books, which is a big help. This is one point where online books shine. Have you ever been looking for a certain passage you know is in one of your books, but you can’t quite find it. Here’s one way to easily find it.
I’m mainly focused on .net technology right now, but I’m always curious about other technical landscapes, like Ruby on Rails. These are not necessarily the books I would buy, but the ones I would like to browse through in a library just out of curiosity. Safari books online is a very good way to do that while you’re relaxing in your living room with a glass of wine. I tried the Head First Rails, and I promptly had the urge to put my hands back on the keyboard to do some RoR.
I really enjoy holding a book. I like flipping through the pages, going forward and backward, taking the occasional note. At first I was curious to see how online reading would compare to holding a real book. I found myself looking for navigation help. I quickly realized the interface is mainly focused on point-and-click interaction. As a geek, I prefer using keyboard shortcuts, and I wasn’t able to find any of these intuitively. After searching in the help section, I found a shortcut that should have worked but didn’t. Forward and backward are supposed to be CTRL-1 and CTRL-2. 1 and 2 however don’t exist on my keyboard because I have a Belgian keyboard (that’s AZERTY). Numbers are available only by holding the SHIFT key.
All in all a solid reference and a good source for new information. Note that for a limited time, Safari Books Online is offering GeekswithBlogs readers a 15 day free trial, plus a 15% discount on a monthly subscription for a full year. Learn more and start your free trial at: http://www.safaribooksonline.com/geeks/mobile/?cid=200904-my-geeks-blog.
Tuesday, May 19, 2009
This is a topic that is near and dear to me. Readability is about being able to understand the code. Maybe the word should be “Understandability”, but that word suffers of the exact same thing it describes ;-)
Anyway, compare these two lines, and tell me what line you understand fastest:
1: startDate = new DateTime(2008, 5, 15);
2: startDate = 15.May(2008);
This might not seem much, but to me line 2 clearly states the intent of the code, whereas line 1 makes me think. I don’t want to think about how the code is implemented, I want the code to explain what it does, even why it does it.
Another one of these causes of confusion is the lambda extension from RhinoMocks x.Stub(x => x.DoStuff())… Every time I introduce mocking to a new team, I have a lot of explaining to do around the ‘Stub’ Extension. I recently introduced a change to the team for this one particular call. Compare these two:
1: userMapper.Stub(m => m.Map(user)).Return(viewUserDto);
2: When(userMapper).IsToldTo(m => m.Map(user)).Return(viewUserDto);
Again, this exercise might seem unnecessary, as experienced developers will instantly understand this. In my experience however, all developers tend to understand this kind of code without much effort.
Just my €0.02
Wednesday, March 25, 2009
I just got myself a brand new MacBook Pro. The whole point is getting out of my comfort zone and start learning to use a new OS.
For those of you who are .net devs on a Mac, could you give me a few tips & pointers to make this experience as painless as possible. What do I use to run windows? Bootcamp, parallels, fusion? Do I need quicksilver? Do I run office on the Mac or in the VM?
Any help would be appreciated.
Sunday, March 22, 2009
Up until now, I installed new releases of the ReSharper 4.5 EAP when I thought about it. Sleepoverrated just posted a tool to automatically check for new release. When a new release has been found, it proposes to install it automatically.
Thanks to JP for the link.
Monday, March 16, 2009
We did the retrospective on our first sprint today. Usually, our retrospectives are divided into three parts:
- what went well
- what went ... less well
- what can we improve
This was usually rendered on the wall like this:
| Good |
To improve |
Action points |
| ... |
... |
... |
| ... |
... |
... |
Today we tried something new. The three columns were now called:
| Keep doing |
Stop doing |
Start doing |
| ... |
... |
... |
| ... |
... |
... |
You might say this is just a question of labels, but to me it felt completely different.