Illuminated Christmas Star

In a fit of optimism, I pre-ordered a Glowforge laser cutter in 2015, but it didn’t actually arrive until late 2017. I’d have been more excited about it shipping if I hadn’t been out of town for a family funeral when they delivered it. The end of 2017 was a giant mess, and I didn’t really get much use out of the Glowforge during most of 2018.

For Christmas 2018, my wife and I decided that we really wanted to try to make presents for as many people as possible, and to encourage our kids (18 and 15 at the time) to do the same. The first thing I decided to build was a laser-cut led-lit acrylic Christmas tree topper.

Christmas Star

I only made a couple of these, and I wasn’t looking to turn it into an electronics project, just a design and learning-to-work-with-acrylic project, so I ended up buying the LEDs from Amazon. I bought a pair of LED shelf lighting kits that seemed to work well enough with a small amount of dismantling. It would have been cheaper to buy some LED light strip and wire up a power supply, but it also would have been more work, and by the time I added RGB color changing and a remote it probably would have cost 2x what buying the pre-assembled kit cost.

Mind you, I probably could have bought everything for 1/3rd the price off of Aliexpress if I’d been willing to spend a few hours shopping and wait for a few weeks for parts to arrive. Maybe next year.

I ended up using 14“light guide acrylic” from Inventables, but any 14” or 6mm acrylic would probably work just fine.

Cutting it out

If anyone’s interested, here’s my design. I’m not going to claim that it’s a great example of how to use Fusion 360–this is one of the first things that I ever created in it–but it worked well enough.

Here’s a video of the engraving process:

Resurrecting My Blog

Back in the mists of time (oh, say, 2003-2010), I was a semi-prolific blogger. I had a reasonably public presence as an open source programmer and needed a way to announce new releases of software, but also to comment on interesting things that I learned or just to rant or vent.

Over time, the amount of time that I spent on public non-work computer work shrank until there was really no point in updating a blog, and indeed not really even any time to keep it up to date and running. For a while I was directly managing ~16 people in two teams at work, and the last thing I wanted to do when I finally got away from work was to argue with people over the Internet for free.

Eventually I’d finally had one emergency Rails security update too many and turned my blog down. I figured I’d get back to fix it in a month or two.

I don’t even remember what year that was now.

Over the past year, I’ve had an increasing number of things that I want to share on the Internet, for the general use of whoever shows up searching for them. Things that don’t fit well into Facebook, or Google+ (RIP), or onto specific forums. So I decided to see what it’d take to make my blog work again.

I’d dreamed for years of spending a month or so writing code for it in Go; there are a few specific things that I’d love to implement that I haven’t seen done before, which I think could prove to be very interesting and useful to the 3 people left who still run their own blog sites.

So, for now, I’m giving Hugo a shot. It’s a a Go-based content management engine. It doesn’t have a database, it doesn’t do comments, it just reads content out of a directory and then writes out a pile of HTML files that can be served via a normal web server. It includes a couple plugins for adding comments via Disqus and friends, if you’re so inclined. I’m still trying to decide if I’m inclined or not. Surprisingly, getting data out of my old Typo blog and into Hugo was pretty simple. The hard part was recovering the ancient Postgres database the Typo used; once I’d managed to restore it, writing something to dump articles out of it into a format that Hugo could read only took a few minutes, followed by an hour or so to cleanup things like broken plugins and weird filter issues. It looks like links to Flickr images are still broken, but just about everything else should work, including inline code formatting, which turned out to be surprisingly easy.

My favorite hack

Something reminded me recently of project that I worked on around 10 years ago. I was a simple, clean solution to a problem that had remained unsolved for over a year. It was also one of the most horrible hacks that I’ve ever put into production.

At the time, I was working for a startup that was suffering from explosive growth. We’d began rolling out new sales and engineering offices all over the US faster than we could build the infrastructure that we needed to manage the offices. We built each office with two small Linux servers; one acted as a file server (with Samba) and the other did email for the office. The problem that we were facing is that each office was completely separate from the others–we had technical and political issues that made rolling out a VPN very difficult, so there was no easy way for salespeople to share documents between offices other than email. Which they did with great abandon, and it was killing our servers in larger offices.

The Great And Glorious VPN Project had tried to fix the company-wide filesharing problem repeatedly without success. There were too many requirements, too little money, and the technology wasn’t mature enough. I assume that they managed to deploy something eventually, but not for years after I left the place.

So, we needed a solution for distributed file sharing. It needed to be relatively quick, compatible with Linux and Windows computers, encrypted when passing over the Internet at large, able to deal with 100+ ms latencies between servers, and ideally not require a full mesh, because we were adding 1-2 new offices per month and having to reconfigure all of them every time would have killed us.

We played around with distributed filesystems like Coda and AFS. None of them fit our needs. We considered some sort of read-only replication with rsync copying each office’s content to other locations, but it was too messy to explain to people. We considered deploying Novell Netware (into a Linux shop) just for this, but it wouldn’t have helped enough. We would have rolled out Windows servers, but Microsoft didn’t have anything useful at the time. We looked at other commercial solutions, but nothing that we found was more than a partial solution.

Until one day, when I was sitting in a meeting about some other topic and the solution just popped into my head fully formed. It was really, really evil, and it would all Just Work. Either that, or it wouldn’t work at all, and it’d only take a few minutes to determine the answer. I think I excused myself (“I think I just solved the file sharing problem”) and walked out in the middle of the meeting to test it.

Remember, each office had 2 servers: one acting as a file server, running Samba, the other a mail server, running sendmail and an IMAP server. Here’s all it took: I configured Samba on each mail server, and had it join the same workgroup (I don’t think we were using domains yet) as the existing file server. So each Windows computer now saw two Samba file servers instead of one. The Samba file server software actually consists of two different programs: nmbd, which handles naming and network browsing, and smbd, which actually serves files. I fired up nmbd on each mail server, but instead of running smbd, I ran stunnel and had it encrypt any traffic that was headed to smbd and ship it off to a single file server in our headquarters, where it was decrypted and handed off to a real smbd process.

So, any Windows computer would browse the network and see two servers. One named something like “” and the other named something like “global-nfs”. When they tried to connect to “global-nfs,” their packets were shipped off to a completely different computer in a different city. And everything just worked. It was dead simple. We’d been looking and spending hundreds of thousands of dollars to solve this problem and having to install new hardware in every office; in the end we spent a couple thousand on a single new file server and rolled it all out overnight with a minor software change.

The ugly part is that Samba shares state between nmbd and smbd, and none of that was actually being shared here. You aren’t supposed to run the two processes separately. It gets confused. Except it doesn’t actually hurt anything in this case. None of the problems actually impact anything that we cared about.

While I was at it, I used the same mechanism to standardize printing across the company, but that’s a story for another day.

Pancakes, with a side-order of problem-solving

So, lo and behold, it’s Saturday morning. It’s the day before Mother’s Day, and we’re going to be driving most of the day tomorrow, so it seemed like the perfect time to cook something a bit special for breakfast. After thinking about it a bit, I decided that what I really wanted was German Pancakes.

That posed a bit of a problem. You see, German Pancakes want to be cooked in the oven. And we’re in the middle of remodeling.

Our Kitchen, being remodeled

The oven goes about where the white bucket is sitting. Until the remodel is done, we’re stuck cooking with just an induction pad and a convection microwave. There’s no way the microwave will heat up to 450°, which is what the recipe calls for. What’s a hungry programmer to do? Why, improvise, of course. There’s one more cooking appliance available, although it’s not widely used for baking pancakes:

Our gas grill

Technically, there’s no reason you can’t bake in an outdoor gas grill, but getting the temperature control right is tricky. I let it heat up for 15 minutes, and then tweaked the settings to get it to stay around 450°. Then I put a stainless steel frying pan onto the grill (all of the cast iron is packed up for now) and let it heat up for another 10m, and checked the temperature:

Looks like it’ll hold 450° just fine. The recipe calls for 20-25m of cooking time, but that’s always seemed high to me; our old oven usually took 15-20m. After 17m I checked the pancake, and it looked perfect:

There’s nothing like grilled pancake for breakfast, now is there?

I need iPad blinders

These iPad reviews and App Store links are starting to get hazardous to my (financial) health. I mean, I really don’t need one. I have 2 Nexus One phones in my pocket, a Kindle DX, and I rarely go anywhere without a Macbook Pro. The biggest thing that I’d use a small tablet for would be to-do/calendar management, and I don’t think the iPad is particularly good at that–it’s not really possible to integrate information from multiple silos (Calendar, To-Do, Email, etc) given the iPhone/iPad architecture. My general opinion hasn’t changed much since the last time I wrote about it.

I’m not convinced that it matters though. Much like Stross, I have a low saving throw versus Shiny!

iPad: meh

Back in 2004 or so, I desperately wanted a 8-10” tablet from Apple. Something that would let me browse the web and check my mail while I was away from my desk, without forcing me to lug my laptop around. Something that would let me play with new ideas over lunch. Something that could use to build cool stuff.

Somewhere along the way, I decided that it was never going to happen. There just wasn’t enough of a market for it, and the form-factor requires UI that is drastically different from desktop OS X. They’d have to start from the ground up to build it. It wasn’t going to happen.

So, every 6 months or so, when the Apple Tablet rumor popped back up, I just ignored them–they were obviously bunk–and they went away on their own.

That is, until a few months ago, when the rumors shifted dramatically, and it became clear that Apple really was building a tablet. So yesterday morning, I was watching 3 live streams of the launch to see what magical thing Steve and company were working on. And now the rumors and the hype have cleared, and we’re left holding the iPad. Which is more or less exactly what I was looking for in 2004.

And I’m amazed to discover that I don’t want one. Not now, not in 2010.

It’s not like I’m immune to iProducts. I mean, I was literally in a car, on the way to the Apple store halfway through the iPhone announcement. We had to turn around when he announced that it wasn’t going to ship for 6 months. As a family, we’ve bought 9 iPods and iPhones over the years, including the very first model.

So why doesn’t the iPad work for me?

  1. It doesn’t do anything that I can’t already do. I have a laptop. I have a phone. I have a Kindle. The iPad can’t replace the phone or the laptop, and my Kindle doesn’t need replaced right now. Sure, it’s a better web-browsing platform than the phone, but not really all that much better.
  2. It’s too closed. I switched from an iPhone 3GS to a Nexus One a month and a half ago, and I don’t really want to go back. The iPhone is prettier, and Apple has more useful apps, but the N1 is much more useful for me. It has a dramatically better interface to Gmail and Google Calendar. It multitasks, so IM works right. When the browser is too slow loading a page, I can go check my mail and then flip back to check on the page loading later. Random third-party apps sync in the background on their own. Apps can extend the core OS experience trivially; install a Flickr uploading app, and the ‘Share’ button in the existing camera app suddenly knows how to upload to Flickr. Heck, I even replaced the default home page/app browser with Slidescreen, just because it fits what I want out of my phone better. None of this is possible with the iPhone, and none of it will be possible with the iPad.
  3. I think this is really the killer for me: the iPad is really just a media consumption device. I agree with almost everything Tim Bray has to say on the topic–the iPad is 98% oriented towards consuming existing content. Which is nice, sometimes. I mean, that’s all the Kindle is good for, and I love my Kindle. But it’s not what I want in a portable, always-with-me computer.

So what do I want in tablet-like device, or really any mobile computer, PDA, tablet, or phone? I want it to make my life better in some meaningful way. I want to build things with it. I want to look at how I do things in my life and create tools to make myself more powerful. And I don’t believe I can do that with the iPhone or iPad. They’re too tied to Steve’s View Of The World, and I’m not Steve. Almost everything that I’d like to have a device like this automate for me requires some sort of background processing, syncing with services online, and the iPad can’t do any of that right now. Maybe that’ll change in the future. Maybe iPhone/iPad OS 4.0 will fix that. Maybe the second-generation iPad will be able to do some of that. Maybe they’ll be able to convince me to fork over $100 just to write software for my own device. Maybe.

For now, though, I’m planning on sticking with my Nexus One, and I’ll probably keep an eye open for mid-sized Android tablets with high resolution screens. Android absolutely lacks the polish and shine of Apple’s products, but it’s moving amazingly fast, and it finally seems to be Good Enough for me. It’s reached a sort of critical mass, and it’s developing into a viable ecosystem of its own. At this point, the only thing that I really miss from my iPhone is the Kindle reader app, and I assume that Amazon is working on one for Android. Android’s not perfect, but it’s getting quite good. And while it lacks Apple’s polish and shine, it doesn’t have the same shrink-wrapped, pre-packaged, plastic feeling that so many interactions with Apple have these days.

Finally signed up for Facebook

I’m currently filled with self-loathing, as I failed in my attempt to be the last person in North America without a Facebook account. It’s still entirely unclear why I’d want to share a single social network with my grandmother, my neices’ friends, and a bunch of current and former co-workers. I mean, really–what could I possibly say that’s appropriate and interesting for all of them?


Around the World in 365 Days

I know that I’ve been on the road a lot lately, but TripIt just made it a bit more real when it told me that I’ve travelled over 21,000 miles so far this year. The Earth’s circumference seems to be around 24,900 miles, so I’m only 3900 miles short of making a round-the-world trip this year. And that’s without the 3 trips left on my travel schedule–Mexico next week, Vegas the week after, and Dublin a few weeks after that. It looks like I’m going to end up covering around 30,000 miles and will have spent over 60 days on the road in total.

And, frankly, I doubt that next year will be any different. If anything, it might be busier.

New Stuff Day

It looks like today’s shaping up to be really a really entertaining day for product announcements.

First, Canon just announced the 1D mk IV, which may finally close the lead that Nikon opened with the D3 a couple years ago. The big news with the mk IV is ISO 100-12800, with the ability to go up to ISO 102,400 in a pinch, which is more or less the same as the D3s that Nikon announced last week. If I was in the market for a new camera (and I’m not completely convinced that I’m not), the mk IV is interesting. It doesn’t have a full-frame sensor, but in all other respects it looks just about perfect.

Next, Apple’s due to announce a boatload of stuff at any minute. Current rumors suggest new iMacs, a new Mini, a new Airport base station (with multiple antennas, and maybe multiple radios), a new mouse with iPhone-like touch scroller, and some sort of desktop touchpad.

Finally, for some reason Barnes and Noble decided that today’d be the perfect quiet news day to get loads of press coverage for their new ebook reader. We’ll see how that works for them.

New iPhone Time

I wasn’t exactly one of the first people in line to buy an iPhone when they first came out, but I did own and use a first-generation iPhone for about a year and a half. It was a great little phone, but 3 things bugged me:

  • It’s slow. Oh, man, so slow. Apps open slowly. Things download slowly.
  • It doesn’t have all that much storage space. 8 GB just isn’t enough. It was always full.
  • The camera sucked.

Earlier this week, I gave in and bought a shiny new iPhone 3GS. So far I’m really happy. It was cheaper than the first-generation iPhone was, and the camera seems better. Plus the reception is slightly better in my new office. And it’s actually kind of zippy, while the old iPhone had felt sluggish since I upgraded it to 2.0 or so.

I’m headed off to New York next week, and I hate dragging a real camera along on business trips, so I’ll see if the 3GS is enough to make me happy on that front.