Address Book 0.1 Released

August 10th, 2005

This is the first release of AddressBook, a simple Address Book for windows inspired by OSX.

Give it a download here (you’ll need the .net 2.0 runtime)

Please send any comments or bugs or patches to redress-users@lists.public.thoughtworks.org. And if you have any experience skinning a .net app to make it look OSXy, that’s first up for next release, and I’d love a hand.

What I’m Working On

August 9th, 2005

I’ve been pretty quite lately.

Well I’ve been busy, stuff I’ve been working on that I’ll hopefully be posting more about include :

  • Playing with Jetbrains MPS – it’s their LanguageWorkbench, and it’s nice, very nice. If you’re totally new to the whole space, you’ll probably find it a bit frustrating, as it’s still very early days of the EAP and it’s a bit rough. But, for me, I’m coming to it from someone who’s wrestled w/ a lot of the problems that MPS has already solved, and it’s refreshing to see their solutions. More Later…
  • Playing with JackRabbit – this is a java content repository. Something like this is the perfect foundation for a language workbench to be built on top of. More Later…
  • Starting AddressBook – this is a .net port of OSX’s Address Book. I’m pretty close to releasing version 0.1, so next couple days you should see a download available here. I’m already using it for my addresses, and it’s so much better than outlook… More Later…
  • Intentional in Budapest – I’m in Europe right now, working with the Intentional team in Budapest after taking 2 weeks vacation in Sweden. I know, rough life.

Domain Specific Lanaguage

June 19th, 2005

Leading a band——
Tamar, one of my good friends and a singer was telling me a story about the first time she led a band. She was singing Route 66, and after she got up on stage, she said:

Route 66 in E Flat
Drummer, I want a big boom after "get your kicks"
We're gonna run through it once, mess around,
come back in on the bridge and I wanna tag it on the end.

a one, a two, a one-two-three-four...

In 15 seconds, she was able to communicate to them (a band she’d never sang with) exactly how she wanted them to perform the song. It would have taken her half an hour to communicate the same thing to me, but she and they spoke the same language. It was a Domain Specific Language or DSL.
——
Examples in Software——
In software, you might have different domain specific languages, but the concept is the same. They are able to provide more concise, precise and quickly understandable representations within a domain.

Let’s look at a couple examples:

NAnt

This is a domain specific language implemented in XML that many java and c# developers are familiar with. NAnt is used to build .net projects, below you’ll see a simple build file. Notice how all the first level constructs have to do 100% with the domain of building an application.

<project name="MyProject" default="build">
  <target name="clean">
    <delete failonerror="false">
      <fileset>
        <include name="build/**"/>
        <include name="**/bin/**"/>
        <include name="**/obj/**"/>
      </fileset>
    </delete>
  </target>
 
  <target name="compile">
    <solution solutionfile="MyProject.sln" configuration="Debug" outputdir="build"/>
  </target>
 
  <target name="test" depends="compile, refresh-books">
    <exec program="../tools/NUnit/TestRunner.exe">
      <arg value="MyProject.Tests.dll" />
    </exec>
  </target>
 
  <target name="build" depends="compile, test"/>
</project>

Active Records in Ruby on Rails

There is a lot of buzz right now around Ruby on Rails. One of the things that Rails does incredibly elegantly is it’s OR (object/relational) mapping.

 class Recipe

This code just mapped the Recipe object to the recipes table in the database and whatever fields it has. It associates every recipe with a category, and every category with a list of recipes.

Again, the common pattern is that there is not a lot of code here that is not specific to the domain. Domain specific relationships like “belongs_to” and “has_many” are represented by top level constructs.
——
Summary——
In trying to explain Language Workbenches and “intentional programming”, I often talk about the value of DSL’s, but it’s sometimes hard to come up with examples that someone will connect with. Here I gave a totally non-technical example, an xml based example and a ruby based example.

What examples of other types of Domain Specific Lanaguages can you think of?

Simonyi and Language Workbenches

May 12th, 2005

For the last 3 months that I’ve been back at ThoughtWorks, I’ve been working with Charles Simonyi at Intentional Software on their Intentional Editor. It is one of an emerging set of tools that Martin Fowler is about to brand “Language Workbenches”.

It’s pretty amazing stuff. I am somewhat limited as to what I can say about the specifics of their editor, but I want to start talking about the field of Language Workbenches in general.

I’m still figuring out what I want to talk about, separating my blog into personal / work sections (which was long overdue) is a part of it. I believe Language Workbenches are quite possibly the next big thing in software, and I think we have some interesting road ahead of us.

In the near future expect posts on things like DSL’s (Domain Specific Languages), or what a next generation IDE might look like.

And if you want to know more, definitely stay current w/ http://blog.intentsoft.com/ and http://martinfowler.com/bliki

I’m Using Ruby on Rails

January 26th, 2005

So it may look like the old site, but you are looking at brand spanking rewrite.

OneMansWalk now sits on top of RubyOnRails. And it’s nice. Very, very nice. For the first time I could actually see Ruby as something that I would actually ask a client to consider for a web application.

It still is file based which lets me use cvs as a way to work in a disconnected fashion. However, I’ve started separating content from logic, so the site is now a project on RubyForge at http://rubyforge.org/projects/blinki/ and doesn’t include any content :).

I’ve had a lot of requests to get a site like this up and running for my friends, so next up I’m going to try to install it on one of their machines and then work on packaging it for non programmers. I want to create a windows installer that installs apache, ruby, imagemagick, and this source code. We’ll see how that goes. It will be successful when my mom can install it :)

One note : if you have a link to my rss feed, you’ll need to update it, the new link is

http://www.onemanswalk.com/wiki/rss

I Would Never Have Thought Of This…

November 30th, 2004

…I guess it’s a measure of how much of a software guy I am.

This has got to be one of the funniest workarounds for software I’ve ever heard of.

I’ve Got a New E-mail Address

November 5th, 2004

Okay, I’m jumping on the bandwagon. GMail is awesome, after uploading all my messages, I’m starting to REALLY appreciate those google guys. The web client is faster than most local mail clients I’ve used. And the searching, conversation, labelling… It’s nice. Anyone want an invitation, give me an e-mail.

…of course you’ll probably be needing that new e-mail :

= jeremystellsmith@gmail.com

creative, no?

Anyway, I’m sending out a huge mass e-mail to pretty much everyone in my address book. So if you don’t get it, and you think that you should be IN my address book, shoot me an e-mail. (and if you could include a picture in that e-mail, you get bonus points :D)

Good Interview Questions

September 6th, 2004

I’m going to start keeping track of my favorite interview questions here. I will of course NOT be posting the answers :)

Design Patterns

  • State, Strategy, Bridge, and Adapter are all similar patterns. How are they similar, and how are they different?

Open-Ended Questions

  • “What makes good, maintainable code?” I’m always surprised at how revealing the answers to this question are – John Perkins
  • “What questions should we be asking you?” “Has this been a good interview? How can we improve?”

A New Camera

July 31st, 2004


So my camera had an “unfortunate accident” involving the floor… Still works, but the display doesn’t which makes it really hard to control.

Instead of fixing it (an expensive proposition), I’m thinking about using this as an excuse to get a new Canon PowerShot S1 IS. It looks really sweet. It’s a bit heavier than my old Canon PowerShot S400, but it’s got more manual controls, a nifty sideways turning viewer, and the best part is the 10x zoom…

Sigh…

Now the part that sucks – getting this new toy would cut this trip short by at least half a month…maybe it’s time to break out the mac & cheese?

Chizzle-0.02 Released

July 9th, 2004

Download it here src=”!” alt=”” border=”0” />

Sorry for the delay, lot of moving across continents :)

With this release some other indispensible things for a text editor/ide, using Chizzle is actually fun at this point.

Look for the next release in a couple weeks

This release includes:

  • Find
  • Run (for ruby)
  • Goto Line