On the legality of jailbreaking: Phones are just the beginning

Hypothetical situation time

Let’s say it’s your birthday, and your great aunt Gertrude bought you a new cell phone, but she accidentally bought you the Verizon version, and you have AT&T. You find out that the phone actually has the hardware to support both networks, and you can easily switch to AT&T by changing the software in a process called unlocking. You go ahead and unlock the phone, and everything is well in the world. However, since old aunt Gertie bought your phone after January 2013 and you’re living in the United States, you’ve technically broken the law because you’ve violated the Digital Millennium Copyright Act (DMCA).

Mr. Librarian, What May I Hack?

This is all thanks to the Librarian of Congress, James Billington, who in October 2012 decided that unlocking cell phones would be removed from the exemptions to the DMCA beginning January 26, 2013. Luckily, petitions have been signed and responses have been posted by the White House and the FCC calling for action to restore the legality of unlocking. For now, you don’t have to worry about being hauled off to jail.

Running unauthorized software on your phones, called jailbreaking, will be kept legal until 2015 thanks to another exemption in the DMCA. However, like the expired exemption with unlocking, it does not cover non-phone devices like tablets. The current conversation on unlocking and jailbreaking revolves around the technology we touch most: phones and tablets. If you own a product that is able to be programmed, should you have a legal right to program that product? Does the answer to that question change as other “dumb” products in our lives become smarter?

Smart Everything

Should you be able to run your own software on your smart watch? How about your smart thermostat, or smart refrigerator? Why would you ever want to program a fridge? To answer that, let’s take a look at another hypothetical:

Say your smart refrigerator can detect what food it contains, and offer up recipe ideas. The recipes are supplied by a partner service, “Big Joe’s Greasy Eats” and you usually don’t like the recipes they offer for some reason. You’d love to get recipes from your favorite recipe service, “Delicious Meals That Won’t Make You Fat”. Unfortunately, since your refrigerator company struck a deal with Big Joe, they don’t let you change the recipe source. Even more unfortunately, there’s no exemption in the DMCA for smart refrigerators because the only person granted with the power to add exemptions (for some reason), the Librarian of Congress, still uses an ice box and has never heard of a smart refrigerator. Should it really be a crime to add your favorite recipe to the fridge’s approved recipe providers?

Dangerous Intelligence

Diving deeper into the future, perhaps the biggest “dumb” product that’s ripe for innovation is something that touches nearly all of us every day: the automobile. The long awaited self driving car is finally becoming a reality. Hundreds of thousands of miles have been driven without the aide of a human and autonomous cars are now legal in Nevada, Florida and California. With something as powerful and dangerous as a car, one can bet that the control software will face strict regulation. Running your own code on your car now becomes a public safety issue, but the fundamental question remains the same as with phones and tablets: is it legal to run custom software on products that I own?

The conversation on smart transportation doesn’t stop with automobiles. While the time frame is up for debate, it’s a near certainty that FAA will allow the commercial use of drones, and personal use is already happening at an ever increasing scale. I have a feeling that like every really cool, powerful technology, this transition is going to happen surprisingly fast. The laws we have are already behind the times, and we need to look far into the future to plan around the consequences of laws written only for the current generation of technology.

Posted in UAV | Leave a comment

GCode Viewer

For the past couple of months, I’ve been working on my first WebGL project: enhancements to Joe Walnes‘ excellent online GCode Viewer. I’ve added some neat features like individual GCode coloring, animation, and the ability to scrub through GCode.

Give it a try here: http://jherrm.github.com/gcode-viewer. Just drag & drop your GCode on the window. Right now it works best with GCode made for additive manufacturing.

I’m looking forward to adding some more features like custom colors, better controls, and more GCode support. I’ve made some fairly large changes to the underlying architecture which should make adding and rendering more GCodes pretty simple. Included in the source code is an unfinished javascript port of grbl’s GCode interpreter, hopefully paving the way for full simulation someday.

Get the source code at https://github.com/jherrm/gcode-viewer.

Posted in 3D, code | Tagged | 1 Comment

Introducing ScanBooth

ScanBooth at Pittsburgh Mini Maker Faire 2012

Kids getting 3D scanned at the Pittsburgh Mini Maker Faire 2012. © Larry Rippel

At the 2012 Pittsburgh Mini Maker Faire, I ran a booth where people could get 3D scanned and take home a small printout of themselves. After an intense 7 hours, we scanned over 90 people and printed out over 40 of them. Going from raw 3D scan to a printable miniature figurine requires a surprising number of steps. Raw 3D scans have holes, extra geometry and artifacts that all need to be dealt with before sending to the printer. In fact, when I first started scanning people back in March, it took me over an hour to manually clean up a scan so that it was able to be printed out. In order to scan and print so many people in such a short time span, I had to automate the process as much as possible. Using a collection of scripts I was able to get the turnaround time down from over an hour to about 8 minutes. To help others with this problem, I’m releasing ScanBooth.

ScanBooth is a collection of software for running a 3D photo booth. It includes tools for automating 3D scan capture, cleanup, printing and sharing.

Here’s what ScanBooth has to offer:

  • A rails webapp
    • Allows users to enter their contact information when they get scanned.
    • Stores status of user prints, uploads and emails.
  • Delayed job framework
    • Upload scans to sketchfab.
    • Upload scans to an FTP server.
    • Email users links to their scans for viewing/downloading.
  • Scan workflow automation
    • Auto launch ReconstructMe and start scan
    • Automated scan cleanup with meshlab

We had a fantastic time showing people the power of 3D scanning and printing at Pittsburgh Mini Maker Faire. I hope ScanBooth helps others do the same. Please check out the code on github and let me know what you think!

Carlos Armengol and his son check out their souvenir from ScanBooth at Pittsburgh Mini Maker Faire 2012. © Larry Rippel

Posted in 3D, code | Tagged , , , | 6 Comments

Behind Enemy Lines: Using git as a frontend to svn

Sometimes a developer may find themselves forced to use tools that may not be… preferable. This is the situation I’ve found myself in working at a large company where subversion is the source control management software of choice. While I should fight the good fight and try to change policy to use git instead, I have to get work done in the meantime, so I’m using git svn.

Over the past year, after a rocky start, I’ve fallen into a groove with how I’ve integrated git svn into my workflow. Since it was pretty confusing in the beginning, I figured I should finally post my notes to help anyone else facing the same situation. This guide doesn’t dive deep into the intricacies of branching and merging – it focuses on pushing commits to svn, pulling other peoples’ changes from svn, and dealing with conflicts along the way.

General workflow

Pushing and pulling changes to/from svn requires a clean repo, so the first thing to do is stash any uncommitted changes.

Pull the latest revision

git stash
git svn rebase
    (resolve any conflicts caused by local commits)
git stash pop
    (resolve any conflicts caused by stashed content)

Push your commits to svn

git stash
git svn dcommit
git stash pop
    (resolve any conflicts)

A note about dcommit

The dcommit command stands for “duplicate commit”. While it sounds straightforward, it’s helpful to know what the command actually does: once it duplicates your commits to svn, it deletes them from your local repository, then rebases to pull those same commits back from svn.

git svn dcommit
    1. duplicate commits to svn
    2. delete local copy of those commits
    3. rebase to pull those commits from svn

Resolving Conflicts

There are two common places where you’ll experience conflicts while using git svn: after rebase and after popping the stash. It helps to use a different strategy depending on which command caused the conflict.

Resolving conflicts during rebase

git svn rebase
    M   config/environments/development.rb
    First, rewinding head to replay your work on top of it...
    Auto-merging config/environments/development.rb
    CONFLICT (content): Merge conflict in config/environments/development.rb

You may notice that we’re no longer on any branch:

git branch -a
* (no branch)

That’s okay though, just resolve the conflicts as usual:

git mergetool

Once you’re finished resolving the conflicts, continue the rebase:

git rebase --continue

And we’re back on the master branch:

git branch -a
* master

However, running git status shows that there’s nothing staged even though we changed the files during conflict resolution. Don’t worry, the changes made during confict resolution were combined with the commit that caused the confict during the git rebase --continue.

Resolving conflicts while popping the stash

Here’s what the stash stack looks like before we attempt to pop:

git stash list
stash@{0}: WIP on master: d900c3c Fixing bug #502.

And here’s the conflict when we go to pop the latest stash:

git stash pop
    Auto-merging config/environments/development.rb
    CONFLICT (content): Merge conflict in config/environments/development.rb

Just like usual, resolve the conflicts:

git mergetool

Unlike conflicts shown above when running git svn rebase, you have to commit the changes made while resolving the conflicts.

git commit -a -m "Resolving Conflicts"

We’re not quite done yet. Although we’ve successfully merged the stash, it’s actually still there:

git stash list
    stash@{0}: WIP on master: d900c3c Fixing bug #502.

The stash remains because git keeps it when conflicts are found so no work gets lost.

It’s a good idea to drop this immediately after resolving the conflicts. If you don’t, you might come across it later and wonder if you actually merged the stash or not, which will certainly result in more conflicts if you did indeed merge it previously.

git stash drop
    Dropped refs/stash@{0} (0a7aeafd302d4b2bfa48fbbf7b9ac67544fc5d2d)

If you want to ensure you’re not dropping an important stash, you can always run a diff against the stash:

git stash show -u

And finally, push the conflict resolutions to svn:

git svn dcommit


I hope this helps people that find themselves in a similar situation to my own. Although I’ve found a workflow that fits my day to day activities, I’m no expert. If there are any errors or better ways of doing things please leave a comment and let me know!

Posted in code | 2 Comments

The Naming of Things

The reason Apple dropped model numbers with the iPad has seemed obvious to me for months: because they’re going to be selling the current “new iPad” alongside the yet to be announced iPad mini.

Think about it, if Apple kept the model number then consumers would have to choose between the iPad 3 and iPad mini. What would Apple do for the next version of the iPads? Would we have an iPad 4 and iPad mini 2? Obviously this isn’t a good naming strategy, so Apple chose to simplify everything by dropping the model number from the iPad family name.

Now that Apple has sent out invitations to the new iPhone event with clear hints that it will be called the iPhone 5, the only thing we can be pretty sure about is that Apple will not introduce an iPhone mini/nano alongside the iPhone 5. When Apple finally does drop the model number from the iPhone, expect an iPhone with a new form factor to be introduced within a year.

Posted in random | 44 Comments

3D Scanning with the Kinect

I gave a talk on 3D Scanning with the Kinect today at Pittsburgh TechFest. I demoed the latest consumer 3D scanning software like ReconstructMe, RGBDemo, Skanect and 3Dify. Thanks to all who attended – I hope you enjoyed it!

Here are the slides.

Posted in random | Tagged , | Leave a comment

How to tell if your LinkedIn password was part of the hack

Update: check out LeakedIn for a much easier way to see if your password was part of the leak, as well as if it has already been cracked.

This assumes you’ve already downloaded the 118MB list of password SHA1′s. I’d link to the source I found but it has already been removed. (No, I’m not going to share mine – sorry).  This also assumes you’re on a Mac or linux box with OpenSSL installed.

Create a text file called password_file.txt.  Type your password into this file and save. Be sure not to include any spaces or new lines, just your password.

Open up a terminal and type the following, replacing “/path/to/” with the actual path to the password_file.txt file:

openssl sha1 /path/to/password_file.txt

You’ll get output simliar to this:

SHA1(password_file.txt)= da39a3ee5e6b4b0d3255bfef95601890afd80709

Copy that long string of text after the equals sign. Search for it in the list of SHA1′s, and if you find a match then your password was part of the hack. You should change your password for any accounts using that password immediately.

Also don’t forget to delete that file after generating the SHA1!

Posted in random | Leave a comment

ReconstructMe in Mac OS X via Parallels

ReconstructMe is a great tool for 3D scanning with the kinect and other depth cameras. Unfortunately it’s Windows only, and due to shoddy device handling in virtualization programs like VMware Fusion and VirtualBox the kinect isn’t recognized by Windows.

Luckily, thanks to Parallels all hope is not lost. Here’s how I was able to 3D scan with ReconstructMe in a Windows VM:

This guide assumes you have a running Windows 7 instance inside a copy of Parallels 7.

Let’s start with the installation instructions from ReconstructMe:

Display and CPU Drivers

If you try to install display drivers in a virtual machine you’ll likely get an error like this:

Native display drivers don't typically work inside virtual machines.

The real reason we need these drivers is for OpenCL support, which ReconstructMe relies on. After getting that error message, I just skipped this section and continued with the installation. Because I didn’t have OpenCL support I ended up getting this message on the first run of ReconstructMe:

The program can't start because OpenCL.dll is missing from your computer. Try reinstalling the program to fix this problem.

Luckily Intel provides an OpenCL CPU runtime for Windows that you can download here.

Apart from installing the OpenCL runtime instead of the native graphics drivers, the rest of the installation instructions are the same.  Just install the C++ redistributables, the Sensor Driver, and ReconstructMe, then you’ll be all set to try it out.

The first time you plug your kinect into your mac while Parallels is running you’ll get three notifications that look like this:

Be sure to select Windows for all three (Camera, Audio and Motor).

Now go ahead and give ReconstructMe a try!

A warning: Running anything in a virtual machine will never be as fast as running it natively, and this is especially true with ReconstructMe. Running it in realtime mode was VERY choppy and resulted in poor scans. I highly recommend running “ReconstructMe Record” which will simply record what the kinect sees at a decent framerate. Once you’ve captured what you want, open “ReconstructMe Replay” to go through your recording and build the scan. Here’s what came out of my first scan using record/replay:

An appropriate first scan with ReconstructMe on a Mac

Anyways, that’s it!  If you have any questions or comments, leave them here or hit me up on twitter!

Posted in 3D | 16 Comments

The Most Useless iPhone Case Ever

When I heard about the Absurd iPhone Accessory Contest, I knew I had to participate. My first entry, a Voltron iPad was thrown together pretty quickly and would be near impossible to print out on my makerbot cupcake’s modest build platform. I really wanted to submit an entry that I could actually print and that was a bit more interactive than a simple case. That was about 2 weeks ago, and I’ve been working on something ever since.


I’ve always wanted to build The Most Useless Machine Ever, so I thought – why not combine it with an iPhone to create The Most Useless iPhone Case Ever? It turned out to be a pretty challenging project.

The typical “Most Useless Machine Ever” is many times the size of an iPhone, so the first thing I set out to do is find the smallest parts I could. The bill of materials for this project looks like this:

  • Battery case
  • Motor/Servo
  • Gearbox
  • DPDT Toggle Switch
  • SPDT Microswitch


Luckily I had all of these parts lying around the house in some form or another. The parts that were a real challenge to find were a motor and gearbox strong enough to flip the toggle switch but small enough to fit in a fairly large iPhone case. I remembered I had an old Creative Webcam in the junk pile that had pan/tilt functionality. After taking it apart I had two small gearboxes with the stepper motors the size of a peanut. It took a few hours to track down the information about them but eventually I was able to drive them via an arduino. Unfortunately, after all that work the steppers simply weren’t strong enough to flip either of the switches, so I had to find another solution. Of course, with an electronics hoarder like myself there’s always more broken electronics to look through, and I found just the right motor in a broken Canon Elph camera. A big benefit is the Canon’s lens motor is DC, so I don’t need a microcontroller to drive it. In fact, with a simple DC motor all of the functionality of the useless machine can be wired with no chips at all.

The real trouble came when even that motor didn’t seem to be strong enough to push the toggle switch over. I spent an embarrassingly long time tracking down easier to flip toggle switches before I realized that I needed More Power (insert Tim the Toolman Taylor grunt here). I had been using two AA batteries which just didn’t give the motor enough torque to flip the switch. I changed over to a 4xAA case and we were in business! Unfortunately everything has its price – another 10mm to the thickness of the case with the new battery holder.

After getting all of the parts, I set out to design the case via pencil and paper, then in the programmer’s 3D modeler of choice: OpenSCAD.

Useless iPhone Case

Useless iPhone Case Internals

Aside from the electrical components, everything else is 3D printed, except for the toggle switch handle extension (my printer just couldn’t deliver anything small enough that would work well). I found the inside plastic piece from a mechanical pencil worked well, so I just used that.


It took a lot of revisions to get it right.

Useless iPhone Case Prototypes

Anyways, I could go on for a long time about this case, but the details are pretty boring. It’s all done now just in time for the deadline of the contest. Everything would have went a lot quicker if I had a better 3D printer (hint hint to the judges…), although I do love my cupcake.

Check it out on thingiverse: The Most Useless iPhone Case Ever

Posted in random | Leave a comment

3D Printed Drawer Dividers for Storage Cabinets

Storage cabinets are great for organizing small parts. Unfortunately the one I recently bought from Lowes didn’t come with drawer dividers. (I should have read the reviews first.)

Shop Stack-On 39-Drawer Storage Cabinet

I started to make my own from an old CD case but realized that they cracked easily and looked like crap.

Handmade Dividers

Then I remembered I had a 3D printer, and smacked myself for even trying to cut them myself. I fired up OpenSCAD and before too long had a model of a divider custom fit to the drawers in my cabinet.

OpenSCAD Drawer Divider Model

It took my Makerbot Cupcake a few minutes to print the first version and it fit really well.

3D Printed Drawer Divider

3D Printed Drawer Divider

The script is fully parameterized so you can customize it to fit whatever drawers are out there. Check out the code on github and on thingiverse.

Posted in 3D | Leave a comment