April 5, 2016

Geez, What Have I Been Doing?

I just looked at my blog and I see that I haven't posted any new content for a while. Sorry about that, folks. (That is, the two of you who read my blog... hi, mom!)

There's a lot going on in life right now, and I haven't had the time to dabble as much as I would like. However, there are a few things in the pipeline.

First, I'm working on a 'Magic Mirror' project. I took the seminal work by Michael Teeuw and I've cranked it up to 11 (maybe even 12). With the newly-introduced Raspberry Pi 3 that includes Wi-Fi, I'm excited about the project. Currently, I'm working on code to handle recurring calendar events, which is a royal PITA. iCal file format data can have date/time information presented in a variety of formats, some of which require parsing out timezone data, and that bugaboo of all time calculations: determining whether a time is in Daylight Savings Time or not. So that's on the horizon.

I also recently became (re-) interested in Ray Wilson's musicfromouterspace.com website. He has a variety of analog noisemaker circuits posted on his site and I've been dreaming of building one for a while. They just look like a whole lot of fun! I wanted to do this when my kids were 3 and 4 years old and didn't get around to it. Well, last night I started laying out a circuit board for the "Weird Sound Generator" using surface mount components. I'm going to bolt on an audio amplifier and a headphone jack. Maybe I'll also bolt on some of his other circuits, such as his Echo Rockit. I'm setting a self-imposed deadline of ordering parts this weekend so that I have something to present to y'all soon, even if analog sound synth isn't exactly the digital stuff that I really enjoy doing. These projects just look like so much fun, and they look like they can be built quickly, and hey-- what's not to like about a front panel with a dozen or so potentiometers and as many toggle switches? I'd also like to add a digital circuit that takes an ADC, a microcontroller, and a USB port and stores the generated sounds on a USB thumb drive. (And, dare I dream, build on that to make a multitrack recorder?) Yes, I know that putting a USB port on an analog synth crosses the line into 'unholy abomination,' but hey, I'm just that kind of guy!

I'm also toying with the idea of taking many of the analog ideas on Ray's site and creating a software synth in Windows that allows you to drag and drop analog blocks like VCOs, LFOs, filters, etc and virtually connect them in any arrangement that you'd like.

I've also long dreamt of building a Yamaha DX7 clone in a microcontroller. That's still an idea but I have no immediate plans to work on it.

I'd still like to participate in the SparkFun AVC, but that's going to take a serious time commitment, and I'm just not sure that I'm going to be able to spare that kind of time. I've applied to two graduate degree programs recently and hope to be back in school soon.

Oh yeah-- I did install an Android based head unit to replace my car's stereo, and that was kind of fun, but so many parts of it are vehicle-specific that it didn't seem worthy of a writeup.

So, nothing to report right now, but by posting a promise to you to have something soon, I'm motivating myself to heat up the soldering iron.

January 12, 2015

Thoughts on Technical Interviews

This morning, I was invited to be a part of an interview panel for some candidates for openings we have in my workplace. There were five of us conducting an interview for technical positions. I've done this enough and seen enough facepalms in these interviews that I want to pass on some basic advice. (more…)

May 22, 2014

Udacity Course Review: Artificial Intelligence for Robotics

A couple of months ago, while doing research for the Sparkfun AVC, I posed to the DIYRovers Google Group a question about the Kalman filter. I had discovered through reading that the Kalman filter is a popular algorithm in robotics and the more I read the more it seemed that the Kalman filter is the answer to just about any robotics problem out there. Unfortunately, I was unable to find any good learning resources for this algorithm that didn't require an undergraduate degree in mathematics.

One of the members of the group suggested that a good resource for learning the Kalman filter is the Udacity course "Artificial Intelligence for Robotics."

Udacity, for those who don't know, is a MOOC: A Massively Open Online Courseware site. Udacity hosts online classes that anyone can take free of charge. Udacity is a for-profit educational organization founded by Sebastian Thrun, David Stavens, and Mike Sokolsky. It is the outgrowth of free computer science classes offered in 2011 through Stanford University, where Sebastian is a professor. I'll talk about the for-profit part in a few paragraphs.

So, at the encouragement of another AVC'er, I started taking the course.

The course wasn't at all what I expected. The primary focus of the course is how to deal with uncertainty in robotics applications. For instance, a sensor might be noisy, or a command to move the robot might be affected by wheel slip. The entire course is an introduction to various methods and algorithms (including the Kalman filter) that can be used to deal with this type of uncertainty.

The course starts off with simple one-dimensional examples and considers noise and probability. That is, in the presence of noisy sensors and noisy movement commands, the robot cannot have absolute knowledge of its position. Instead, the course teaches how to track the probability of the robot being in any particular location, and the reliability of any probabilistic guess as to the robot's position.

The course advances into more complex algorithms and into two-dimensional examples. Bayes' Theorem is introduced and conditional probabilities are used. The course proceeds on to the Kalman filter, particle filters, the A* and other search algorithms, PID control, and SLAM algorithms.

The course is taught by Sebastian Thrun. Sebastian is a professor at Stanford, and was a member of the DARPA Grand Challenge  winning team and a member of Google's self-driving car research team. Clearly, the guy has experience in robotics to be teaching this course. In fact, Sebastian uses his experiences with these projects to bring real-world examples to his lectures. This brings home the point that these algorithms are practical and applicable to real-world problems.

The course material proceeds logically and builds in sequential steps. Lessons are broken into short videos, typically 2-6 minutes, followed by a quiz, which is typically a Python programming exercise or a multiple choice question. In most cases, a skeleton Python program is given and the student must write a function to implement the concept just explained in the lecture. I found that the exercises complement the lectures quite well. Sebastian is an outstanding instructor, and the material was paced perfectly for me. The Python programming is done in an in-browser editor and is graded by an autograder in the course engine. Feedback on the exercises is immediate.

I found very few downsides with this class. I was a little disappointed that the Kalman filter wasn't discussed in as much depth as I would have liked. Also, the subtitles on many of the videos are very poor; whoever created the subtitles clearly was not familiar with the material. That combined with Sebastian's German accent make for some truly interesting subtitles.

Be warned that this is not an introductory course! This is the exact same course that Georgia Tech uses in its Online Master of Science in Computer Science program, and I assure you that this course really is graduate level coursework. You'll need to have a semester or two of college level statistics, exposure to linear algebra, and decent programming skills to complete this course. Having said that, it's been over 20 years since I've taken linear algebra and I did just fine.

You can take the course for free, or you can pay $150 a month to get a "certificate" for passing the course. The material is the same in both cases. The difference is that with the paid course you have access to "coaches" and are required to do a final project. As luck would have it, my employer amended our tuition reimbursement program as I was halfway through doing this course for free, which allowed me to get reimbursed for taking the paid version of the course. That was a no-brainer and I immediately signed up for the paid version of the course.

Before my first payment was due, my assigned coach scheduled a Google Hangouts videoconference to ensure that I had the necessary academic background to be successful in the course.

The entire coaching staff is available to answer questions via instant messaging or email. They respond to instant messages immediately in my experience.

The coaching staff was, in a word, fantastic. I was (and still am) simply blown away by these guys. The coaches not only understand the course material, they understand it well, and they understand the broader context of the course material as it applies to real world problems. I kind of think of the coaches as the Teaching Assistants that I had in some of my undergraduate courses at university. I can say that if the TA's in my undergrad career had been as amazing as the Udacity coaches, college would have been a much different experience for me. I cannot say enough good things about the Udacity coaching staff. I don't know where they find these people, or how much they're paid, but they are far and away the best asset for this course.

For example, when I contacted the coaches about a question I had on one of the exercises for the Final Project, the coach looked at my code and quickly observed that my code ran in n^2 time, when, with a little modification it could be made to run in linear n time. I did know this about my code before asking for help, but I was impressed that the coach pointed this out to me so quickly. And that observation had nothing to do with the question for which I was contacting the coaches for help!

It is not necessary to complete all of the lectures or exercises to 'pass' the course and get a certificate. Only completing the final project is required. The final project includes writing some code and writing a short narrative explaining certain features of your code and why you made certain design decisions. The first time I submitted my project it was kicked back to me because I had made some arbitrary decisions without explaining my reasoning in the code comments. The graders are thorough!

In summary, this course was an outstanding experience for me. I probably wouldn't have paid for this course if my employer didn't offer reimbursement, but knowing now what I know about the experience, it would totally have been worth it to pay this out of my own pocket.

Highly recommended.

April 7, 2014

Unholy Combinations

I just feel so.... dirty running Python on Windows. Like I'm going against God's Natural Law or something.

OK, I feel better now that I have that off my chest. Back to work.

January 26, 2013


The amount of spam comments that even an obscure blog like this one receives is unbelievable. I've changed to the "Resisty" CAPTCHA by Adafruit to see if it makes a difference in the volume of spam I get. The akismet anti-spam service is a godsend!

September 22, 2012

WordPress, CodeColorer, and Leading Whitespace

If you've ever hosted a geek-oriented blog, you're familiar with this problem. You have some code that you want to share with your audience. You copy the nicely formatted code from your source file, you paste it into your blog, and when you preview your post, your code looks like mud. HTML in general, and the WordPress post editor in particular, don't play nice with leading spaces in text. Text that was nicely formatted before it was pasted into a blog post ends up having all the lines mashed up against the left margin in an barely readable mess.

I searched for a solution to this problem and found that there really is no good solution. So I decided to invent my own. It's a hack, but it's a solution. Here's what I do to paste code into a WordPress blog entry, and have CodeColorer display it as I intended:

  1. Install the CodeColorer plug-in on your WordPress site
  2. Edit the source code for the plug-in to change a special character (I use ) into the escaped HTML string  
  3. When you want to put code into a post, copy it from your source file into a text editor. Replace leading spaces with your special character. Copy the resulting text and paste it into your WordPress post
  4. WordPress won't strip out the leading spaces in your code because, well, they're not spaces any more
  5. When your audience views your post, CodeColorer will take all your special characters and send them to the web browser as non-breaking spaces
  6. The web browser will display the leading spaces as you intended

Now, I admitted up front that this is a hack of a solution. But... and this is the key point... it works!

It's hard to argue with success. Here's how to do it. (more…)

May 16, 2012

My Dream for my Sons

As I've mentioned here before, I'm the father of two young boys. Today, they're 3 and 4 years old, so not quite old enough to participate in making/hacking.

But that's going to change in a hurry. In fact, just yesterday my older son asked me to help him build some birdhouses. Now, I don't know why my son wants to build birdhouses (I'm assuming he saw it in one of the children's shows he watches), but you'd better believe that my son and I are going to build birdhouses together. And soon.

My dad always had a garage full of tools. He didn't often do much with them, but they were there. And he taught me how to use them. I worked mainly with wood, but as far back as I can remember, I was always confident that if I wanted something that could be made of wood, dad and I could make it.

I've done some reading recently that makes me think that this is not typical in today's era. I read in Make magazine today that a college professor teaching a freshman level engineering class this year asked how many of his students had ever used a drill press. Nobody raised their hands.


That absolutely shocks me! I can't imagine not knowing how to use a drill press. And I can't imagine raising my sons to not know how to use a drill press.

Though dad had plenty of woodworking tools, that was about the only medium that I felt comfortable working with. My father-in-law is planning on building himself a "Bucket T" car. As a teenager, if you'd talked to me about building a car, I would have thought that you needed a car factory to build a car. You know, only Ford or Chrysler or GM can do that kind of thing.

One of the burning desires I have is that I want my kids to grow up believing that they can make anything. I don't want their imaginations or ambitions to be crippled by thinking that something can't be done. And that is a large part of why I'm finally going to build the workshop I promised myself this time last year. (It's not the only reason, but it's an important one.)

Then I'm going to have to stock it with tools. I have some basic woodworking tools. I have a stick welder. I'll need to add a lathe/mill and learn to use them so that I can teach my kids. I'll have to pick up fiberglass skills somewhere. I'm going to have to build that CNC router I keep dreaming about. And of course add a 3D printer and a laser cutter.

When my son is 14 and comes to me with a great idea of building a go-cart with a lawn mower engine, my son and I are going to be able to head out to the garage and build one. He's not going to be left with a dream and no opportunity to realize it. We may fail in building the go-cart, but we'll have fun trying, and we'll learn something in the process.

He's going to go to high school one day (or maybe even junior high) and show off the Stirling engine that he built on dad's lathe. When the physics teacher assigns a group project to his class to build some contraption, his project group is going to meet at our house, because his dad has the workshop and the tools needed to build the best contraption in the physics class competition.

That's what I want to provide to my children. And that's why I need a garage workshop.

December 28, 2011

Sous Vide Progress Report

I know, I know, it's been a while.

The sous vide controller project is not dead. I have prototyped my circuit and have done a quick test. I have several WordPress articles queued up for publication but I have to make some final tweaks and take some photographs before I can publish them. Now that we're back from a family vacation, the wife is healthy, and Christmas is over, I'm hoping I can clear out some space in the garage to set up some example circuits and take some pics of the 'scope and get those articles published.

April 25, 2011

Site Rendering Issues in Internet Explorer

I have received comments that www.thehackerworkshop.com is not rendering correctly for some users running Internet Explorer.

If you're seeing rendering issues, please send a screenshot of the problem to matthew@thehackerworkshop.com. I would like to see what the issue looks like so I can try to solve it.


April 19, 2011

The Best Laid Plans…

There's a Hebrew expression that, if I'm not mistaken, translates to, "If you want to make God laugh, tell him your plans."

Well, things haven't exactly gone according to plan lately. My plans were to create this website and blog in obscurity for a while, build a workshop for electronics work in my garage, do some hardware projects, and then when I had something to show, try to get some publicity and attention to my site.

I've had some comments on some of my posts, which I find very flattering. I have deliberately not made any attempt to get any attention, so for those of you who have discovered the blog and are reading: thank you. I wasn't expecting an audience this early. I am a maker at heart, but haven't found the time to pursue this passion of mine. Starting the website was the first step in encouraging myself to get back on this path again.

I have talked to the city permit office about building a workshop in my garage. The Finance Committee Supermodel Wife has tentatively given me permission to build a man cave out there with some money from a bonus that was paid at work. I'd like to start that project soon. I had a contractor bid that was way too high so I'll be doing the work myself. I'm currently healing from minor surgery on my legs so that can't start for a little while yet. (That, and the fact that my garage is as messy as yours and I'd have to do a lot of cleaning and organizing before starting construction.)

Once the workshop is built I have a few ideas for projects that I'd like to crank out (between work, kids, wife, and other stuff.) I'll do some detailed posts about the music box project I did with the TI Launchpad; I intend to make it a beginner friendly tutorial series. I would like to build the Weird Sound Generator from the Music From Outer Space website, then use that as a springboard to digital audio projects. I participated in the Gameduino launch on Kickstarter and would like to do a project with that hardware. And I'd like to design a low cost 802.15.4 wireless platform and get some hobbyist activity around that. I also want to start on a CNC router and laser cutter.

Anyway, those are my thoughts and what I hope to have in the future for you. I wish I could say all this will be happening real soon, but it's going to be a few weeks, at least, before I have much original content.

I am a maker at heart, but haven't found the time to pursue this passion of mine. Starting the website was the first step in encouraging me to get back on this path again.