A couple of weeks ago, Steve was posted a note about a new RSS reader called SharpReader. To those of you that have never heard of RSS or their readers, blogs publish some of their posts in a format called RSS that are then read by applications that grab these specially formatted documents and show them in one window. The benefit is that if you read a lot of Blogs – like Steve does – or if you hate looking at ads from some of the “commercial” blogs – like I to – an RSS reader kills two birds with one stone: you get one window with all of the blog entries that you want to read without the ads tagging along and without having to open multiple pages.
One of the Geek-footnotes to SharpReader is that it was written using C# and the .NET framework. Ordinarily, this would get a “oh, great it’s got a 21MB runtime” comment, but the truth is that I’ve been working with C# for a little while now… I’ve been coding with J2ME for the last year or so, because I’ve been forced to do a lot of work with mobile devices, and they were the most “generic-type” platform to work on. I spent a few weeks with BREW as well, but found that J2ME actually supports the “write once, run anywhere” model – it’s not the complete truth, of course. It’s mostly like “write once, run somewhere, sometimes” but if you have enough patience (and devices to test on) you can get your code to run on most phones; with BREW, you really have to have a separate code base for each different device that you opt to support, which is just painful. So I’ve been playing in J2ME. Before that, I had dabbled in Java’s AWT during school projects, and while I thought some of the stuff was neat, a number of things about the language irked me.
Garbage collection was one of them. Not being able to use “delete” after a “new” sorta pissed me off, but I also got used to it, over time. Other things like Integer.ToString() was weird to me… didn’t look “normal”. Apple’s Objective-C platform, has been the most bizarre platform that I’ve ever seen, and while Java seemed more normal I still wasn’t in love with it 100%. I think I just realized that I was a C/C++ guy. And with C/C++, Win32 programing can be cumbersome, but I’ve been doing that for years, so I’ve long since been conditioned to it. I’ve been all over Win32, WinCE, and a few other things – at my day job I settled on MFC, as a class library, which was selecting a lesser of evils. Why did I use MFC? Steve flips out every time I mention those three letters, but what I needed for my applications at the time was an easy way to deal with ActiveX, the speed and power of C++, and a string class, which is exactly what I got with MFC. I never used the database classes. I have never used the Doc/View architecture. I got my ActiveX wrappers and my string class, and a few other things that were good to have – socket classes, variable object arrays, etc. The biggest downer of using MFC was the runtime.
See, for distribution, I had to worry about end users which meant that I had to figure out what DLL’s from MFC I were using, get the specific version you needed, and then convince an installation script to install them “properly” so that I didn’t hurt any other application on the user’s machine. Also, the MFC DLL’s were notorious not for being backwards compatible, which is also what lead to the ongoing pain of DLL Hell. I became very aware of runtime issues, so when I heard that C# (as well as C++.NET Managed Services, VB.NET and J#.NET) was all going to share the same 21MB runtime with multiple languages, I had an Episode and put my C# books on a shelf. I figured I would get interested in it again, when the runtime was automatically included with Windows.
“Automatically” has arrived, more or less. All of the more recent versions of Windows (Win2K, WinXP) will get the runtime via Windows Update. The framework is also available for Windows Me and I think even Win98 can download it. Windows 2003 Server, which ships in a few days, should have the most recent version of the framework built in into itself. So, I started a C# project: SharpMT.
I could call it SharpWriter, as a tribute to SharpReader, but I’m not writing a “generic blog writer” – I’m actually hoping to fill a gap in my digital lineup. I had a great, great blog writer while I was using my Mac – Kung-Log – but it’s only available for the Mac. I’ve tried a number of other writers for Windows, but I’ve found that either they don’t work at all or, because they are designed to post to many different blog servers, they don’t support all of MovableType’s specific fields and features. Software like CityDesk used to worked well for me, but that’s got little to do with posting on MT, so they’re also not an option. What I need is an offline writer for a MT based server, that works. Since I couldn’t find one I liked or worked, I’ve decided to write my own writer, and I’ve opted to use C# for it.
Consequently, I’m working a little slower (as I learn the language), yet the work is going faster. How is that possible? C# is a great language for programming Windows. They’ve got the benefits that I found in MFC, without any of the extra crap that MFC forced on me. It’s fixed a number of issues that I’ve found while programming for Windows, over the last ten years; everything with C# just makes sense. When I’ve gotten used to the nuances of the language, coding applications should be the easiest that it’s ever been for me.
And when I’m done with my little offline MT blog writer, what do I do with it next? Not a clue, but I’m feeling most partial to the “DonationWare” mode of distribution – use it for free and if you like it that much, I’ll gladly take money to support the app… but first I’ve got a to get a beta out!
By the way, the first beta: Hopefully by the start of May, but I make no promises!