Life, Music

Dies Irae: A Composition for Wind Ensemble

In 1998, when I was 14, I wrote a song for wind ensemble: ten brass/woodwind parts and three for percussion. I just recently found the original sheet music (which I think I made using Finale 97), and I transcribed the entire thing again so that I could share it here.

It’s called Dies Irae (“Day of Wrath”), and it’s meant to evoke a fateful day in the life of an unnamed protagonist, using unorthodox playing styles ala Daniel Bukvich’s Dinosaurs. I was inspired to write it after my dad (a professional musician and composer) remarked in the car that the rhythm of the windshield wipers would be an interesting basis for a song.

The full list of the events I was trying to portray is listed below, but listen to it first and see if anything comes to mind.

(If you can’t see the player above, you can access the MP3 directly.)

Here’s what I was hoping you heard:

  • 0:00: Morning. The protagonist sleeps.
  • 0:20: The protagonist’s alarm clock beeps.
  • 0:23: The alarm clock is hit, and the protagonist falls out of bed.
  • 0:27: The protagonist stands and stretches.
  • 0:34: The protagonist begins the day, following the usual routine.
  • 0:48: The protagonist’s car won’t start, but then it does.
  • 0:56: The protagonist begins driving.
  • 1:01: The turn signal is activated.
  • 1:08: It begins raining. Windshield wipers are running.
  • 1:25: The protagonist nears a railroad crossing and hears the bell and the train whistle, but tries to make it across the tracks anyway.
  • 1:51: The train puts on its (squealing) breaks.
  • 2:03: Car/train crash.
  • 2:07: Ambulances on the way. Horns honking, alarms ringing.
  • 2:23: A heart monitor is hooked up to the protagonist.
  • 2:30: Paramedics working on our protagonist, but the heartbeat becomes irregular.
  • 2:45: Cardiac resuscitation attempts. The heart monitor flatlines.
  • 3:09: Dirge.
  • 3:22: The heart monitor suddenly begins beeping again, erratically and then regularly.
  • 3:34: Oh happy day, the protagonist is not dead.

I consciously decided not to try and improve the song as I was reproducing it; if I rewrote it now, I’d give each section way more room to breathe, and I’d go for richer sounds that deviate further from tonic chords. But I don’t particularly have time or inclination right now to rewrite, so I’m leaving it as is as a testament to my fourteen-year-old self’s musical decision making process. (Not that I’m completely unhappy with the choices I made; I’m quite proud of many of them, and I still especially enjoy the sequence starting at 2:23.)

I’ve licensed the song and all of its associated files under a Creative Commons Attribution 4.0 International License. Basically, you are free to do with it what you want (reproduce, edit, perform, publish, etc.) as long as you give credit to me as the original author. The MusicXML file (containing all of the musical notation information), PDFs of the director’s score and individual parts, MIDI files, and a WAV audio version of the playback-quality MIDI are here on GitHub.

This song has never been played publicly and was only attempted privately once, by the George S. Parker High School Symphonic Band in Janesville, Wisconsin at the end of my sophomore year in high school… It did not go well. If you play it with real instruments, I would love to hear how it goes.

I used NoteFlight to re-score Dies Irae, and I would recommend it to anyone looking to write music in a Web-based editor. Word of warning, it is Flash-based. Still not bad though.

And as a testament to how far MIDI has come in 16 years, here’s what the one I saved back in 1998 sounded like:

Apparently, I used to live inside an 8-bit video game.

3D Printing, Programming

Today’s Functional Print: Guitar Strap Button

In today’s “validating my 3D printer purchase” news, I’ve printed a replacement strap button for a child’s guitar. Designed in OpenSCAD in about ten minutes, it took eight minutes to print and has an approximate retail value of $2.62.


The original remaining button (left) and the printed reproduction (right).



The OpenSCAD script and STL file are available on GitHub.

3D Printing, Akismet, Programming

Meet Akisbot


Akisbot is the Akismet mascot; he was originally designed by Dan Hauk, but this 3D version was modeled and printed by yours truly.

Here’s Dan’s design that I used as a reference during fabrication:


I designed the entire thing in OpenSCAD, and I’ve published all of the source files on GitHub, so you can print your very own Akisbot. The bot in these pictures was printed at 40% scale and is eight inches tall.


I wanted all of the joints in the robot to be movable, and in order to test that my design would work, I started by printing the arms, which should have been the quickest and easiest joint to print and test. (All of Akisbot’s parts were printed on an Orion Delta 3D with ABS plastic.)


Their small size actually caused them to take a very long time to print, since they would sometimes break loose from the print bed, and I had to slow the printer down so that each layer of plastic had the right amount of time to cool.


This forearm printed ok though. Notice the joint on the far end that fits with the joint on the end of the upper arm in the next picture.


Here’s a pair of upper arms. One of these things is not like the other.

The top of this piece fits inside of the joint in the upper arm, allowing it to bend as shown in the next picture.


I eventually got two full arms printed. It’s a shame that I later decided to modify the elbow joint and had to reprint all four of the pieces.


I printed the eye rings and eyeballs separately from the face and welded them in place with acetone later. In this photo, they were just set in place to check that they were the right size. I did re-print the inner eye parts so that they would fit more snugly.


Another dry fit to get a feel for how big the finished robot would be.


This is the base that connects the body to the wheels and treads. The “A” is the Akismet logo — I initially had printed a solid cube, but I thought this would be more fun.


These braces attach to the sides of the base to hold the wheels and treads in place. If I printed them again, I’d make them thicker; they’re a little flimsy.


This is the joint/skeleton system for Akisbot. All of the joints are movable and have freedom to move in all directions, but the base joint was made thicker to give it more support and not allow for as much vertical movement, since robots don’t usually bend over at the knees.

It was difficult to get exactly the right fit between the joint pieces so that they’d be loose enough that the arms and neck could move but would still stay in place from the pressure between the front and back of the robot alone. When the print finished, the joint was a little bit loose, so I added coats of clear nail polish to the inner joints until it was just the right tightness.


This was the first time I was able to put all of Akisbot’s parts together. He’s only held together with scotch tape, but it proved that welding his front and back parts together should work fine and confirmed that the joint sizing was correct.


The meter hand and the buttons were all painted with nail polish that my wife Christina already had on hand (no pun intended).

I still need to attach or print his monogrammed “A,” but I haven’t decided yet whether I’m going to print a stamp, paint it freehand, or stencil it in.


This was my desk shortly before finishing the project. It’s a graveyard of surplus plastic and deformed robot parts.

The tread was created using a pretty neat technique taken from MakerBot user emmett. You print just the perimeter of an object with a curlicued edge, and ABS is flexible enough that it creates a tread that can be routed around wheels. The modeled object is on the left, the printed perimeter on the right.


These antennas were tough to get printed without the ball snapping off; I gradually increased the radius of the rod until I got two successful prints and called it a day.


This is Akisbot during the final acetone glue-up and clamp-up. The ABS plastic I used is soluble in acetone, so to permanently connect two pieces of ABS, you can just dab some acetone on one and clamp them together. They’ll become bonded as if they were one piece of plastic.


3D printing isn’t foolproof. This is the bag of just the green broken parts and extra plastic generated during the build process.


Akisbot’s total print time, not including assembly or design or re-prints, was about nineteen hours.

3D Printing, Programming

OpenSCAD is Awesome

I’ve been getting into 3D printing, and until recently, I was using SketchUp to create all of the models for my 3D prints. However, whenever I needed to do anything even mildly involved, like align the center of a sphere with the center of the top of a cylinder (or even create a sphere in the first place), I found the limitations of visual modeling frustrating. I thought to myself, “Why can’t I just write a program or use something like SVG to describe the model I want?”

Of course, a solution already existed: OpenSCAD. OpenSCAD is a free and open-source scripted modeling program for solid CAD objects — instead of drawing the shapes you want, you write a program that describes them. Switching to it from SketchUp has been like being able to stretch my legs after a long cramped airplane flight. Consider my latest print:


It’s a replacement tray for this card shuffler I bought for $0.25 at a garage sale a decade ago:

It only required 33 lines of code. The total time I spent starting from when I created the file in OpenSCAD to when I exported it as an STL file was twenty-two minutes, and that included pausing to feed my one-year-old daughter some mashed bananas. To design the same model in SketchUp would have taken at least an hour without the bananas. (Here’s the OpenSCAD file with some additional comments and newlines.)


So if you’re a programmer that would like to create 3D models but you find visual CAD limiting or frustrating, consider OpenSCAD.

3D Printing, Life, Woodworking

Printing Construction Equipment for Fun

For Father’s Day, my wife and kids got me this “Construction-grade Backhoe Loader” kit from WOOD Magazine. The kit contains hardware and wheels; you build the rest of the backhoe yourself:


I planned on doing this project with my sons (ages 5 and 3) until I realized that the fine detail woodworking involved would bore them and I’d end up all alone in the garage. I decided to do something experimental and 3D-print the backhoe instead.

I’ve had a 3D printer for about six months, but I’ve only attempted small projects with it: printing new hardware for a dresser, fixing a pair of sunglasses, creating small hooks to hang towels on our oven’s handle… Reproducing this toy in plastic on my desktop would give me a chance to explore my printer’s capabilities and expand my 3D modeling skills.


Replicating the components in SketchUp turned out to be the easiest part of the process; most of the eighteen distinct pieces took less than 15 minutes each.

Pivot Bracket in SketchUp

With the permission of the fine people at WOOD Magazine, I’ve made the SketchUp and STL files of all of the parts I printed available on GitHub. The original plans for the Construction-grade Backhoe Loader are copyright 2014 Meredith Corporation. If you decide to try and print this project, consider buying the plans and/or the project kit.


3D printing is not a speedy process. This picture was taken about four hours into an eight hour print:


In addition to being slow, 3D printing is not foolproof either. One problem that I encountered on the taller pieces was layer separation:


I’ve determined that this was probably due to the ambient air temperature being too cold, causing the lower layers of plastic to shrink and split from the upper layers. After filling the cracks with an acetone/ABS plastic slurry and sanding, it looked ok:


(Don’t get me wrong — I’m a huge fan of 3D printing and knew about its drawbacks before I ordered my printer. I think that in 20 years, these printers will be as common in households as regular printers are today… possibly moreso. Who will need to print paper documents in 20 years?)

My printer’s print bed is only six inches in diameter, so some of the longer pieces required creative positioning in order to print seamlessly.

I split some of the larger pieces into multiple parts in order to save hours of printing time and some non-zero amount of plastic. For example: instead of printing the entire chassis as one piece, which would require a lot of infill material, I cut it in two and printed one tall hollow piece plus a solid cap that I glue on afterwards:

The total print time for all of the pieces I printed was 80 hours, 57 minutes.

Here’s the lineup of all the pieces immediately before I began assembly. On the left, the hardware and wheels from the kit; on the right, the thirty-seven separate pieces I printed.

Assembly (pre-paint)

With better planning, I would have printed all of these objects with their brackets already in place. Since I didn’t, I had to weld them in place using the aforementioned acetone/ABS slurry.



Painting was done with glossy black and sun-yellow spray paint made for plastic in a cardboard box in my garage. Très professional.


Assembly (post-paint)

At this point, all that was left was to connect the nuts and bolts.







Lessons Learned

It was fun printing an exact duplicate of the wooden model, but if I did it again, I’d go for a more realistic look that doesn’t use as much material. Woodworking plans don’t translate directly to plastic particularly well, since their dimensions are based on commonly available lumber sizes, so most of the pieces were oversized for their purpose.

I’d also skip the painting step entirely by printing in the correct color of filament. I used white because it’s what I already had, but for my next serious project, I’ll order the colors I need.

Due to the post-print crack-filling (and filing and sanding) I had to do, the surfaces of some of the pieces look pretty gnarly even after painting:


It’s apparent in direct light but not obvious at a glance. If I did it again, I’d remake the cracked pieces and get them to print properly rather than trying to fix them in post-production, or I’d attempt an acetone vapor bath to smooth out all the surfaces.

Now that I’m more familiar with my printer, I’ll modify the print settings more aggressively. I printed with 0.2mm-thick layers since it was the default setting, but I’ve since done some testing and found that 0.1mm-thick layers create pieces with almost perfectly smooth surfaces, not the obvious stratification you can see in the pictures. It would take longer, but it would be worth it.

Even though there are plenty of problems that I can see, my kids don’t mind, and I’m sure they’ll enjoy playing with it. It’s not the beautiful wooden family heirloom it could have been, but maybe when they’re older, they’ll say “Can you believe Dad made this on an ancient 3D printer? It had to print using plastic wire instead of pulling carbon directly out of the air!”


3D Printing

I saved a pair of sunglasses with a 3D printer

My sister-in-law’s sunglasses lost an accent from one of the earpieces, leaving the left temple loose. Could I fix this?, she asked. Twenty minutes and 63 millimeters of plastic filament later, my purchase of an Orion Delta 3D printer was 100% validated.


The accent on the print bed.


The accent installed.


With the temple opened.


And the other side, with the original accent, for comparison. I later painted the printed accent gold with some nail polish, and you could hardly tell the difference between the two.

If you happen to have this same pair of sunglasses, and your pair has also lost one or more of its accents, you can download the 3D models and print a replacement yourself.

PHP, Programming

Quick and Dirty Command Line PHP

I do 99% of my programming in PHP, and when I’m on the command line, I would rather use the PHP functions I know than look up the Bash functions I don’t, so I wrote this PHP script and saved it in my $PATH as an executable file named p.

#!/usr/bin/env php

		array_slice( $argv, 2 )

This way, if I want to quickly get the length of a string, I can type:

$ p strlen paraskavedekatriaphobia

and get


instead of looking up that I could have done:

$ foo=paraskavedekatriaphobia && echo ${#foo}

(or apparently a dozen other methods of finding the length of a string in Bash).

It even works with Bash variables:

$ foo=acbdef
$ p strlen $foo

Thanks to all the time this script has saved me, I was able to write this post!