0 Comments

A lot of people have asked me why we don't use third-party assemblies in BlogEngine.NET, so I thought it was about time to explain why. 

One of the most important rules that I laid down before starting on the BlogEngine.NET project, was that no third-party assemblies were allowed. This rule was forged out of the assumption that most of these assemblies did a whole lot when only a little bit was needed for BlogEngine.NET, and that little bit was easy to write our selves.

It’s obvious that it would take longer to write the code instead of just referencing the assemblies, but it was worth the extra effort. BlogEngine.NET is build for .NET developers so my initial thought was that they wanted to be able to change every little thing they wanted to suit their needs. Third-party, precompiled assemblies doesn’t allow for easy customization so that would counter the .NET developers needs. That has a big part in why BlogEngine.NET is so open and simple to customize

If you look at most other .NET blog and CMS platforms in existence today, you’ll see that they make heavy use of various third-party assemblies. All of the assemblies and libraries are open source or at least free of charge and they are all very powerful and easy to use. However, the decision has been made so we had to come up with alternatives to the libraries and that proved surprisingly effortless for our simple needs.

What we didn’t use

Web control libraries
There are many web control libraries that offer date-time pickers, special grids etc. that we could have used, but let’s face it. A date-time picker is just a JavaScript representation of the already existing ASP.NET Calendar control with some AJAX functionality. Other controls can be much harder to write yourself but we didn’t need them.

XML-RPC.NET
It’s a very cool library for handling trackbacks and pingbacks and pinging Technorati, Feedburner etc. when new posts are created. It does much more than that, but these features were the ones we needed. XML-RPC is standard XML that can be parsed and XPath’ed so why did we need a third-party library for handling XML?

Rich text editor
I’m a big fan of both FreeTextBox and FCKeditor which I’ve used in many projects over the years. They each have their advantages and can be extended and modified fairly easy. So can tinyMCE and it is purely JavaScript, so that’s what we decided to use. There were other reasons as well, such as almost perfect XHTML generation and other minor factors. Well, and of course the fact that it’s JavaScript so we can change whatever we want.

HTTP compression
There are quite a few compression libraries that can gzip or deflate the HTTP response stream. Instead we used the build in compression classes in the CLR and wrote a single HttpModule to do the job.

CAPTCHA controls
There exists hundreds of CAPTCHA control libraries for ASP.NET both visible and invisible ones. However, a CAPTCHA is one of the simplest things to write – it takes only 20 lines of code to create a rock solid invisible one – so that’s what we did.

As you can see, we did a lot of reinventing for BlogEngine.NET, but it actually wasn’t that big a deal.

In the enterprise

For enterprise projects where third-party dependencies can be costly, it would be beneficial to be sure what the needs are and if they can be built instead of bought. You should also weigh the value of owning the code instead of using third-parties. It various from project to project and from library to library, but one thing remain the same: third-party dependencies is not as flexible as building your own implementations.

The hobby project

Most hobby projects start when you get an idea and want to realize it real quick. Then you don’t want to do much reinventing because that would just slow you down and your code is probably not essential either. In those cases I would use as many third-party libraries as possible to get the code running and my project realized.

Think twice

There are many factors to consider before using third-party libraries and some demands real thought. You have to be real careful about using third-party libraries for essential components, because then you loose control of the most important parts of your application. For BlogEngine.NET we also had to consider our target group - the developers.

If you base your business/application on a component provided by third-party, you might want to think twice.

0 Comments

The planning phase of most projects no matter the size result in some kind of documentation or manuals for coding. It could be a rough sketch of the data flow, a UML diagram, feature specifications etc. Some big enterprise projects probably also have a detailed explanation of the individual classes, so that the developers knows exactly what the class has to do and why.

Then again, most projects do not undergo such an elaborate planning phase for various reasons. It might be a one-man hobby application or a simple little website. We all do them from time to time so here is a little trick for adding a planning phase while coding.

Create a new class

Because you haven’t done any real planning, you go ahead and creates a new class with a vague idea about what it has to do and why it has to do it. Instead of just adding properties and methods right away, you can force yourself to think about it and thereby do a little planning. That will help you to keep the class more focused and refactored as you write it and you might find that you need another class instead of just the one.

Comment it

With only the class declaration written in your editor, try to comment the class as thorough as possible. At least answer the three questions what, why and how. This will force you to think about the responsibilities, interface, cohesion and a lot of other things that probably saves you a lot of coding time and effort in the end.

The best thing about this approach is that you get right into the code without doing pre-planning, which most of the smaller hobby projects don’t have. You get the benefits of the planning with the pleasure of just diving into the code right away. It can never remove the need for proper planning for more important projects, but it will get your home project running smoother and better architected with little to no effort.

0 Comments

Coming from the Visual Basic world, I used to find many examples throughout the web written in VB and VB.NET. Then I got hired by Traceworks which was a VB.NET company, but they decided to move to C# because they couldn’t find employees that wanted to code VB.NET. So, I made the switch and haven’t looked back since. I haven’t written one line of VB.NET code for 2½ years.

In the beginning when I searched Google for some CLR specific stuff, it was very often that the code examples were in VB.NET. I had no problem translating them to C# so I didn’t care. As the time passed, more and more I saw that C# code was taking over the VB.NET examples throughout the web. Today, they do almost not exist unless you deliberately go to specific VB.NET sites like VB.NET Heaven.

Also, when you look at the job sections they are all about C#. It seems that VB has been replaced in the enterprises since companies are only looking for C# developers. There could be some differences from country to country – I haven’t checked them all…

If we are to believe that VB.NET is leaving the enterprises, where does it exist then? I keep seeing Channel 9 shows about the next releases of VB.NET and read some Microsoft blogs about it, but there really is no big hype in the blogosphere. No one writes about it on the web except for the Microsoft folk.

Do you know what became of VB.NET?

0 Comments

I was just reading Daniel’s blog (in Danish) and saw that he had been taking a what-type-of-developer-are-you test. So I took the test and this is the result. It turns out that I’m a PHTC type.

PHTC

You're a Planner.
You may be slow, but you'll usually find the best solution. If something's worth doing, it's worth doing right.

You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.

You work best in a Team.
A good group is better than the sum of it's parts. The only thing better than a genius programmer is a cohesive group of genius programmers.

You are a Conservative programmer.
The less code you write, the less chance there is of it containing a bug. You write short and to the point code that gets the job done efficiently.

Take the test here.

I really don't like that the C stands for conservative. Pragmatic would be a better fit.

Perspective

I’m not sure how scientific the test is, but it raises a good question about the people you hire to work for or with you. Often you go through some kind of personality test at the first job interview, but they don’t cover how you code. To have a dynamic team you need to have different kinds of developers. You need the thinkers, the coders, the architects, the managers etc.

This is the first test I’ve seen that tries to label the different types of developers. It would be great to see a real scientific one that covers it all. That would make a huge difference in the people you would hire in order to create the ultimate dynamic team.

0 Comments

Tonight is the first night without my TV. Yep, it’s gone. I gave my Philips 32” widescreen away for free yesterday and tonight reality kicks in. I start to wonder if it is possible to live without a TV while sitting here on my couch writing this. It’s sooooo quite.

Information overload

Everyday I read 10 RSS feeds, read 2 online newspapers, follow tech stuff on 5 websites and watch the news on TV in the morning and at night. That covers the basic information, but then there are all the work related websites I find on Google each and every day. They vary from 3 to 50 depending on what problem I’m trying to solve.

E-mail from various people – work related, BlogEngine.NET related or from friends and family. Then add the text messages and phone calls combined with Skype and instant messaging.

I’m getting stress just thinking about all that information I need to process every day.

Out with the TV

The TV was the least important information channel, so I just thought it was the easiest to get rid of. I can’t get rid of my phone, e-mail or instant messaging because I use those at work. The RSS takes no time and I need to follow the tech stuff to keep up with the business.

After taking the decision I borrowed and bought some books just to make sure I wouldn’t get too bored.

New toys

We geeks need our gadgets and without the TV, something needs to take its place. Otherwise I’m down a gadget and that’s just wrong. I’ve set my mind on a Windows Home Server for my home network, but I’m not sure it has been released yet. It probably will very soon. Also, I would need a digital wi-fi radio to play my MP3’s. That should be enough to keep my gadget-meter point the right direction – up, up, up!

It’s still strangely quite here on the couch or should I say nice and peaceful…