Initial release of check_projects

I wrote a tool for checking project directories.  It checks for a variety of things.

Typical usage often looks like this:

check_projects -d /foo/bar/baz

which would check /foo/bar/baz for the following:

  • a non-empty file in /foo/bar/baz with a name that starts with README
  • a non-empty file in /foo/bar/baz with a name that starts with LICENSE
  • /foo/bar/baz being in a git repository
  • /foo/bar/baz’s git repository having an empty stash
  • /foo/bar/baz’s git repository having remotes
  • /foo/bar/baz’s git repository having no uncommitted changes
  • /foo/bar/baz’s git repository having no unpushed commits

I’m definitely open to other checks and other version control systems. Let me know if there’s something you’re interested in.

check_projects seems to work for me, but please do not assume it works perfectly. If you’re using it for something critical, take a look at the code or let me know.

It’s written in Python. You can download it or take a closer look at

Now that we’re done with the business-y intro, the human side.

Even though I’ve been seriously programming in Python since 2004 or so, this was the first project I’ve ever uploaded to PyPI.  (You can see it at This is pretty cool–it means that you Python programmers can just pip install check_project!

Second, if you are pretty sure you know you need something like this, but you need help installing this, let me know.

Third, if you use this and like it at all, please let me know. In 2015, many programs are still written by human meatbags, and we appreciate knowing our work is used and is helping someone.

Uncluttering with a Closet Workbench

(The photos are located at Adam’s Workbench)

I live in a pretty cool apartment building in south Minneapolis. While I’m lucky enough to have room to use a second bedroom as an office, the office doesn’t have enough space for a workbench. Even if it did have enough space for a workbench, I wouldn’t be able to keep work in progress on it without the room getting too cluttered. So I’m stuck hauling out a box labeled “Soldering Stuff” to the kitchen, constantly fearful of damaging the the kitchen table. I’m pretty handy with a soldering iron, but hey, fear is the mindkiller. I clean up after myself pretty well, but any stray lead solder bits that found themselves in a digestive tract would be dangerous.

When I lived in a 13×13 dorm room with a roommate, I used a lab bench I made from a melamine shelf on a pair of plastic saw horses. This was cheap, and fit under my bed when it wasn’t being used. The melamine held up well to solder burns and really added to the work surface. Once again, however, the bench needed to be put away or the room was unusable for anything else.

The time cost of setting up and breaking down an electronics workbench has been so high it had essentially eliminated my hardware tinkering–until now.

The office closet contained a half-height chrome wire shelfing unit, purchased at Target shortly after we moved in. It held around twenty clear plastic boxes, each about the size of a shoe box. These were labeled, and contained computer parts, electronics, and tools. Next to this was a toolbox, a tackle box I had already hacked to carry solderless breadboards and their projects, and a bunch of empty space.

Right half of closet with wire shelfing unit and plastic boxes

I figured I could put a table in this space, use some clip-on lights as task and background lighting, and have a pretty functional work area. As long as the table didn’t stick out, I figured I would be able to close the sliding doors. With this, I would finally be able to have a workspace I could keep a project in progress on.

After measuring the space (33″ x 25″ x 65″), my fianceé found the Galant table at Ikea. It came with a melamine finish and fit inside the space perfectly.

While at Ikea, I grabbed a power strip with an on-off switch. Another department store had reasonably priced whiteboards. After I hung the whiteboard on the back of the closet and ziptied the power strip to the side of the wire rack, the workspace was complete.


Well, almost complete. I printed out a few pictures (1, 2) of everyone’s favorite DIY science heroes, Adam Savage and Jamie Hyneman of Mythbusters and stickytacked them to the wall.

I now have a pretty functional work bench that fits inside the closet of my apartment. I wouldn’t have thought such a tight fit would have produced the nice results they did, but I’m pretty impressed. I can just open the door, roll my office chair over, and work on my very own bench. When I’m done, I can close the door and put my chair back at my desk.

My favorite part that I didn’t anticipate? My soldering iron is much less of a hassle when the cord is out of the way, over my head, looped over the closet bar.

I’ve got more photos at the photoset Adam’s Workbench.


What tools are my favorite? Oh, I replaced my Radio Shack iron with a $45 Weller, and am amazed at how much more I solder things when I don’t have to wait 10 minutes for it to heat up. I also got a Panavise Jr. for Christmas (Thanks, Mom!) and it’s a dream for soldering to boards, because its so easy to flip the board over.

Gregarius Sticky Post Exporter

The project page is located at

I use Gregarius for my feed aggregator and reader. I’ve had a busy semester, and have marked close to 2000 items as “sticky” so I can read them when I have more time. I don’t like the built-in “Browse Sticky” functionality, and would prefer something basic, but flat. I want to be able to save it, and use it to check off what I’ve read in my massive backlog of items.

Gregarius Sticky Exporter

I waded through the PHP and SQL, and talked with Matthew a bit, and came up with a little .php file.

You can download it at

To install, download the zip, extract it, put your database information in, and upload it to your webhost. Hit the page with your web browser, and it should generate the list. It doesn’t modify your database at all.

It doesn’t contain all the information in the tables, just the title, the url, and the body of each feed. The title is linked to the url, and the body is displayed after the titles. If you’re interested in something extra in your exports, feel free to contact me.

HOWTO: emulate a TI-89 in Linux using Wine

I was able to get a TI-89 on my desktop fairly painlessly using Wine. Years ago, I owned an 89, but it was destroyed in a tragic high school chemistry lab.

  1. First, I downloaded and installed wine 0.9.4.
  2. I then used WineTools vt0.9jo to properly setup my wine environment, installing all the Windows pieces that makes wine so much easier to work with.
  3. I downloaded Virtual TI from
  4. I extracted the, and moved it inside my ~/.wine/drive_c/Program Files/ so it would be easier to find, and along with all my other Windows apps.
  5. I then found the rom backup from before the chemistry disaster, and moved it into the vti folder as well.
  6. I ran Virtual TI with wine ~/.wine/drive_c/Program Files/vti/Vti.exe and told it where to find the rom.

Virtual TI on Linux

Now, I can do my homework with the same hardware I’ll borrow from my roommate to use during the test!

Solderless Breadboard Carrier Followup

On October 21, my breadboard carrier project hit the front page of Hack A Day.

Later that night, it hit the front page of MAKE: Blog.

Roaming through my statistics, I can see that Don Marti probably clicked through. That’s kinda cool.

Someone clicked through from an email message at Yahoo Mail. The article was’ed and sent through a web translator. Someone checked my site through their cellphone, and 74 people were using FreeBSD.

Numberwise, about 4000 unique visitors showed up, and I received approximately 26,000 hits. That averages out to about six hits a visit, which is nicer than one. I used 173 megs of bandwidth.

Anyone have any suggestions for my next project?

Make a Solderless Breadboard Carrier


  1. A DIP40 chip, specifically, my PIC18F452 microcontroller, takes up too much space on a single breadboard.
  2. It can be easy to mix up power and ground.
  3. I hate prying large ICs out of breadboards.
  4. Most importantly, carrying around a raw breadboard with a project on it is a pain.

A “MEGA Multi Tackle Carrier Bait Box” can be used to carry a pair of solderless breadboards, spaced such that there is an airgap terminal strip spaced at .600 inches, the sizing for the larger DIPs, like the DIP40s. A binding post pair can be prewired to allow the use of banana plugs to power the board as well.


  1. 1 “MEGA Multi Tackle Carrier Bait Box” from Walmart
  2. img_1693

  3. 2 solderless breadboard bus strips and 2 solderless breadboard terminal strips
  4. I used Jameco P/N 20722 and Jameco P/N 20669. If you go this route, make sure the power bus strips are removable.

  5. Double banana binding posts
  6. img_1676
    I used something from Radio Shack, identical to Jameco P/N 125196

  7. Some 20 AWG wire, black and red
  8. A Dremel or other cutting tool
  9. Epoxy
  10. Optional: 40 pin ZIF socket
  11. I used Jameco P/N 104029. If you go this route, you will need a DIP40 socket for the ZIF as well.


The removable container inside of the MEGA Multi Tackle Carrier Bait Box has permanent horizontal dividers, and removable vertical dividers. The benefit of this is that I can store related components right with my breadboard. The downside is that a double-sized breadboard won’t fit with the fixed horizontal dividers.

This is easily solved with a Dremel.




After the Dremel job is finished, it looks like this:


At this point, I separated the power rails from the breadboard, put a power rail on one side of each of the two terminal strips, and separated the two breadboards using DIP40 sockets between the two breadboards. This spaces them correctly so the middle is a terminal strip for DIP40 spacing. The next picture may explain better. I then positioned them on the inside cover of the box, so that they would fit in the space I dremeled out. I made sure to account for the binding posts by giving the breadboard room on the top and bottom.

I pushed the ZIF socket into the DIP socket, and pushed that into the breadboard. After the sticky backing from the breadboard was removed, the breadboards were attached to the inside cover.

Open, it looks like this:


Closed, it looks like this:


It is obvious at this point it has a generous amount of room for prototyping while allowing the top to close.

The next step is attaching the binding posts to the inside cover. I did not want to drill through the cover. When the cover is removed, and it isn’t being used as a carrier, but instead a prototyping board, I wanted the plastic to lay flat. This meant I needed to modify the binding post piece.

I did this with a Dremel. Cut down two of the plastic holes so the nuts will end up flush with the bottom plastic piece. I only used one nut for each hole, and I only need to cut down one side.

The next picture shows how both holes should appear. The black holes should look like the left side, and the red holes should look like the right side. The right side was not modified, but the left side was.


The next step is to cut down both of the pegs so they will end up flush with the plastic.

Take plenty of precautions with your Dremel. Do not get metal shards in your eye, or anywhere where they will cause damage. I do not advocate cutting metal with your Dremel ever, especially late at night in the middle of a residence hall (read: dormitory).

This picture shows a comparison between an unmodified peg and a cut peg.

The next step is to etch the bottom of the black piece, so that it will adhere better after the epoxy. Then I assembled the binding post pair.


Mixing up some epoxy, I smeared some on the bottom of the binding post, and also the side. This allows the epoxy to both bind to the plastic on the bottom, as well as the plastic on the breadboard. The first time I attached it, I only put epoxy on the bottom, and after a few days, it snapped off.

At this point it looks like this:


I then attached appropriate colored wires to each bus line from the binding post pegs.

The end result looks like this:



Another benefit of the carrier is that it fits directly in the box with the rest of the electrical engineering stuff, being both transportable to lab, and also directly usable in my dorm.

An annotated set of these pictures is available as a Flickr set at

Possible extensions to this project include power protection. A zener diode across the power terminals or a tantalum capacitor in series with the power could provide cheap protection against inverted polarity.

Send me your questions or comments!

Technical HOWTO and Image of Compaq IA-1 Digital Picture Frame

I made a digital picture frame out of a Compaq IA-1.

In order to make a digital picture frame with an IA-1 and Damn Small Linux, there is one major constraint. No matter how big your CF card is, there is only 64 megs of ram in the device. This means, if you put a complete image of Damn Small Linux, and add something small, like feh, weighing in at less than 500k IIRC, the device will crash on boot, complaining about lack of ram.

That makes this process about eleventeen times more complex, but still within the realm of possibity. Even easier if you have a guide, you know, something like this.

My first step was to make a feh extension for Damn Small Linux. This is unbelievably easy. I did this on my main workstation, booted into Damn Small Linux. First, I enabled apt through the fluxbox menu with Apps > Tools > Enable Apt. Then I started a root console and installed feh with apt-get install feh. I closed my root console, and opened a user console, and converted the feh debian package to a feh dsl package with /usr/bin/deb2dsl. I named the package feh.dsl, made the MyDSL menu name feh, and entered /usr/bin/feh as the location path. I then had a feh.dsl extension in my home directory. I copied it to a thumbdrive, and booted my IA-1 with it. As you know, this crashed on boot. I booted my computer with it. It loaded fine. This meant the error that meant “Out of RAM” really meant it.

So my next step was to lighten up Damn Small Linux, and make it Damn Smaller Linux. This means you have to enter the world of remastering. This has to be done on a computer with more ram than your IA-1.

Following the basic idea inside of ReMastering HOWTO for DSL, also newbies and other enthusiasts we burn a copy of Damn Small Linux on to CD, and reboot our computer.

Mount an open directory off your hard drive.
mount /mnt/hda3/

Make needed directories.

mkdir /mnt/hda3/home/wolf/dsl/source
mkdir /mnt/hda3/home/wolf/dsl/newcd
mkdir /mnt/hda3/home/wolf/dsl/newcd/KNOPPIX

Copy needed files to the remastering directories

cp -Rp /cdrom/boot /mnt/hda3/newcd
cp -Rp /cdrom/lost+found /mnt/hda3/newcd
cp -Rp /cdrom/index.html /mnt/hda3/newcd
cp -p /mnt/hda3/home/wolf/feh.dsl /mnt/hda3/newcd

Copy the sources to the right directory.

cp -Rp /KNOPPIX/* /mnt/hda3/home/wolf/dsl/source
cp -Rp /KNOPPIX/.bash_profile /mnt/hda3/home/wolf/dsl/source

At this point, remove firefox from /mnt/hda3/home/wolf/dsl/source/. This will free up over 17 megs of space. I did this with some nasty bash. I believe it was find /mnt/hda3/home/wolf/dsl/source | grep firefox and then judiciously removing the firefox directories and executable. To be pretty, you have to then remove the desktop link and menu entry.

Create the compressed image.

mkisofs -R /mnt/hda3/home/wolf/dsl/source | create_compressed_fs - 65536 > /mnt/hda3/home/wolf/dsl/newcd/KNOPPIX/KNOPPIX

Create the iso:

cd /mnt/hda3/home/wolf/dsl/
mkisofs -no-pad -l -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/ -hide-rr-moved -o mydsl.iso newcd

Compaq IA-1 Digital Picture Frame

Amanda’s birthday was July 27th, and she turned 19. I spent a lot of time thinking of a gift, and I finally decided on hacking one of my old gadgets into a digital picture frame.

This is the IA-1 before modding:


This is the IA-1 after the uberleet casemod:


These pictures both came from my Compaq IA-1 Digital Picture Frame set on Flickr.

Anyway, I took a Compaq IA-1, and attached a picture frame to the display. I didn’t remove any plastic, I just hunted hard and long for a decent sized picture frame that would snap on the existing plastic bezel. I found a matte that would cover up the plastic. Then I had to work on the software.

The IA-1 only has 64 megs of ram, and no hard drive. It has a 16 meg internal CF, and an external CF slot. I could conceivably smash a digital picture frame running linux and nfs and such into 16 megs. I know I could do it, but the time-effort tradeoff pushed me to find a spare 64 meg CF and put a slightly modified DamnSmallLinux distro on it. DSL is so unbelievably nice that I could have just put feh and unclutter on it as extensions, and then smashed them on the CF. However, when doing that, I ran out of ram on the device and it wouldn’t boot. So I remastered DSL without Firefox, and put feh on it natively.

Now it can show pictures, but I need to let it see pictures. So I took Amanda’s flash drive, and put a bunch of pictures of us, and also a blank cursor to erase the default X cursor, and set it to automount on boot. Then modifying the .xinitrc, I had it start feh at boot. The result?

Amanda plugs her thumbdrive in the IA-1’s back, and plugs it into the wall. The picture frame displays a picture of us every 5 seconds until you unplug it.

Yay! Functional, nerdy, me.

Pssst.  I wrote more on how I did this on the next post!