Tuesday, August 29, 2006

FeedJournal Voting - Last Chance

Last chance to vote for FeedJournal in Made In Express Contest! Anyone is free to vote and the booths will close on September 1st!

Thank you for your support.

Saturday, August 26, 2006

Competitive Programming

I am a competitive guy. People who know me well, know that I always go to the bottom of things; have a passing interest in anything will never happen to me. It's either all or nothing. For years, I have been looking for ways to funnel my energies into some kind of online community. Requirements are that it should be engaging, competitive and educational. I have been taking quite a few stabs at different online gaming communities but they haven't turned out to be what I am looking for.

I am happy to say that finally, I think I have found the niche I have been hunting. TopCoder.com. TopCoder is an online community for people who love programming. Or rather, it was; today it has grown to cater for architects, testers and graphics artists as well. The basic concept is that you participate in contests where you need to solve three algorithm problems in a language of your choice (mine is .NET C#). The faster you solve it the more points you score. Given that the system tests pass your implementation, that is. Or that no competitor will challenge your implementation with a unit test. That's the weekly competition TopCoder is running, and which is divided into two divisions according to your rating. Sometimes one of the sponsors throw in money in the prize pot to make it more interesting. On top of this there are weekly design and implementation challenges where the best submissions will be awarded enough cash to make it worth having a look at.

There is just one thing missing from TopCoder, and that is that they should allow remote pair programming competitions or us agile geeks. Just read the story of this guy who tried it.

Thursday, August 17, 2006

FeedJournal Database Decisions

Chris Pirillo has something to say about the Made In Express Contest. Considering he is one of the judges in the contest, I am definitely listening. This is his verdict about my own entry, FeedJournal:


Still has a long way to go, but I'd say that sample output is quite nifty. The only thing that keeps me from installing and recommending the app wholeheartedly is the need to install SQL Server 2005 Express Edition first - which I'm not going to do on my desktop. Suggestion: push forward with this one, but rely on something else for feed information storage (sorry, but installing SQL is overkill for users like myself).




Considering his overall harsh judgment of the projects I consider this pretty favorable, and indeed he goes on to mention FeedJournal as one of his four favorite entries. However, let's consider his criticism for a moment. The SQL Server 2005 Express Edition is a required component in the contest as long as you want to have a database. FeedJournal definitely needs one. Here is a section from the contest rules:


Submitted Projects must compile successfully in Visual Studio 2005 Express Editions (any edition), and use SQL Server 2005 (any edition) for any database storage or data access code.


Of course Mr Pirillo is spot on in his criticism, and the database issue does not come as any surprise to me. The fact is that the required runtime for SQL Server Express Edition is 55MB, 10 times larger than the setup files for the actual FeedJournal application! I already touched upon this in a previous blog entry where I considered using SQL Server Everywhere Edition.

The good news is that there is already a solution to the problem! FeedJournal is using a database wrapper class, making it trivial to switch database engines. Since the start of the development I have been secretly working on a separate configuration using the open-source System.Data.SQLite database. Compared with SQL Server's 55MB runtime, SQLite weighs in at a mere 400kb using a single DLL file. w00t!! Sure, SQLite offers less design time support from inside Visual Studio, but it is a small price to pay in comparison.

FeedJournal versions using SQLite are fully functional and has been running in my personal test environment all the time. These will be released for beta testing in a few weeks time, most likely after the contest ends in order to abide by the rules.

Wednesday, August 16, 2006

FeedJournal v1.0 and Contest Voting

In Made In Express Contest it is now up to the public to vote for the project they like best. FeedJournal is one out of the 11 projects you can vote for. Please make a visit and choose your favorite!

This also implies that you can finally download FeedJournal v1.0 from the the Made In Express link above. Despite the name it is a beta test version, while I am continuing to work on v2.0. Visit feedjournal.com for more information.

Monday, August 7, 2006

I'm Excited, and Writely So

When writing drafts for this blog, I have been struggling with how to type up the articles. Sometimes I am working on different computers and I need an easy way of moving the documents between locations. So far I have been using a USB drive where I store the documents. This has the drawback of needing the same application installed on all computers. Another option is setting up an automatic synchronization between shared computers but it doesn't work for me because some of them are blocked behind a firewall.

Enter the new paradigm of online word processors! The idea is that your documents are edited using your web browser and the files are hosted on the service's website. You can choose to share or protect each document, and despite being a new phenomenon there are already a few interesting players on the market. All of these online services automatically integrate many additional features useful for bloggers. They offer spell-checking, document sharing for review, real-time collaboration, history of changes, and direct publishing to your blog. And they are all free of charge to use! The best ones are overviewed at About.com.

My personal favorite is Writely, which really stands out from the competition. The interface is slick and simple to use. There are all the features that you expect and more. It includes comments, handy keyboard shortcuts for accessing common functions, and importing of common file formats. Technology like this really excites me! Writely was acquired a few months ago by Google, and has temporarily disabled users registration, but there is a backdoor.

Sunday, August 6, 2006

Contest Deadline for FeedJournal

The time has come to let go of FeedJournal v1.0. I have been working on it for months and thinking about it for even longer. Without the definite contest deadline hanging over me, I think it would have been difficult for me to resist adding more features before publicizing it. But, in the end it's for the better. FeedJournal needs to get out there and get some real-world testing before it can mature into higher versions with a larger feature set.

I definitely don't see this contest submission as the end of the line for FeedJournal, more like a baby's first steps. I choose to look at this version as a public beta test. Although v1.0 has been thoroughly tested I have decided to let it expire on October 1st, forcing users to upgrade to a higher version. Much like a beta or release candidate would work.

The time has also come for me to sum up the experience of having competed in Made In Express Contest.

Sometimes I have felt isolated, that I don't have any cubicle neighbors or managers to discuss design choices or feature priorities with. Then I realize that there are huge numbers of other single developers out there doing the same thing, 12 of us happen to be in this contest. And if we want to break our isolation we can, help is always just a forum post, instant message or email away. And I choose to see it as a challenge, that we have responsibility for all the implementation choices, design decisions and even marketing options. A challenge which is there to empower us as providers of a service or application.

Sometimes I have been feeling that time was not enough. Who are these people at Microsoft letting us run like crazy implementing these projects in just a couple of months? Do they get a kick out of seeing us burning the midnight oil? Well, even though I am sure it has been a hectic summer for the whole dozen of us finalists, seeing it coming to an end now I just want to keep on running. To keep pushing out more features and squashing bugs. The contest deadline has forced me to set up an infrastructure for publishing an installation program, finishing the help text and generally smoothing the rough edges. All of this means that I can take v1.0 and start pushing out upgrades if there is an interest out there. And from what I have seen in the blogosphere, there is.

No matter how tough it has been for the last months, one thing is for sure: it has been a blast! Good luck to all of us in the contest! Both regarding the judges' verdict and the future life of our projects.

The deadline for the contest is tonight (6th) at midnight, and the submissions should become available on Microsoft's contest site shortly thereafter. I will post a link on this blog as soon as I have more information.

Friday, August 4, 2006

HOWTO: Auto-Increment the Version in Visual C# Express

One of the features that I miss the most when I am working in Visual C# 2005 Express Edition is the possibility to auto-increment the version number for each build. Below, I will explain how to get around the limitation and add this functionality to the stripped down Express Edition of Microsoft's Visual Studio development environment.

The solution comes from CodeProject user PIEBALDconsult's Versioner project. His C# class increases the revision number of the AssemblyVersion, given the path to the file where it resides (typically AssemblyInfo.cs). Since PIEBALDconsult only provides the source code I took the liberty of compiling it into a .NET 2.0 executable, which can be downloaded from here (ZIP). The steps necessary for enabling auto-increment are listed below:

  1. Download and extract Versioner.exe from the ZIP archive to the project directory where you want to enable the auto-increment feature.
  2. Right click on the project in Visual C# 2005 Express Edition and choose Properties.
  3. Click Build Events.
  4. In the text box where it says Pre-build event command line enter:
$(ProjectDir)Versioner.exe $(ProjectDir)Properties\AssemblyInfo.cs        

Now, each time you compile the project, the AssemblyVersion's revision will increase by one.

SQL Server Everywhere Edition Requirements

The Community Technology Preview (CTP) of Microsoft SQL Server 2005 Everywhere Edition requires Windows XP SP2 or Windows Vista. If Windows 2000 is unsupported I will have to look at other solutions instead for the future. I tried to convert my database from Express's MDF format into Everywhere's SDF format, but ran into problems. With the short time remaining to the version 1.0 deadline (contest submission) the database optimization is something that will have to wait. Now is not the time to introduce more risk in the project.

I also decided to go with the ClickOnce system of deploying the application, which is helping out. It comes especially in handy with the installation of the runtime environments for .NET 2.0 and SQL Server Express. ClickOnce automatically figures out if the user needs to get these installed without me having to write a single line of code/script, which is really neat.

Thursday, August 3, 2006

Help Format Confusion

As I previously blogged about I was using Shalom Help Maker to generate my help file. After spending some time with this and finally completing the user documentation, I was ready to insert it into FeedJournal. The it suddenly hit me: this is not the right help format! The Danish Shalom Help Maker is generating help files in the old Windows .HLP format, which has been obsolete for some years now. What I need is CHM format, which I had up till now deluded myself into believing I was working with. Ouch!

OK, there must be some way of converting my HLP file into CHM, right? Nope, at least nothing free, and all of the programs I tried generated an error during the conversion. Finally, after much hunting I found a link to a freeware application on the excellent forums at Joel on Software. The program was called HelpMaker, and sure enough its conversion feature also choked on my HLP file, but I was able to copy/paste the content to generate a CHM file. HelpMaker also offer to possibility to compile to many different formats: CHM, HLP, MSDN format, RTF, and HTML. All in all, the process using HelpMaker was much easier than that of HTML Help Workshop, the free and official vanilla solution.

I took the opportunity to compile an output for the web at the same time as I compiled the CHM file. The web based help files are available here.

Now, if I only had realized my mistake earlier, I would have saved many hours that I now spent working on the wrong format. Doh!

Finishing Touches

Two days left for FeedJournal's contest submission and I am trying to prioritize which items have higher priority than others to complete. Right now I am working on the text of the CHM help file and I hope to finish it soon. After that (if there will be enough time) I want to see if I can easily switch to SQL Server Everywhere Edition, which should boost performance on low-end PCs quite a bit.

Before submission I also want to make sure that the install scripts are completed. I haven't decided between ClickOnce and InnoSetup yet. I have previous positive experiences with InnoSetup, but Microsoft's ClickOnce also seems nice in that it can support transparent upgrades and it integrates the .NET 2.0 framework installation automatically.

I will also need to write an build instructions document, which should be straightforward in my case. One item which is not obvious to me is if I should deliver the third-party open-source libraries I use in source code format or as precompiled assemblies. I fired away an email to the contest coordinator, to get an answer to that one.

Wednesday, August 2, 2006

The Demise of nDoc

Some of my fellow finalists have blogged about their intended usage of nDoc as a documentation tool for their source code. nDoc is hugely popular for automatic documentation of .NET code, using Visual Studio's support for XML comments in the source code. A week ago, nDoc went into a coma, when its single maintainer, Kevin Downs, announced his resignation from the open-source project. The problem, which in many cases are symptomatic of open-source projects, is that a majority of these projects are driven by one or a few enthusiast individuals, and their lifespan is directly related to how long it lasts until these individuals lose interest. It is rare to see a dying project being rescued by another developer, who keeps it running. Problems selling the software is the usual reason for the death of a commercial application. This sort of death is less painful for the software market, since the user base is potentially much smaller.

The love-hate relationship between open-source developers and small software vendors is about if software should be free or not. Developers of commercial software feel that the open-source community is undervaluing their work. Often they are frightened to see their carefully designed and evolved application being blatantly copied by an open-source initiative. This is not stopping the same developers from using open-source software though, no matter if it is a freely licensed library for their commercial software or an open source office suite or web browser.

Kevin Downs resignation is sad for the wide user-base of nDoc, but there is a light in the end of the tunnel. Microsoft recently launched a technology preview of Sandcastle, a project with a lot of similarities to nDoc. Sandcastle is bound to be more responsive to technology changes than nDoc was, where users have been waiting a long time for .NET 2.0 support. Here we see an example of an open-source product being replaced by a project that is being developed by a regular company. In recent time, we have been seeing a lot of stories that are the other way around. Kevin mentions in his "resignation letter" that if donations had been bigger he would have had an incentive to continue with the project. That leads me to ask why he not changes the license of nDoc and starts to charge for it?

Tuesday, August 1, 2006

Promoting FeedJournal

Small software businesses, or ยต-ISVs, are cropping up everywhere nowadays. A big challenge for them is to get a foothold in the industry and claim a piece of the market. Then they need to keep that attention.

In Bob Walsh's excellent " Micro-ISV: From Vision to Reality", I learned that a blog can be an excellent vehicle for spreading the word about your product. It can also help to make sure you are keeping your customer's attention focused, by having them subscribe to your blog's RSS feed. The Blogosphere is a fast-moving media where the attention span sometimes lasts shorter than it takes to read a headline. The cross-pollination in the blogosphere is an interesting phenomenon which I hope to be able to leverage some more in the future.

For now, I decided to add a new section to FeedJournal's web site. The new section is called "In Blogs", with the obvious allusion to "In the Press", and will contain interesting mentions about my application from the blogosphere. I know, FeedJournal is not even out for beta testing yet, but it is never too early to start marketing, right? And besides, I can't resist the kick I get out of seeing my name mentioned in other people's blogs!

As a side note, after months of owning the domain feedjournal.com, I finally figured out how to configure the DNS so that I can use my hosting service with the domain. Until now I was using GoDaddy's forwarding functionality together with a masking technique. Now the hosting is set up like it should.