I figured out how to crack combination locks when I was about 16, and caused my chemistry classmates at SCC some little consternation when I demonstrated the technique. This is how you do it.
January 26, 2010
January 24, 2010
I spent Friday afternoon/evening getting my bike’s new headlight and turn signals wired up and bolted on. I gave it most of a can of starter fluid and got it running again – yay! Took a quick trip over to Brown Bear and went over it with the pressure washer.
Adam and I spent a couple of hours moving his bike to the shop and mine back home, which involved a detour up to the Lincoln Towing lot on Aurora, since it turned out his bike had gotten one parking ticket too many. It took some fresh gas, a hit of starter fluid, and a jump from my car to get it running, but then everything worked fine.
Friday evening I went over to AND for cocktails and music, and ended up walking home late. I went back to pick up my bike the next morning and it once again wouldn’t start! I tried push-starting it and got nowhere. Hmmm.
I went back today and gave it another try, with jumper cables and starter fluid, and still got nowhere. It was dark and rainy so I gave up for the time being. I’ll try again tomorrow; clearly there is something gunky going on in the carburetor, and I think I’ll take it over to Felony Flyers and have them fix whatever it is.
January 21, 2010
I saw this and thought of Adam: a proposal to rebuild Haiti using cargo shipping containers.
The idea that as a develÂoper, you should use your own products on a daily basis, even during development. This exposes you to all the weaknesses and flaws of the product, and makes you much better equipped to deliver a product that’s actually worth using.
But perhaps there’s a counter-argument that people seem to miss. If you use a lousy piece of software on a daily basis, you get used to it. You stop thinking about how it should be, and only consider how it is.
I’ve become less enthused about dogfooding over the years. At Real Software, doing as much of our work as possible in REALbasic seemed like a good idea, since it would give us all deep familiarity with our own product. In practice, though, the problems we faced while working on RB itself only sometimes resembled those our customers worried about. We were a small team with limited resources, and improving our efficiency was critical: so there was a constant temptation to prioritize the changes that we needed over the ones that would help our customers.
During my stint at Microsoft’s dev tools division, which has a long-established practice of dog-fooding, I met many people who were hired out of college and had never worked anywhere else. People referred to non-Microsoft tools and developer communities in ways that suggested they were foreign and little-understood. We collectively wasted countless hours dealing with buggy version control systems, antiquated test harnesses, byzantine scripting languages, unstable beta editors, endless system reinstalls, and the like, but the dogfooding policy was never questioned. I couldn’t stand it, but I think most people there were just used to it. They had learned each quirk one at a time, over years, and had developed work habits that insulated them from the pain.
Dogfooding may have short-term QA benefits, but it’s not worth the long-term cost. Productivity depends on concentration, and an unstable dev environment constantly knocks you off balance. The less frequently I have to stop thinking about my work and deal with some quirk of the toolset, the deeper I can get into the flow-state where the real work happens. Distract me too often and I simply won’t get anything done.
January 20, 2010
I’ve spent the evening finishing the top for Lesley. I made facings for the collar, front and back seams, and armholes using the red stretch knit fabric from the side panels, plus a layer of fusible interfacing. After topstitching the facings down and finishing the seams with bias tape, I had two halves of a top: time to join them. I put a row of eyelets down each side, front and back, then laced the halves together with elastic cord. The last time I made this top, I found that the lacing tended to shift around: the seam would pull close together around the middle, and spread apart top and bottom. I decided to help avoid that this time by running both cords through a bead at their intersection, hoping that the extra friction would keep the tension from shifting around. It’s all done now, save tying off the ends of the cords. It’s a simple design, but it was fun to put a lot of effort into the finish, and I am proud of the result.
A package from Sparkfun arrived today, containing a pair of three-axis accelerometers, a pair of mini Arduino boards, and a handful of RGB LEDs. These will become an LED glow-poi system for Ava; I’ll mount the electronics inside two pairs of acrylic hemispheres and attach a ball chain. I’m not exactly sure how I’m going to join the hemispheres to each other, but it’ll work out somehow.
January 14, 2010
Just ran across this essay, via Hacker News, and everything it says is true: “Poor, poor child. You have no idea – the letter I wish I could write to my former self, and have beamed at light-speed through some kind of vacuum tube and delivered at the precise moment when I finally decided to learn to program.”
The problem is that while you’ve uncovered a wonderful world that makes coding seem so approachable and fun, you’re unknowingly making a giant leap by thinking it’s somehow also easy.
This might not seem like a big deal, but it’s huge. Every single time (and this will happen constantly) you come across a concept that seems foreign or difficult or even just unintuitive, instead of thinking “It’s OK. Programming is hard.” you’re going to be thinking “This is supposed to be easy. What’s wrong with me? I must be stupid.” These feelings will keep you from seeking help or pushing through to discover why things work the way they do, and that is what’s stupid.
If I had to quibble with anything, it would be the comment about first languages. The first language you learn will influence the way you learn your next, of course, but every time you pick up a new tool, it stretches your overall model of computation. You’re not just learning a new language, but learning how to develop and reconcile models. It is hard to learn new ways of thinking about things, but that’s part of what you do as a programmer, and you aren’t going to get very far until you learn how to grasp and create abstractions.
A related essay I came across earlier today elaborates on the idea of time investment as the route to achievement. I Have No Talent:
It is true. I have no talent. What I do have is a lot of practice. And I am not talking about occasionally dabbling in Ruby on the weekends. I am talking about the kind of practice where I beat code that isn’t working into submission (though often times the code wins).
January 13, 2010
I’ve been jammed up against what feels like the same Radian problem for the last two weeks, but I’m finally making some headway. I’ve been going round in circles thinking about some of the central data structures, and the consequences ripple so far through the project that it’s hard to actually make any decisions. The slow pace is frustrating; I have to keep reminding myself that it’s OK if it doesn’t always come together quickly, as long as I keep pecking away at it.
Tonight I took a break from the computer and spent a few hours with Lesley. She came over after work with a sushi dinner, and then we chatted and caught up on life while I started my next sewing project. It’s a variation of something I made for myself a few years ago, and I think this rendition will look great on her. It’s a sleeveless, black velvet top, with stretch-knit side panels, which laces all the way up the front and down the back. The original was all black; this version has red side-panels and facings, and I’m using elastic cord for the lacing. I cut out and assembled the main panels tonight; there are many details left, but I’m happy to have the fit and general structure done.
January 10, 2010
Bummer. Bike won’t start. Probably the carbs are gummed up from sitting around for months. That was more work than I felt like dealing with today, so I’m back home intending to do some work on Radian.
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
December 18, 2009
New speakers
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
December 13, 2009
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
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
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:
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
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.