Random Thoughts

Tech, words and musings from an Englishman in Seattle

LWB Is Now Open Source

I recently talked about how I implemented “LWB”, the software that powers this blog, using Go. Now, I'm happy to announce that I've now released it as open source - well, technically I released it a few weeks ago…

The code is all hosted on GitHub, along with a sample blog that looks very much like this one :-)

Enjoy and contribute!

LWB on GitHub.

Flow

Over on his blog, Tim Bray describes his move to a more press-like hyphenation and justification model for the layout of his blog. I like it.

You should read his blog post for the full details, but overall, I agree. Ragged Right looks fairly icky — though you've probably never noticed it and there's certainly a lot of disagreement out there on the interwebs. However, after implementing exactly the same solution as Tim for fully hyphenated and justified text, I think my blog looks just that little bit prettier.

I hope you agree.

Reinventing the Wheel

A few weeks ago I noted that I really wanted to rewrite the blogging platform that I use for “Random Thoughts” from scratch. A number of reasons prompted this:

  • It's way too slow. Page load times are awful.
  • It's way too complicated. MovableType is written in a mixture of perl and php and as a platform it has become way too bloated for my own personal use. I have little clue how it works and little desire to learn.
  • The future of the platform appears uncertain.
  • Upgrades can be painful.
  • It needs a full instance of MySQL behind it, with all the associated management headaches that come along with it.

But mostly I wanted to just write my own.

What language?

The first order of business was which language to use. I wanted to learn something new.

I first contemplated using Scala, and had actually gone down that route for a while. Unfortunately my brain exploded after a couple of nights coding.

Scala is pretty and all, but damn does it have a steep learning curve, even for someone moderately familiar with functional languages and very familiar with Java. I was spending way too long digging around in library code and documentation and still couldn't figure out how a simple generator pattern worked. Seriously, what breakOut is doing here?

scala> val s = Set(1, 2, 3)            
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val m: Map[Int, Int] = s.map(k => (k, k * 10))(breakOut)

Anyhow, I gave up. To much reading, not enough coding.

Next up: Go.

I've been wanting to get my teeth into Go for a while and this seemed like the perfect project. After an initial ramp up reading the superb documentation and dicking around with a few toy samples I was off to the races. Code was figuratively dripping from my fingers.

Database?

One big choice was still to be made, though: What database system should I use to store the blog entries in?

On the face of it, there seems an obvious answer: Just use MySQL. The bindings exist and I know how to use it.

But then I stood back and thought about it.

  • There's only just over one thousand posts and it's not likely to increase by a factor of ten any time soon.
  • The indexes needed are well know ahead of time: by date, by tag and by category.

So why not just store them all as flat files? And that's what I did. Each post is a separate file that contains a single JSON object representing the post. I load them all up at startup and pre-build all the indexes. Nice and fast and works like a charm - no dependencies needed.

The only slightly tricky thing I needed to write was a python script that converts the MovableType export file to the JSON files.

Web framework?

When it comes to actually serving the pages, Go's built in http library was almost perfect, but I ended up using a framework developed by a friend of mine: Gary Burd's Twister. The library provides lots of fun stuff for URL handlers, pattern matching, default handlers including redirects, etc… Highly recommended.

Textile

I use Textile as the markup language for all my blog posts, so I needed a Go template formatter for it. Unfortunately none currently exist that I can find, so of course I had to write my own and this ended up taking more time than any other piece of this project, and it only supports the small subset of Textile that I actually use. I sincerely hope that someone else writes a full implementation of the textile parser for Go so that I can throw my own away…

Caching

A key goal of this whole project was to reduce the latency of my blog down to as close to nothing as possible. Unfortunately the textile parser and page rendering take time, especially for some of the larger archive pages. So I needed to cache, but what to use?

An obvious choice here is Memcached, but there's only one instance of the server and it adds another moving piece. So what the hell, I might as well just cache the contents of each page render and the conversion of each post from textile to html (as each post appears on multiple archive pages as well as it's own page). A quick back of the envelope calculation yields a few tens of megabytes needed. No biggy.

Design

As I was rewriting the blogging platform, I might as well do a complete revamp of the layout of the blog. So the design is a complete rewrite using HTML5, using all the key buzzwords including web fonts. Take a look at the colophon for more details.

Was it worth it?

Absolutely. The text you're currently reading came from the platform in one form or another, so it seems to be working.

The only real missing piece is on the authoring side. Right now I just run a python script to create each new entry and emacs to edit the content. Not big deal for me, but it would be nice to provide API access so that tools such as MarsEdit (my favourite blog content creation tool) can be used with it.

And of course it needs a name. Software, I christen thee “Light Weight Blogging”.

MarsEdit Now Supports Tags

I'd stopped using MarsEdit to create my blog posts and dropped back to using the online web form as it didn't support the new tags property in MoveableType.

Now it does!

Sweet. I wonder if this works…

My Second 20% Project Is Now Live

My latest 20% project at Google shipped today and as a result the blogroll on this site is now powered by Google Reader! That's right folks, get them while they're hot! Easy blogroll creation for everyone. Well, assuming you use Reader as your RSS aggregator…

Check out the post over on the Official Google Reader blog for all the juicy details:

As a blogger I like to include a blogroll on my site so that friends, family and other readers can take a look at what I like to read. It's also a nice way to give a shout out to the authors of the blogs that I like. However, maintaining a blogroll can be a bit of a pain as your subscriptions ebb and flow.

20% time is such a wonderful thing. As well as being able to actually implement my own wishlist in another Google product, I get to play around with technologies that I might not use day-to-day. As a backend engineer, mucking around in frontend code can be refreshing…

And welcome to all you readers that came here from said blog. Kick back and stay a while.

Page Rank Sniffle

The page rank of this blog has dropped from 6/10 to 5/10. Sniff.

Upgrade Complete

The upgrade to MovableType 4.0 is kinda complete. There are still a few kinks to be worked out (e.g. ellipses aren't being converted to the correct html entities for some reason), but on the whole everything is looking good.

I also switched on dynamic publishing for pretty much everything excluding the index templates that generate listings of all the posts I've made (i.e. the full archives and the OPML index). It seems to be working fine this time (unlike with MT 3.0). We'll see.

I've also switched comments back on, but you'll need to log in right now. Sorry about that, but the spammers were killing me.

You can either create an account on this blog when you try to login on the comment page, or you can sign in using OpenId! The new OpenId support is pretty cool.

When I get round to it, I'll install all the stuff that's needed to get CAPTCHA running so y'all can avoid having to log in.

Anyhow. Phew. Finally back to actually blogging rather than hacking on blogging software… Damn, there's those damn ellipses again… And again…

Movable Type Question… Help!

Can I run an upgrade and just have it nuke my current templates?

For some reason, no matter how hard I try to copy the templates over from a vanilla setup, none of the archive links work. They end up being exported empty. Yes, I've setup the archive mappings.

Right now, I just want my content with vanilla templates. I'll take it from there… So far, this is taking waaaay too long.

Any ideas? Email me at steve@steve-lacey.com, as comments are off until I can get this upgrade completed.

Update: Solved! It's actually a bug in Movable Type. I found a post regarding a similar problem over here on the SixApart forums and it turns out that the solution described there fixed it. Somehow, my entry listing templates were not marked in the database as the templates to use for categories. A simple flip of a bit by groveling around inside the database and the problem is solved.

Now I just need to actually finish up the template rewrites and I'll be golden. Don't hold your breath…

Upgrading To Movable Type 4.0

I'm in the process of upgrading this blog to Movable Type 4.0. The actual upgrade went very smoothly, but I decided to take the opportunity to upgrade all the templates to the new formats.

Kudos to SixApart that the my old templates worked 100%, but there's a bunch of new functionality I wanted to take advantage of - including dynamic publishing.

Anyhow, as I cloned my blog's database I figured that any posts I make will be lost when I make the switch. Today I realized that as I compose offline using MarsEdit, I can just republish the posts after the switch and all should be well.

In theory.

Seattle Blogger Meetup Hosted By KOMO4

Photos from the event are over on Flickr.

A few weeks ago I received an invite to a Seattle blogger meetup from Chris Pirillo. I normally don't head over to Seattle for these things as the 45 minutes stuck in traffic on the bridge is more than I can generally handle.

However, this time the meetup was being hosted by KOMO4, the local ABC affiliate - we'd get to take a look at the studios!

This invite was, of course, too much for this humble blogger to pass up, so at 5.30pm on Thursday, I headed into the mess that is I-520 and onwards to Fisher Plaza in Seattle. Btw, did you know that Fisher Plaza houses one of the best data centers in the area?

Fisher Plaza

After the requisite 45 minutes of hell, I arrived and almost immediately bumped into Chris, who was walking into the building as I was taking photos. I say walking, but he was also streaming live video at the same time…

Anyhow, the event was pretty cool. The control room was pretty impressive and the news studio was smaller than I had imagined.

I spoke to a few of the hundred or so people there and the most interesting insight that I came away with was that there are way more non-tech bloggers out there than tech bloggers. The only tech blogger I spoke with was Mr Pirillo…

A good event, with good food.

I'm looking forward to the next one.

…the producers spent all of their money on avgas and Jet-A and none on writing…

For my money, one of the best writers (ok, bloggers…) on the internets right now is my former colleague at Microsoft, Hal Bryan.

His posts are the highlight of my day. Well, week. Ok, month.

Take this snippet from 583.entry“>his most recent post for example.

Have I no shame?

Actually, I do, but I'm about to squander the last of it away like Jack giving away his cow, without even some magic beans, much less their subsequent beanstalk, to show for it.

I collect DVD's, and have a weakness for certain types of movies and television shows. Sometimes, my standards can actually be fairly high, tending toward well-written dramas, comedies-of-manners - ”Careful there, Vicar“, ”Very droll, Bernard", that sort of thing.

This isn't one of them. Not even close.

No, in this case, I'm admitting to enjoying something terrible. Why? Well, because it has a rather surprising amount of good flying in it. Before Michael Bay gave us Pearl Harbor, before Tony Bill gave us Flyboys, flying scenes in movies and television shows were usually real, and, thus, good. If scenes weren't shot for that particular title, then you might see stock footage. If it was faked, it was usually faked so horribly with models that it was worth watching anyway.

Hal, you need to write more.

Unsubscribing From Partial Feeds

These days I never manage to get all the feeds that I subscribe to read in a single day - I use an aggregator/feed reader for a reason: clicking through to the actual site takes time which I don't have.

Therefore I'm unsubscribing from all blogs that don't offer a full RSS feed - I want to read your posts in my feed reader - not be informed that there's new stuff to read.

This is painful, as it includes a few friends (Kev, that includes you!)

Ho hum.

Tags: .

Comments Are Now Moderated

After almost 2000 comments getting through the junk filters (what's up with Askimet) over the past 24 hours and almost two a minute coming in, comments are now completely moderated…

Sigh.

Tags: .

BloggerView: Everyone Has A Story

Who'd a thought it? Me. Interviewed!

A new blog called BloggerView has just started up by my new mate Pete from down-under, him of the incredibly amusing blog Chocolate Makes It Better.

Anyhow, my interview is the first! 001! Does that make me a secret agent?

BV: It seems like you have spent a large proportion of your life developing software or games and even some other interesting projects that we will get into a little later. Can you tell us a little about the type of kid you were and where the drive for this area of your particular passion came from?

I was the typical geek kid at school - generally ignored by all; especially by members of the fairer sex. I couldn't kick a football for toffee, so I generally just did well at the academic stuff. My parents were pretty encouraging and I guess I got into it all through a friend whose dad bought him all the computer toys. We're talking KIM-1, PET, Apple IIe, etc… Then my dad bought me a ZX81 and a Spectrum and I was hooked. I learnt Z80 assembly 'cos BASIC was boring, and then helped out a computer science teacher of mine with a book of computer games he was writing. This was at the time when you could buy magazines and books with printed listings of games in them that you'd type in.

BloggerView - Highly recommended.

Apparently I'm An Old Fart

Facebook's Mark Zuckerberg implies that I'm an old fart with no potential and that I wouldn't get hired there due to my age and, as of three days ago, my impending fourties…

Handily Matt Mullenweg, himself a mere whippernapper, is on the ball with his consistently thoughtful (and of course, beyond his years) analysis

I'm inclined to agree more with Mitch. Biasing your decisions based on something completely out of someone's control, specifically the year they were born, seems as likely to have correlation to talent and success in a company as gender, race, or anything else that everyone knows doesn't matter. It's not what you're born with, it's what you make of it.

Rock on, Matt. Now where's my zimmer frame?

Man, I Suck

I can't think of anything interesting to say. Call it writer's block, call it brain stuck in writing C++ instead of english.

Well actually, I wish I'd been at GDC, it looks like Kim had fun.

So, in payment for my awful writing habits recently (and just for Karen), here's a picture of my daughter taken during my Mum's recent visit…

Jasmine

Late To The Party - Web 2.0 Video

I know I'm extremely late to the party with this video as everyone and his uncle twice removed has already blogged about it, but some of my dear readers don't follow ye olde blogosphere as avidly as you and yours truly.

So this is for them.

This truly is a wonderful piece of video and above all a great introduction to whatever this thing called “Web 2.0” might be all about.

Five Things…

The Five Things meme has finally reached me - it must be really hitting the long tail of it's lifetime now!

So, you get to thank to Justin Uberti for tagging me as I unleash some trivia about my life…

Anyhow, the rules are that I tell you five things about me that you might not know and then tag five others to do the same.

With that out of the way, here we go…

  • My first coding experience was on a friend's KIM-1. Then a ZX-81 followed by a Spectrum, followed by etc…
  • At Sixth Form (High School to you Americans) I was instrumental in putting on a production of “HitchHikers Guide To The Galaxy”. I co-wrote the script in whilst supposidly in physics class with a friend of mine and then let him direct the adaptation while I did sound. We sold out all three nights and made a bunch of money for the school - we had people coming to see it from all over the country.
  • I wrote computer games at school and sold them. I wrote books of games with “code listings”. I was published in Crash.
  • In the early 90's I wrote an application for the official scorer's at TCCB cricket matches that replaced the traditional, centuries old, scorebooks. It was a TCL/TK app running on X-windows on BSDI Unix on 386 laptops that connected back to base so we could provide live updates to Teletext. That was over a SLIP connection. There was no PS2 mouse driver at the time so I wrote it. Think about it - 70 year old cricket geezers using X-windows on Unix in the early 90's. They loved it. Oh, and I also got to sit in the scorer's box at Lords during the 1993 Ashes series…
  • I love sailing. Especially sailing in far off distant lands. Unfortunately I've not got to do that much recently…

And with that I get to tag five other people. Lets go with:

Google Reader

So I'm a devout user of NetNewsWire as my RSS aggregator of choice on the Mac. It's pretty damn near perfect but, of course, it's tied to your local machine. The subscription/read/unread sync to Newsgator is cool, but that's only really helped me when moving to a new machine.

Anyhow, I've been hearing good things about Google Reader, the online news aggregator from my new employer, so I thought I'd try it out and man does it rock.

Try it out. You owe it to yourself. It succeeds on every level. The River of News view is best of breed in MNSHO.

And best of all, it's free.

Displaying A Large Image In A Blog Post

Whenever I place an image in a blog post there are two options:

  1. If it's a photo I just embed the small version and link to Flickr.
  2. If it's a screen grab or something, I upload it to my server and embed the image directly. I like to keep my Flickr photostream clean and only host photos over there.

The problem with the second option is that I have to make the image small enough that it doesn't blow width limits due to the design of the blog page itself and cause it to run out of the center box. This means that the image can be too small to be really useful.

Now, try clicking on the following image.

DC3

Cool, huh?

Of course, if you're reading this in an aggregator you'll have to go to the webpage to see what I'm talking about.

Now I can feel happy about embedding a small image, as the user can click through to the full image with cool presentation goodness.

You can read about the technique and download the code over at Huddle Together.

[Tip'O'Hat to Kelly Smith for the link.]

CAPTCHA - A “Hot” Web Service?

Due to the deluge of spam comments and trackbacks that I regularly receive at this blog, I'm always on the lookout to find ways to reduce it. Most recently with Automattic's Askimet service. Askimet has been pretty successful for me, but that doesn't stop me from thinking about adding some level of CAPTCHA functionality to the blog.

A lot of services now use CAPTCHA. These include Blogger and most signups for various web services, but apart from the fact that they're easily broken, like most people I find them highly annoying - the letters that you're supposed to pick out of the images and sometimes just downright impossible to discern:

Huh?

I've often thought that there must be better ways to do this, when out of left field, Tim O'Reilly points us to HotCaptcha from the folks that brought you HotOrNot?. Here you're presented with nine pictures of individual people, only three of which are judged “hot”. Pick the right three and you're a human.

Now, ignoring the potentially NSFW content, this is pretty cool. They have provided a webservice that uses the collective intelligence of humans to put together a question set that is almost impossible for a non-human to answer. Pretty cool.

Now, where could this go? How about something like presenting a bunch of pictures from Flickr and a set of tags, where only one of the tags applies to all of the pictures?

I'm sure that there are a bunch of potential solutions in the same vein that can get us better results than standard CAPTCHA and with none of the annoyances.

Hopefully we can stop squinting at bad CAPTCHA soon.

Good Luck Robert

I step off the grid for 24 hours and miss the biggest news in Ye Olde Blogosphere.

Congrats Robert and good luck. I know you'll be missed at Microsoft, and on behalf of my former employer. Thanks.

You've been almost single handedly responsible for the “opening up” of Microsoft. That took guts.

Every interaction I've had with you has been a good one, a joy in fact. I hope there will be many more to come.

Now, what email address do I send our beta invite to? ;-)

OSX Widget - gapingvoid

I recently listened to an episode of the Gillmor Gang which had Hugh MacLeod (of gapingvoid.com fame) as a guest.

Hugh is a brilliant cartoonist and marketing guru and was asking if anyone wanted to build a widget for blogs that could display the latest cartoon whenever someone visited.

Well, I'd recently been feeling the urge to try my hand at building a dashboard widget for OSX, so I thought I'd ignore the requested target platform (others have been solving that problem) and try something a little different by building a dashboard widget for gapingvoid.

Here it is:

gapingvoid

You can download the widget at /downloads/gapingvoid.wdgt.zip.

The widget pulls the rss feed from gapingvoid whenever it is shown at a maximum update rate of once per hour - there's a button to force a refresh.

Let me know what you think.

Update: For those of you that haven't installed a dashboard widget before, here are Apple's standard instructions:

Mac OS X 10.4 Tiger is required. If you're using Safari, click the download link. When the widget download is complete, show Dashboard, click the Plus sign to display the Widget Bar and click the widget's icon in the Widget Bar to open it.

If you're using a browser other than Safari, click the download link. When the widget download is complete, unarchive it and place it in /Library/Widgets/ in your home folder. Show Dashboard, click the Plus sign to display the Widget Bar and click the widget's icon in the Widget Bar to open it.

Basically if you're using safari, you're set. Otherwise just follow Apple's instructions or you can just unzip the archive and double-click the resulting widget in a Finder window.

Update 5/10/06 Version 1.1 - Minor bug fix to the widget that addresses a couple of bugs regarding how it figures out what is the latest cartoon.

Man, Am I Getting Hammered By Spam

The load average on my server has hit the roof as I've been getting around 100 comment spam attempts a minute over the past few days.

All comments are currently moderated to save the page rebuild hit when I have to go and delete the spam, but the pure act of many attempts per second right now is not helping matters.

Anyhow, the load average has dropped to a more respectable 0.01 as opposed to the 22 of a few minutes ago.

Bastards.

Tags: .

NewsGator/MarsEdit/FeedBurner Interaction Issue?

I'm seeing that NewGator (which provides the synchronization server for FeedDemon) isn't showing new content since I started trying MarsEdit.

MarsEdit pings the blog ping servers when I post that the content has updated, but I'm wondering if there's a disconnect because I use FeedBurner to provide the actual RSS file (so I get some stats).

Here's what I see happening.

  1. I post, my local RSS feed updates.
  2. FeedBurner picks that up at some point later.
  3. The RSS readers pull my feed which is actually redirected to FeedBurner.

At point (1) MarsEdit does the ping to NewsGator, but as the content in the RSS feed hasn't changed yet, I think NewsGator thinks it's just a spurious ping and doesn't check again.

I think I need to have MarsEdit just ping FeedBurner, and let them ping everyone else once they've updated their copy of the feed.

Anyhow, that's what I'm trying with this post. Let's see if it works.

Update: That seemed to do the trick. Configure MarsEdit to ping FeedBurner, and configure FeedBurner to ping everybody else.

MarsEdit - You Need It

Up until now, I've been editing my posts online using the MovableType interface.

This generally sucks, due to the lack of spell checking and everything that an offline editor can give you.

On the other hand, I'm not much of a wysiwyg guy as far as editing text goes. Give me troff any day. So I use the wonderful Textile 2 plugin from Brad Choate - a great and simple markup language.

Every now and then though, I try out the 'latest and greatest' offline editor, all of which generally suck either by forcing the source of the post to be HTML (and doing a very bad job of it), or having very little functionality.

Now though, I have a MacBook sitting in front of me, so I thought I'd give MarsEdit a go.

Am I ever glad I did!

Other than the great UI, I clicked on the preview button and saw that it offered markup using Textile. Hmmm, I wonder if it can do Textile 2?

A quick web search later yielded this post by Jon Hicks, and now I am able to create posts and preview them offline.

I can even have the live preview running as I type.

Nice job guys, and great job to Newgator for building a stable of great blogging and blog reading tools.

Finding the time

It occurs to me that I am so heads down with the startup that I'm not finding anytime to post.

I think I need to carve out some time to communicate. Maybe Steve's lunchtime musings would be a good thread…

Maybe I need just need to switch to a different process. Sometimes I just want to post a quick thought, but the cost of firing up the full post creation UI is just too much.

Maybe something like Dave's OPML editor. I need to figure out how well it hooks into MovableType, they seem to have the WordPress integration figured out.

I did experiment with the OPML editor while I was at Gnomedex last June. More experimentation needed…

Blog Valuation

A few people have pointed to an amusing tool at the Business Opportunities weblog that values your blog based the sort of valuation used in the AOL/Weblogs Inc deal.

Apparently my blog is currently worth $42,240.50.

Another site that has been around for quite a while, and is a lot more fun, is BlogShares. With this site you can buy and sell “shares” in blogs, perform leveraged buyouts, and generally treat blogs as though they were publically traded companies.

It's a hoot.

The “value” of a site is not only based on the value of incoming links, but also on a traditional buy/sell model - the more people buy shares in the blog, the higher it's valuation.

An impressive piece of work.

Scoble’s search rank trajectory

If Robert Scoble does switch to a new blogging platform, and hence new domain, I wonder what his trajectory to the top of the search engine results pages will be?  Will it be based purely on the heuristics that the search engines normally use for mere mortals? I.e. via inbound links, relevancy, etc... Or will the sites (google, msn search, yahoo, technorati, bloglines, etc...) seed their data so they can come up on top if he does another battle of the search engines?

Automatic OPML feed

Scoble is looking for a blogging platform that automatically produces an OPML feed based on tagged data.

Well, I just knocked this index template up for MovableType which seems to do the job. It loads fine in Dave's OPML editor too:

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<opml version="1.0">
<head>
  <title><$MTBlogName$></title>
  <dateCreated><$MTDate format_name="rfc822"$></dateCreated>
</head>
<body>
<MTCategories>
<outline text="<$MTCategoryLabel$>">
  <MTEntries>
  <outline type="link"
           text="<$MTEntryTitle 
               remove_html="1"
               encode_xml="1"$>"
           url="<$MTEntryPermalink$>" 
           created="<$MTEntryDate format_name="rfc822"$>" />
  </MTEntries>
</outline>
</MTCategories>
</body>
</opml>

Just add it as an index template, and you're golden. This is working in my install of MovableType 3.2 - I expect it will work fine with TypePad.

The autogenerated opml for my blog is now appearing over here.

It Was One Year Ago…

I'm currently at the Meltdown conference (where I'll be speaking later today) and realised that it was at last year's Meltdown, during a break, that I installed MovableType and migrated from blog from Blogger. That was the point that I started blogging regularly (I'd been blogging on and off since late 2001).

Happy blogging birthday to me...

Why Blog?

A friend of mine holds a dim view of blogs. In fact, he says so right on his blog...

So I thought I'd link to him so we can see if we can pull him into the conversation. My take? Community, communication, conversation, with a healthy dose of connection. Oops, that sounded a bit like marketing.

Darwin: Why blog?

Meeting Tom Reynolds

As I mentioned previously, Tom Reynolds, the EMT from Random Acts of Reality is visiting Seattle at the moment. When he posted about him impending trip I dropped a comment on his blog which he followed up on. So yesterday I picked him up from the Transit Center near Microsoft's main campus and went on a little tour of the campus and then off to the Microsoft Museum.

Unfortunately the museum was closed for a private function so we headed to my home in Kirkland where we had dinner with Nabila, Julian, Dave, our friends Andy and Raina and the dog. Much geeky discussions occured around blogging, Hitch Hiker's Guide to the Galaxy, RSS feeds, etc... generally boring the ladies to near coma status.

Shortly after eight, Tom, Andy and I headed downtown to the Central where we met up with a few other friends, including CJ. Much hillarity ensued, including the ritual FBUA discussions.

Myself and Tom.  Picture stolen from Tom's blog.

A good evening. Tom writes much better than I about the evening over on his blog.

Checking Out Ecto

I've been looking for a decent blogging tool for ages. None of the standard builtin editors in the RSS readers seem to cut it, and posting via the web interface is a bit of a pain.

Today I stumbled upon Ecto, and am giving it a try. We'll see how it goes.

Ecto. Via Dave Sifry.

Listening To “The Source Code”

I was listening to Adam Curry's latest Source Code this afternoon in the car when he talks about his move to in the UK. He's keeping where he lives a secret, but he mentions that he lives by the "Down's". Cool! That means that he's living within 25 or so miles from where I grew up.

Btw, Adam, why did you move to the UK? I left there in '97, and every time I go back I get reminded how crowded and screwed up the place has become. It's not the place I left.

On the other hand, Adam talks about the cool tech that is prevalent there now. The UK does have it's good points...

Anyhow, next time I'm back in the UK visiting the parents, how about a geek beer?

Bloggers

Since no one else seems to have mentioned this, Jim Borgmans's blogger cartoon appeared in the Seattle PI today.

Bloggers

© 2001 to present, Steve Lacey.