Inspired by a recent Lifehacker post, I wanted to write up one of my favorite hardware projects. (My less favorite hardware projects will also get written up…eventually.) Home automation is not cheap. The more robust solutions tend to cost $40-$100 per device or switch. However, most of what the average consumer really wants out of home automation can be done cheaply with off-the-shelf parts - security goes out the window, so this is great for lights and fans but not recommended for locks and alarms.
Your job consists of your manager, your peers, and your project. A rookie mistake is to focus on your project. Having a cool project won’t help you if you can’t get along with your peers. A great project that your manager can’t sell won’t get you promoted (and that great project might get canceled at any moment.) Having great peers takes the sting off of a terrible project; camaraderie is a powerful force.
I’m still a huge fan of Python. Fantastic library support, generally available everywhere, an excellent REPL, and a stable package manager. Python also tends towards being cleanly expressive - there’s a great story at Google about a candidate who asked to write in pseudo-code and produced valid Python. Python is also old enough to have great Win32 bindings, Microsoft Excel bindings, and I’ve even managed to get it to speak Cocoa on occasion.
I’ve been lucky enough to work for a wide spectrum of companies. Enough of my friends have done double-takes (“You worked for Intel? Really? When?”) that I present here a quick overview: Local, 10-developer, software house. Long since acquired. Intel, in a research group. Intel, supporting a fab group. 3COM, right before the HP buyout. Microsoft, from Vista to just before 8. Amazon, during the Kindle Fire release. Google. It’s with a little bit of authority that I can say that Steve Yegge was right in 2008.
First, a question I will answer later. This post is already long enough. Where should I work? Productive questions are about a journey and a destination. Why am I waiting for rebuilds? How many times am I re-entering my password? Where is my time going? Non-productive questions are subtle, or not subtle, endless tasks. How should I structure my project? Should I use vi or emacs? How can I generate automatic time reports for my manager?
Ted Dziuba wrote a fantastic post (on his old blog, archived here) on the merits of make. Go and take a look if you like; specifically, Makefile. 92 lines of Makefile reliably does the following, if and only if it’s necessary: Download and install the various tools needed Build a custom icon font Pull down the latest bits of CSS that power the blog Regenerate the various content pages Combine and compress the CSS Compact the HTML Pre-gzip everything - NFSN doesn’t support on-the-fly compression.
Thomas Bouldin is a bright guy who should write more. He is likely too busy to do so. Ted Dziuba consistently writes great opinion pieces. His older posts are also worth reading. Joel Sposky is something of a titan. Jeff Atwood is also something of a titan. Onethingwell has given me a giant list of interesting software to try. Some of it has made it in to my workflow.
I have a giant (200-line) list of requirements for this blog. I’ve thrown the whole damn thing out. I might care about SEO, analytics, or OpenGraph in the future. Iterations I’ve gone through: 1. Custom Bootstrap solution: discarded because every Bootstrap site looks the same. 2. Custom Foundation solution: I love Zurb. They are great people, and I was fortunate to get to talk to them a bit while at Amazon.
Working remotely means I can rely on the following things: My laptop Seriously. Nothing puts more pressure on your toolchain and methods than moving from desk to desk, hotel to hotel, and a series of shoddy internet connections. (I miss my Das Keyboard and high-dpi mouse something fierce.) I have a nice VM floating in a datacenter to work from - and in theory I can VNC/NX to it - but that’s a sucker’s game.
I’ve tried to start this blog at least four times. Reasons I’ve failed are numerous. Nothing to write about; working a low-level Microsoft job does not lead to an interesting life. Nothing to write about and no time to do it in; working at Amazon is a great way to get a crash course in crash courses. Too much writing going on already; any serious job hunt involves, or should involve, a lot of high-quality writing.