Saturday, July 29, 2006

OSCON 2006 Day 5

The best part of this morning's keynotes was a hilarious talk by Damian Conway. He had everyone laughing till they cried - making fun of Microsoft, Google, Apple and others.

Things starting to wind down, not quite as many sessions to choose from this morning (only 10 instead of 15!) The first one I went to was 10 Tools Developers Need Today by Karl Fogel, formerly with CollabNet, now with Google. (Google's hiring of all the best talent was a noticeable trend.) He described one tool that analyzes Subversion logs to find major contributors. Apart from that he mostly talked about tools that would be nice to have. There were a few interesting ideas.

Next I went to Highly Technical Management of Software Projects by Alex Martelli, also with Google. One of the theories that's commonly voiced is that programmers don't make good managers. This talk argued that programmers can make good leaders of teams. Alex was a good speaker and a lot of what he said resonated with me because the style he described had similiarities with how I work with my programmers. For example, he recommended getting down in the trenches and pitching in when needed.

The final keynote was from Eben Moglen, a lawyer heavily involved in open source issues, especially licensing. He is working with Stallmen on GPL 3. He was a good speaker (although he sounded like a lawyer).

BTW For pictures from OSCON see:

And that's it for OSCON. Saturday I fly home to Saskatoon. Monday I'm back at work and Tuesday I have a new programmer starting. I'm looking forward to getting back to some actual programming instead of just hearing people talk about it!

Thursday, July 27, 2006

OSCON 2006 Day 4

The keynotes were better this morning, especially Robert Lefkowitz (always entertaining) and Stephen O'Grady (of RedMonk).

First session of the day for me was How Database Engines Work by D. Richard Hipp who developed SQLite. I'd hoped for some ideas to improve Suneido's database, but it was pretty basic. Actually, one of the more interesting aspects of the session was that there were developers from MySQL and PostgreSQL in the audience who contributed. In fact, the only idea for an improvement came from a question from the audience. It sounds like SQLite's query optimization is fairly basic, Suneido seemed to compare quite well - it does everything that was talked about. It did make me think that I should probably document the query optimization that Suneido does.

Next I went to Building Successful Commercial Open Source Projects by Jorg Janke of Compiere - an open source ERP system. Like my company's vertical software, Compiere has integrated accounting. Also like our software, they support only a single version, requiring users to update if they want fixes and improvements. Unlike Compiere, we haven't open sourced our software (only Suneido, the underlying development tools). I had to laugh/groan when he recommended staying away from risky, regulated areas like payroll. (We have payroll, since our customers want it, but it is scary and a hassle.)

After lunch I went to Building Domain-specific Languages in Ruby by Neal Ford of Thoughtworks. I really admire Martin Fowler's work and he's with Thoughworks so I decided to check out this session. It was ok, but nothing really new to me. One nice thing about using Ruby for DSL's is that it doesn't require parenthesis around function call arguments. e.g. you can write "print 123" instead of having to write "print(123)". I wonder how hard it would be to allow this in Suneido? We normally do DSL's in Suneido as object constants or class constants but the drawback to this is that it doesn't allow variables or control structures. Ruby's approach of using executable expressions is more flexible in this respect.

My next choice was User Experience, Pain Free by Amy Hoy, a pretty good talk. One of her recommendations, which I hadn't heard before, was to avoid saying "this will let the user do ..." and instead say "this will help the user do ...". At first this seemed like nit-picking, but the more I thought about it, the more it made sense. When we add a feature that "lets" the user do something it's like we're doing them a favor, and whatever we give them they better appreciate it. On the other hand, if we say we're going to "help" them do something, then suddenly it's up to us to do a good job or else we've failed.

I was tempted to go to Amy's next talk on user interface design but I decided to aim for variety (it's the spice of life, after all!) and went to Concurrency Control in Relational Databases by Arjen Lentz of MySQL. The actual material didn't contain much new to me, but it was interesting to hear how different databases (MySQL, PostgreSQL, Oracle, etc.) handle concurrency. Again, I think Suneido compares quite well with the big guys. It always shocks me to hear that most databases default to an isolation level of read commited or repeatable read - levels 2 and 3 (out of 4). The bottom line is that transactions are only partly isolated (you only get some problems!). The reason given for this is performance. But isn't this premature optimization? Is it really too slow otherwise? Wouldn't it be better to default to the highest level and then if it turns out to be too slow, then you could consider "compromises"? Suneido is always level 4 - serializable i.e. totally isolated. So far, for our uses, this isn't "too slow". After all, as the saying goes, if it doesn't have to be "correct", you can make it as fast as you want!

Apple Rules

I expected to see a lot of laptops at OSCON. (Including the strange and rude practice of emailing and chatting on your laptop during sessions that you've paid a lot of money to go to.)

I also expected to see Linux running on most of them. After all, this is OSCON. I was a little embarassed about running Windows on my laptop. (I dual boot with Linux, but Windows is my primary environment.)

What surprised me was the number of Apple Mac laptops. These were definitely the machine of choice with both attendees and speakers. Although there were lots of other brands around, I'd guess about half the machines were Macs. That's way more than their overall market share. Although Macs do run a version of unix, they also run a lot of proprietary software. Something must be attractive enough with these machines to overcome open source fans' resistance to non-open software.

I discovered the Apple store downtown in Portland so I got a chance to fondle the toys. I have to admit these are very sexy machines. I especially like the looks of the new black or white 13" Mac laptops. (I think the silver ones look too much like every other machine.) They are very sexy pieces of hardware with a very sexy gui. I want one! I also love the Mac Mini - such a contrast to big clunky desktop boxes.

Wednesday, July 26, 2006

OSCON 2006 Day 3

The day started off with a few keynotes from various people - nothing too exciting.

The first session I went to was about building an online game with Ruby on Rails ( - unroll spelled backwards). It was quite interesting and entertaining but I didn't learn too much.

The next session was on using Capistrano to deploy Rails applications. It was a good overview of a tool that I think we'll want to use on our Rails project.

After lunch was a session on a new way to build query interfaces. It wasn't anything earth shaking, but there were a few interesting ideas on how to give users more feedback as they enter into a search form and support doing it incrementally.

Next was another presentation by Stuart Holloway on Streamlined. This was mentioned in his Ajax on Rails tutorial, but he went into more details in this session. This is brand new software, barely released, but it promises to make building simple database apps with Rails almost trivial.

For something different I went to a session on Xen - open source virtualization software for Linux, similiar to VMware.

My last session of the day was on wxPython. I'm not that interested in Python, but I am interested in wxWidgets since it seems like the best bet for a cross platform gui for Suneido.

Tuesday, July 25, 2006

OSCON 2006 Day 2

This morning's tutorial was about Ajax on Rails by Stuart Holloway. He talked about the Prototype and Scriptaculous Ajax libraries and about Rails RJS templates. I haven't actually done any Ajax development - just read about it and used Ajax web sites. It's pretty cool stuff and with these tools it looks like it's getting a lot easier to do. And it didn't hurt that Stuart was an entertaining speaker.

For the afternoon I had signed up for a tutorial on the RT (Request Tracker) ticketing system. I recently bought their book although I haven't read it yet. My company has a homebrew ticketing system that works pretty well, but if nothing else, I figured I might get some ideas. One negative (for me) is that it's written in Perl which I'm not very familiar with. I wasn't as excited by this talk but it was still interesting. One of the things I was curious about was what techniques they used to make RT customizable and extensible but, unfortunately, I didn't get too many good ideas on this front.

There were a number of people speaking in the evening. I skipped most of them but snuck in and out for Kathy Sierra's talk on Passionate Users. I knew of her from the Head First series of books. If you haven't seen these books, they're worth checking out. She gave a talk that was entertaining and inspiring (if you care about users).

Monday, July 24, 2006

OSCON 2006 Day 1

Today was my first day at OSCON. This is the first time I've signed up for the tutorials at a conference. Monday and Tuesday are tutorials and then the actual conference sessions start on Wednesday.

This morning I went to a tutorial on Subversion API's. I had an idea that we might be able to use Subversion for Suneido's version control. Suneido currently has its own version control but it has a few limitations and there would be some advantages to using Subversion. The big hurdle, I realized during the session, was that Subversion assumes the working copy is stored in files in the file system. But Suneido stores the working copy in libraries in the database. One option would be to modify/extend Subversion to access working copies differently, but it doesn't sound like that would be easy. Another option would be to use the repository interface directly and ignore the existing client/working copy stuff. This would probably be the way to go, but still not easy.

In the afternoon I went to the Rails Guidebook tutorial by Dave Thomas (of Pragmatic Programmers fame) and Mike Clark. The big problem in this session was that so many people had their laptops plugged in that the breaker blew several times! Eventually they asked everyone to unplug. Most of the material I was already familiar with, but there was some newer Rails stuff and some explanations and background that were useful. It really got me thinking about implementing some of these things in Suneido. For example, ActiveRecord (or at least a simple version), migrations, scaffolding generation, rxml, etc.

For me, the best part of conferences is getting ideas. If I just wanted to learn some software I'd rather get a book and try it out. Of course, ideas are one thing, actually implementing them is a whole different story. Not that good ideas are easy and a great idea can be worth a lot. But unless you can implement them, they're not worth much!

PS. The other "downside" to my ideas is it tends to make my programmers groan and roll their eyes and say "oh no, not another epiphany!". This is, of course, because one of my ways to get ideas implemented is to get them to do it :-)

Wednesday, July 12, 2006

Burning CD's from Windows XP

Recently I saw a tip on how to burn CD's from Windows XP. I was surprised because I didn't realize Windows XP had this capability - I thought you had to use Nero or some other software.

The other strange thing was that the options they were talking about didn't show up on my desktop machine (although when I checked I could see them on my laptop).

The problem was that in the Properties of my drive, "Enable CD recording" wasn't turned on. Maybe because I installed the drive myself, although you'd think it would be enabled by default. Once I turned this on the options appeared.

And you can even use Send To (the topic of my previous post)

I also found there's a Power Toy (although it's "unauthorized") to let you burn ISO images, which was actually what I wanted to do. (I was making Ubuntu 6 cd's.)

These new options require a lot less steps than using Nero, so I'm happy :-)

Adding to Send To menu on Windows

The Send To context menu option can be a handy feature. Occasionally it's nice to add to the choices e.g. a network folder you commonly copy files to.

But I can never remember how to add items. The trick is Start > Run > sendto;en-us;310270

Monday, July 10, 2006

O'Reilly Open Source Convention - July, 24-28, 2006 - Portland, OR

I'm going to be in Portland for OSCON from July 19 to 29. If anyone is interested in getting together email me at mckinlay at

Read more at conferences.oreillynet....

Friday, July 07, 2006

Stardock: ThinkDesk - Multiplicity

Here's a cool utility that lets you use multiple computers (I'm thinking my desktop and my laptop) with a single mouse and keyboard, but without "remote access" software (each computer still needs it's own monitor).


Update: Although it worked well, this seemed to mess up my laptop keyboard - the special "FN" shift key was "stuck" on. Exiting from the software didn't help, nor did uninstalling it. I ended up doing a system restore to the day before and that solved the problem. It's possible it wasn't this programs fault but it's awfully suspicious.