I learned Python a few years back, and just took a course in Java last year. I've also monkeyed around with Processing some. I enjoy programming, both as a useful tool and as a great way to screw around.
Front of the frame
Fundamentally, I enjoy making things. I'm learning how to make things out of wood.
I'm majoring in Electrical and Computer Engineering. I prefer to call it SparkE, but people look at me funny when I do. At any rate, the projects below relate to electronics.

Odds and ends that won't be written about often, but merit mention. 

Hammer and Anvil
Fire trucks behind us

Over summer 2015, I volunteered with Bike & Build, an organization that arranges cross-country cycling trips that aim to involve young adults in affordable housing. Over the course of the summer, we bike cross-country, averaging 70 miles a day (the longest day is 116 miles.)

Some days instead of cycling, we volunteer with local affordable housing organizations (usually Habitat for Humanity). On build days, we work on the build site from 8-4 or so. 

You can track my progress with Bike & Build's route tracker. Bike & Build also has a page describing my route. 

The articles below chronicle my journey in photographs. Hover over any photo for a caption or click to enlarge. I know that some images are sideways; I can't change that with the tools I have. You can click on the enlarged image to view the raw picture, and your browser should autorotate the picture.

Mind Games

I recently learned of a travel word game with a few simple rules:

  • Start with any word.
  • Construct a new word, using all but one of the letters of the original word.
  • Repeat until you have a one letter word.

I decided to replicate it using Python and a dictionary file, and here are the results. The program consists of a WordTree class and a small wrapper. Given a word to begin with, the class finds all permutations of the word, less one character. It then spellchecks each one, discarding the gibberish.

Next, it creates a child WordTree class for each of its valid words. Through the magic of recursive processing, it creates a tree of slowly shrinking words.

WordTree has a few features that are just for show. It uses a custom __str__() function that prints a representation of the entire tree, using DOS box characters for prettiness. There are also two levels of notification for progress updates, and the dictionary is customizable.

New Solder & a 3.5mm to RCA Adapter

Until recently, I used plumbing solder and flux for electronics. They work fairly well, but the RepRap motor controllers refused to go together without more coaxing. There were a few bad solder joints on one driver that killed it.

My dad found me some solder in the basement, but I was reticent to use it without testing. I made an adapter that connects a computer to a stereo to test the solder (and to use).

From previous scrapping, I had all the parts needed: two female RCA connectors, and a 3.5mm male audio jack. I'd planned to make a 6" extention cable, but changed my mind and just assembled them deadbug style.

I only had white (left) and yellow (video) RCA's, so the gizmo uses a yellow plug for right. Sue me.

The adaptor went together easily. I bent the pins a bit, and just soldered them together. Electronics solder is much easier to use than bulky plumbing solder.

That's it for this experiment, and the new adaptor is playing music in the background.


Previously, I created a custom module to change the symbol set provided by CKEditor, the WYSIWYG text editor on this site. (CKEditor is an applet that shows live formatting instead in lieu of HTML). Since then, a few other flaws have come up. 

  1. Spellcheck is provided by a third party, but doesn't work in Opera. Modern browsers have their own spellcheckers, which were being suppressed. 
  2. CKEditor provides a few styles for theming text. There are two problems with those styles. First, they're inline styles. Second, they're ugly. 
  3. CKEditor uses its own styling. Ordinary formatting such as italics and headings look okay, but styles I've defined don't show up. 

Module Hacks

I installed a WYSIWYG (what you see is what you get) module for Drupal recently. The module adds a formatting bar to edit fields, and displays what a post will look like after HTML is applied. It's called WYSIWYG (creative!), and I'm using it with a pretty little editor called CKEditor.

CKEditor contains a symbol select, which is incredibly useful for inserting characters like α and © into posts. Unfortunately, the default symbols selector was full of garbage (it contained mostly keyboard letters, without any greek. I write about coding and ECE, so symbols like Ω and µ will see a lot of use. 

Fortunately, there's an incredibly simple override. The Drupal module overrides the editors own settings, but overriding the WYSIWYG module it trivial. 

Heated Bed and Motor Drivers

Good news and bad news. I'll start with the good news.

Good: Heated Print Bed

In the process of polishing the Reprap, I dediced to make a heated print bed. These beds improve print quality by helping the plastic adhere to the bed. During the build, the lowest layers of plastic are warmed by the plate. As the plastics cool, they shrink and detach from the bed. A heated bed prevents that shrinkage.
I found a template for a bed by on thingiverse. This pattern was slightly smaller than others, and printed on letter size paper. After much trouble, I managed to transfer toner onto the board as a resist.

Archives, Redux

Views does almost what it should. There doesn't seem to be support for nesting lists, which I was looking for. It refuses to create a nested list (below). JQuery and AJAX could've done a great job of theming that into an accordian menu.

  • 2012
    • Oct
    • Nov
    • Dec
  • 2013
    • Jan
    • Mar
    • Apr


Views is an amazing module.

By default, the Drupal homepage shows a "Teaser" of each node (piece of content) that's been promoted to the front page. If there are more than 10 posts, it'll do you the favor of displaying a pager at the bottom. That's all it does, though. There's no filtering, only rudamentary ordering, and general lack of customization.

When the site came online, I used the Path module to give content a snazzy URL (in lieu of the Drupal default ""). All of the articles (the things in the frontpage use the URL format ""). I wanted the home page to filter using the same yyyy/mm scheme to allow granular browsing. shows all posts from 2012 shows all posts from June displays this post

That's where Views comes in.


As a summer project, I'm trying to learn more about woodworking. I like making things, and woodwoorking is one more method of creating.

My mom asked me to make her a yarn swift, which is a sort of lazy susan for a skein of yarn. Often, yarn comes in skeins (loops) that become hopelessly bunched as they unwind. A ball of yarn is easier to knit with, and she has a small machine that'll wind yarn into a ball. The swift holds the yarn as it unwinds, preventing tangles. 

After looking at some designs, we decided on a horizontal design, centered around two wooden X's. The lower cross would act as feet, and the upper one would hold upright dowels, which would hold the yarn. The longer arms would be 30" each (large skeins are usually smaller than two yards, and 30" arms could accomodate those.)

We decided to use a few pieces of 2x2 oak that were lying around. I started by cutting each board to the rough dimensions. The larger piece of oak split into a 30" piece and a ~15" piece; the shorter end was used for feet. I cut each board in half to make two 30x¾" boards and two 15x¾ pieces.

Half laps in each board improved the appearance and usability of the swift. I set the tablesaw blade to 3/8", and cut a 3/8x1½" slot out of the center of each piece.

We decided to use both fixed pegs (seated in holes) and mobile pegs (seated in channels) to hold the skein of yarn. The holes were incredibly easy: I drilled a 5/8" hole to a depth of 3/8" near the end of each arm. I swapped to a ¼" drillbit and drilled the rest of the way through.

Searching for a Theme

I have nothing against the default Drupal theme, but it's the definition of generic. It's like using Helvitica (an intentionally generic font) to brand your business. With that in mind, I set out to find a more interesting theme for this site.

My brother and I browsed through the Drupal theme repository, but didn't find much we liked. Alpine, the best theme we saw, had a promising layout, but carried an outdoors motif. We tried to refit the images, but the theme wasn't designed to be modified. A surprising number of the themes are starter kits, and those that aren't tended to be clean and businesslike.

Perhaps it's fitting that we didn't find any perfect themes online.


[[{"type":"media","view_mode":"media_original","fid":"54","attributes":{"alt":"Smiley face!","class":"media-image","height":"32","title":"The original bitmap","typeof":"foaf:Image","width":"32"}}]]

Here's some left-floated text.

This is a fake article from the past to test the archive block. I'm also testing out theming stuff on it.

[[{"type":"media","view_mode":"media_large","fid":"54","attributes":{"alt":"Smiley face!","class":"media-image","height":"32","title":"The original bitmap","typeof":"foaf:Image","width":"32"}}]]

This is more text. Honest to god, I swear. If I see any more text... This is text. Really, truly, absolutely. It flows, it jives, and does everything text does. Lorem ipsum and so on. Rambley ramble ramble. Ramshackle huts littered the river's edge. As the skiff pulled up to the dock, its passengers prepared to debark. They thanked the captain for guiding them so far into the Amazon. The ramshackle dock groaned under their weight as they climbed out of the boat. I think that's enough text to show how the image is floated right. Hooray.

Gosh, I wish that the formatting showed in the editor, too. Fah.