Red Echo

January 10, 2010

My bike has been parked in the Rocket Factory since September, up on a stand with the back wheel off. I think I burnt myself out with that big ride and needed a while to get my interest back. Yesterday was a beautiful sunny afternoon, and I felt the first stirrings of interest in a while, so I rang up Adam and we went over to Ballard to finish the job. We made a few mistakes and had to backtrack, including a trip to Lynnwood for a new chain tensioner, but it all came together in the end. We left the bike plugged into a battery charger.

Today I’m planning to head over with a bucket and a scrubbing-brush. There’s a lot of dust and grime and playa caked onto that machine, and I’m tired of looking at it.

January 2, 2010

I’ve uploaded the live recording of my New Year’s Eve set. It’s 78 minutes long, 256k MP3. It has the rough edges you’d expect from an unedited recording of an improvised performance, but I’m much happier with it than I’d expected to be. It’s joyful and fun. I hope you like it.

January 1, 2010

Hello, 2010.

The first six months of 2009 were unusually tough. By the end of summer things had started to turn around but I still felt exhausted. It’s been a slow build back up; I feel quieter than I did last year, still, but I can once again confidently say that life is good.

I rang in the new year with Ava and a crowd of good friends at a big house party. There was a big chill room on the main level, and a dance room downstairs. I played the 2 AM – 3:30 shift in the downtempo room. It felt really good; it was pretty high-energy for downtempo, but I was full of joy and optimism, and it all came roaring out. I’m looking forward to putting the recording online.

Today I’m relaxing; we had a big brunch over at AND house, and I’m going back over in an hour or so to jam with Barry, Maja, and Michael.

December 29, 2009

Back from California, where I spent Christmas at my mom’s place, with Ava, and most of my siblings. It was a short visit since I couldn’t take much time off work, but it was good to see everyone. We went to see “Avatar”, spent a day in San Francisco getting rained on, romped around in the snow at Echo Summit, and then went home. Now it’s time for work again.

Happy to say the latest TSA craziness had no effect on our flight. I wish there were some way to fly Seaport all the way down to Sacramento.

Rental car was really unsatisfactory: do not buy a Dodge Caliber. Gutless engine, ugly styling, squirrely steering, and it was hard to see out of the scrunched-down windows. The only thing I liked about it was the red inset panel on the upholstery.

December 21, 2009

I went to see Avatar last night, with Ava, Adam, Michael, and Lakhita. I cannot remember the last time I saw a movie that hit my sense of wonder so directly; it felt like being a kid and watching “Star Wars” again. It’s an old familiar story, and nothing about the plot will surprise you, but that’s not the point. Avatar is about vision, awe, imagination, and love; the story is a comfortable skeleton supporting an immersive experience in an alien world. You have never seen anything like it before; someone clearly cared very deeply about this movie and paid attention to a rich torrent of detail that brings the imaginary planet to life. You have to check your cynicism at the door, but if you let him Cameron will take you on a beautiful, compelling, and spectacularly colorful ride.

December 19, 2009

Decorating for Christmas


December 18, 2009

New speakers



My new pair of KRK Rokit 5s just arrived. The music machine sounds so much better!

My latest sewing project is a pair of pants, made from cotton canvas in dark brown and vivid red. The design was inspired by a hasty improvisation for my bumblebee costume, where the legs are fitted through the inseam and crotch seam rather than the outer seam. This version uses the same fitment scheme but the leg is made from an outer panel of dark brown and two inner half-panels of red; French seams make a smooth line down the front and back of each leg, and the dark-brown yoke and waistband tie the sides together.

I’m only calling it a partial success; it fits pretty well but there are some details I got wrong. Still, it is an interesting experiment, and a perfectly wearable piece of clothing, so I’m happy I tried it. I’ll probably try this technique again.

December 15, 2009

Trader Joe’s


December 13, 2009

New top for Ava, back view



This is the top I’ve been making for Ava. I finally did the last little bit of topstitching…

Restaurant delivery site

So there is this site which lets you search for food for delivery. It is really convenient. I keep forgetting where it is so I’m posting it here; this way I can search my own blog whenever I forget. The site is
Eat24Hours; you can enter your address and it lists all the restaurants that will deliver to you. You can place your order right there, and 45 minutes later, voila! Food. It’s great.

Back from Montreal. Seattle has been cold all week, I’m told, but it feels pretty mild after the freezing wind up north.

I’m tired; it was a busy week. We worked all day and went out drinking every night, then capped off the week with a big company Christmas party. Drinks, good food, good music, a little dancing; it was really nice to spend some time with the rest of the team and get to know what this outfit is all about.

Ava and I just finished re-potting a couple of the hanging plants in the room here. I’m going to spend part of the afternoon sewing: the top I made for Ava needs about five minutes’ worth of topstitching to be truly complete, and I want to start on a pair of pants I’ve had in mind for a month or so. They’ll be two-color panel pants (red & chocolate), no side seam, welt pockets front and back.

The monitor system I’ve been using with my music machine is a jury-rigged assemblage of stereo parts scavenged from Value Village; I don’t think I spent more than $30 altogether. It has worked well enough to get by, but the sound is weak and the idiosyncratic bass reproduction makes it hard to get the mix right. So I hit eBay this morning and ordered another pair of KRK Rokits. The pair on my desk has been nothing but delight, and I’m sure the new system will make music practice that much more satisfying.

December 11, 2009

Dinner at Bar et Boeuf


Montreal Metro


December 6, 2009

Arrived in Montreal – settled in at a cute little hotel, about to head out in search of dinner. I’d be enjoying this more if I hadn’t come down with a cold last night, but that’s how life goes. I’ll be here for a week of work meetings; back home Saturday evening.

First impression: all the street signs are in French! No, really – in Vancouver, everything is bilingual even though practically nobody seems to speak French, and I’d assumed the same would be true here.

December 4, 2009

Llew R. came by this morning with three large boxes full of laser equipment. We unpacked two argon lasers, a 100-milliwatt and a 400-milliwatt, with matching power supplies. These things are BIG! We got one of them powered up just enough to generate a steady flash; I’ll have to work on these some more and figure out how to make them run properly. The boxes also came with two pairs of galvanometers, a standard 5-milliwatt HeNe with power supply, and another laser tube of unknown type. This is going to be fun.

November 30, 2009

MJ just left for home. She came up from Portland on Friday, having spent Thanksgiving with a group of college friends. I always enjoy spending time with her. We joined Barry and Maja over at AND house for an evening of music, spent Saturday relaxing and napping, then went out to the Seelie Court Reunion party at TCoB. I really enjoyed Manahan’s set – and I’m told I missed a great performance from Chadwick by leaving at 3 am. Oh, well – can’t stay out all night every Saturday. Sunday, more chilling out; today, we both worked, then went out for dinner and drinks at Liberty. Nice to have time to catch up.

I haven’t done any actual work on Radian in the last few days, but I’ve posted a few more things on the blog. I feel a little nervous putting my work out further into the public eye, but it really is time to get serious.

November 26, 2009

Downtown, Thanksgiving


New Radian blog

I’ve set up that second blog I mentioned yesterday. I am sure I will continue to make references to Radian here, but I plan to use the new blog for a more in-depth look at the design process. I’m also hoping to get a public source archive up soon; that and other resources will all show up on the new site:

The Radian Programming Language

How do you type non-Latin characters on a standard QWERTY keyboard? In Mac OS, the system hasn’t changed in twenty-five years: holding down the “option” key shifts to an alternate keyboard mapping, where accent characters are “sticky” and combine themselves with whatever letter you type next.

On Windows, the system is so arcane it is functionally useless: you have to hold down “Alt” and then type in a four-digit numeric code, using only the 10-key pad, not the normal number keys!

I’ve never figured out how to do this on Linux before, but apparently the Linux solution is remarkably clever:

You pick a key on your keyboard you don’t use much, like [Insert], [CapsLock], or [menu], and make it the “compose key”.

Then to make any character, you just hit the compose key, then type the two obvious keys that, when combined, make up the character.

November 25, 2009

Dinner with Ava


It’s the dark part of the year, and I’m spending most of my time indoors. I’ve been playing a lot of music, working hard on Radian, and quietly enjoying life at Sunrise and time with Ava. I don’t have any Thanksgiving plans; I’ll probably spend the day at work – the joy of contracting! – then make dinner with Ava. MJ is coming up to visit for the weekend; I’m looking forward to a few days catching up with her.

I’m thinking about putting more of my work on Radian out in public: a public source code archive, I think, and perhaps a second blog, where I can talk my way through the design process in more detail. I’ve been reluctant to put too much of a spotlight on this project yet, since it’s a long way from being a useful tool; but it’s an interesting problem space, and there’s no way it will ever become a useful tool without help from a lot of other people, so it might be time to start opening up.

November 16, 2009

Syntax across languages: samples of corresponding operations in a variety of programming languages.

November 12, 2009

I have just about finished putting together a basic module system for Radian, which will allow programs to span multiple source files. Designing this system was more difficult than I had anticipated; the module system says a lot about developer workflow, so I had to think pretty far ahead about the things I expect people to do with this language and the ways they will likely want to do it.

The module system came about because I want to start building a standard utility library, and in order to do that the compiler needs to link a program together from multiple source files. I want to have some semi-automatic mechanism for linking against the standard library, but it seemed more sensible to build that on top of a generic linking mechanism than to start with the special case and generalize it.

Lessons learned from experiences with other languages:

  • Modules should not be able to define global identifiers. A client program can always import a qualified symbol into its unqualified namespace, but there’s no way to prevent imported global identifiers from conflicting with each other.
  • Source files should import dependencies explicitly. Interpretation of a source file should not depend on any external context, like a project file, an environment variable, or the contents of some shared directory.
  • Support modules should be initialized and finalized explicitly, in the main program, so that the programmer can control the dependency order.
  • The structure of the program should be visible in the filesystem. Don’t trip people up by introducing a parallel-but-different structural hierarchy.
  • Makefiles are evil. The language must allow the programmer to describe the program in such a way that the compiler can identify all of its parts and build a finished executable in one step.

The system I’ve built works like this. You invoke Radian on a program file; this is equivalent to the “main” function in C. This program file may import module files, which may in turn import other module files, using the import statement:

import foo

This statement declares the name “foo”, representing the contents of the file “foo.radian”, which the compiler expects to find in the same directory as the client file. Imports are simply placeholders, to be resolved at link time, so circular references are not a problem.

The Radian compiler treats the contents of an imported module file as the body of an object declaration. The top-level functions and other declarations in the file become the members of the imported object. A source file cannot simultaneously be a program and a module, since only a program file gets the implicit “io” variable allowing interaction with the rest of the system.

That’s all I’ve built for now. As far as the standard library goes, I think I’ll throw an implicit “radian” import into the top-level namespace of every file. All of the standard utilities will be members of this namespace – much like “std” in C++. This will allow me to extend the standard library in future versions without introducing name conflicts. To make this more convenient, I want to extend the import statement, like Python but in a more sensible order:

import stack from radian

This would define a new item named “stack”, equal to “radian.stack”; you could extend the “from” expression arbitrarily to handle deeper nesting. You wouldn’t have to have imported the “from” identifier on its own; you could import only the item you wanted and leave the rest of the package unimported.

Proceeding onward, I expect that you’ll be able to treat subdirectories as modules – if you had a subdirectory “foo” next to your program file, containing a module file named “bar.radian”, you could import it like this:


# get access to the module file only, resulting in 'bar'
import bar from foo
# import the whole directory, resulting in 'foo.bar'
import foo

I’ll need to design a package system as well, but that is still some distance ahead. It’ll probably look something like python’s packages, which remind me of Mac OS X bundles. I am fairly well convinced that the convenience of a standard central package directory is outweighed by the configuration hassles and dependency tracking issues, so I think I will require packages to be included in the project folder. If people want to keep a central repository of useful libraries, or several such repositories, they can always make a softlink/alias into the project folder.

November 7, 2009

Performing at Seacompression


November 5, 2009

music workstation


I am playing at Seacompression!

Michael H. called up last night, wanting to know if I was interested in the opening slot at Seacompression. Well, heck yeah! Seattle’s biggest burner party, hundreds of people and a huge PA system? No way am I turning that down. So I’ll be playing from 7 PM til 7:45 this Saturday, the 7th. Seacompression is going to be in Hangar 30 at Sand Point (aka Magnuson Park); tickets are $20 presale, $30 at the door.

Yeah, it’s early, so I’m not expecting a huge crowd – but man, this is exciting. Come see me play! I can’t wait to crank it up and try to make you dance.

One improvement I made when redesigning my music machine was to add a compressor, right at the end of the signal chain, to help manage the overall dynamics. It happened to be that one-in-ten craigslist item that simply didn’t work, so I’ve been getting along without it, but the replacement arrived yesterday and I’m really glad I stuck with the idea.

Practically all the music you hear has been passed through a compressor: you can make as loud a noise as you want when you are playing an acoustic instrument, but there is an upper limit when you are playing through a PA system, and exceeding that limit will create distortion. The problem is that music can be very “peaky”, especially dance music: the loud bits, like kick-drum hits, are very much louder than the quiet bits. Turning the overall level down far enough to avoid distortion leaves the body of the mix sounding quiet and anemic. The solution is to compress the dynamic range, reducing the difference between the loudest and the quietest parts of the signal: this is the job a compressor does.

So why is this important for my music machine? When a DJ spins a record, they’re reproducing a signal that has already been compressed during the recording/mixing process. The DJ can set a nice hot level for the overall sound and rest assured that the peaks have already been tamed. I don’t have this luxury: since I’m making music from scratch, I have to manage levels by hand as I go, and I generally have to leave the overall level lower to make up for the peaks. This is fine for ambient and downtempo stuff, but when I try to play louder, thumpier, more uptempo music, I end up doing a lot of work riding the level knobs without having much to show for it.

The compressor, then, lets me delegate one more tedious job to a happy little robot, yielding a clean, consistent, punchy sound. And it works! I fired it up this morning and spent a few minutes playing before work. Drums, hats, bass, lead, pad, arp – build ’em up, break ’em down, crank it, back off – the sound stayed nice and full and clean. Yes! This is exactly what I wanted.

November 4, 2009

This essay certainly contradicts the prevailing wisdom, but it makes some reasonable points. It’s OK Not to Write Unit Tests:

I’m not saying that all unit tests are worthless, nor that you should never write one ever again. But I am suggesting that you take a good hard look at the time you’re spending and ask yourself what benefit you are really deriving.

What I’m saying is that it’s okay if you don’t write unit tests for everything. You probably have already suspected this for a long time, but now you know. I don’t want you to feel guilty about it any more.

Test what can fail. Test stuff that’s easy to test. But don’t beat yourself up trying to get 100% code coverage. 100% code coverage doesn’t mean all that much, anyhow.

November 3, 2009

Awesome: a visit to the imaginary town of Argleton, which shows up clearly on Google Maps despite not actually existing. Current best theory is that it was inserted by Google’s data provider as the equivalent of a trap street.

The possibility of actually visiting an imaginary place seemed irresistible. In terms of my journey, not to go there would be a dereliction of duty, like saying ‘I could have made a detour to Rock Candy Mountain’ or ‘Tir-nan-Og’, ‘but I decided to press on directly to Maghull instead’. So today I decided to make the expedition – from the world we know to a fictitious and uncertain place.

Reaching non-existent lands can be accomplished in many ways, but I decided to use Google itself to navigate to this one. After all, they invented it.

October 31, 2009

Hive Mind Halloween


I had no costume inspiration of my own this year, so I decided to join Alison’s crew of bumblebees. I wanted something I could comfortably dance in: thus, my concept was “disco bee”. I cut two yards each of black and yellow metallic stretch material into five-inch strips, then stitched them back together, alternating colors to make stripes. From this I cut out a pair of pants, making each leg from a single piece so I wouldn’t have to match the stripes along an outside seam. I fitted the legs, made the yoke and waistband, adjusted it to fit comfortably, stitched it all together – then discovered I had left no way to actually get into my own pants! Frustration!

Time for a dinner break, with Ava, over at Jeff and Nika’s place. Nika happened to have a spare zipper, so I used a sharpie to turn it black, then stitched it in: hey-ya, the pants are done. I made a pair of sleeves from the remaining fabric, attached front and back with strips of elastic. I finished off the look with an abstract set of wings, repeating the striped look with layers of black and yellow fringe, stitched along the underside of each sleeve and across the shoulders. Top it off with a pair of springy antennae, and I was ready to go – 11:15 PM is a splendid time to leave for a late-night party!

The bumblebee project came out really well; there were at least 30 of us, enough that people clearly understood there was something going on. Shawn and Barry came dressed as bee-keepers. Hive Mind always has a lot of really elaborate costumes, and I felt good to be wearing something unique and polished. The party was so crowded, in fact, that I spent the first hour just standing in the hallway talking to friends as they passed by! It wasn’t until 2 AM that the crowds had thinned enough that I felt like dancing. But, hey, it was time-change night, so we got an extra hour of party in and I rocked out until 5 AM. It was a good night.

« Previous PageNext Page »