grack.com

Blog

mo:Blog rocks

I accidentally posted my last entry while playing around with mo:Blog. It’s very handy to be able to compose a message offline and post it when you please!

The only missing feature is that I can’t seem to set categories per-post. There is an option to set the category per blog, but that’s a big pain to change every time.

I like Typo (and its XML-RPC backend) more and more every day.

New blog up and running (hopefully)

I think I’ve got my blog converted over to Typo now. It’s going to be a bit of a pain getting my old article archives up and running, but the tough part was just getting the blog ported over.

I’m not going to worry about importing all my old articles into the new blog. I have some mod_rewrite rules set up to ensure that all the articles are redirected from their many old URLs to their new homes.

I have the old news archive available here, but Google is still the best way to find stuff on here.

First (typo) post!

I’m taking the plunge and making Typo my primary blogging engine.

It’s going to take a while to get used to the markup filter method of blogging (vs. the WYSIWYG method I was using before).

Typo gives you three choices for markup:

You also get a live preview of what you are typing (post-markup filter) while you typo. It’s a little unnerving, but helpful when you aren’t familiar with the markup language. It reminds me a bit of hearing an echo of my voice while speaking.

I think I’ll be blogging a lot more with Typo that I was before. It’s more convenient for me to hit a web interface to start a blog post than it was firing up an application that only existed on my home computer.

It’ll take me a little while to redirect all my various pages to this new blog, so bear with me!

C# 3.0 hurts the eyes

I’ve been looking briefly at the latest C# 3.0 specification and all I can say is that reading some of those LINQ examples hurt my eyes.

Seriously, who wants to read code that looks like this? What does it do?

public void Linq19() {
    List customers = GetCustomerList();

    var customerOrders =
        customers.SelectMany(
            (cust, custIndex) =>
            cust.Orders.Select(o => "Customer #" + (custIndex + 1) +
                                    " has an order with OrderID " + o.OrderID) );

    ObjectDumper.Write(customerOrders);
}

I have the same problem with C# 3.0 that I have with Perl. It’s easy to forget what some of the unfamiliar operators do.

I’m disappointed that they aren’t making use of the yield operator and anonymous functions for this stuff instead. I would prefer to read code like this instead (note that this is using a pseudo C# 2.0-syntax):

ICollection result = Collection< String >.Create(
  delegate() 
  {
    foreach (c in customers)
      foreach (o in c.orders)
        yield "Customer #" + c.ID + " has an order with OrderID " + o.OrderID; 
  }
);

A bunch of examples like this are available here.

The State of Wine

I’ve been very much impressed with the state of the Wine project lately.  It’s gotten to the point where I can assume that a program will work under Wine, rather than assuming that it won’t.

One of the major supporting companies, Codeweavers, has done a great job with packaging up Wine and putting a fair bit of polish into it.  It installs flawlessly (just run their custom installer) and then gives every user their own virtual Windows environment.  It also has support for a system-wide environment, but I haven’t played around with that much. 

We should be seeing them release a 5.0 in early October.  I’ve been keeping a VMware image around for playing with Windows apps every once in a while (about once a month right now), but this might just be the end of that.

I think we’re going to see Wine as major player in the next six months to a year.  Since most applications are written to target Windows ‘98-Windows 2000, Wine becomes a very attractive way of getting them to work.  What I’d like to see someone partner with Codeweavers to create a mixture of a standard Linux distribution with Codeweavers’ Crossover product.  This would allow a company to wholesale replace their Windows desktops with Crossover and keep many of the in-house VB and one-off applications that make it so hard to switch platforms.

As a postscript, the wine-patches list is getting something like 20-30 patches a day!  It’s starting to rival the development activity level of the Linux kernel itself.