Cracking Captchas

Captchas are those distorted snippets of text that some web sites use to try to prevent spammers and bots from automatically registering accounts. The idea is that a human can read the words, but a computer cannot, and so only a human can fill out the text box correctly.

However, it’s probably possible to get humans to crack the captcha for fun. Imagine a “missile defense” typing tutor and game, where each incoming missile is a captcha text. If you type the text, it goes away. Since the game can’t tell what the texts are to begin, it would send the same word to multiple players and only block the “incoming missile” when multiple players typed in the same thing. From that, it could build a massive database of images and corresponding text, which could then be used to register accounts. Alternatively, someone who wants to crack a captcha could submit it to a server, which would then include that captcha in all the currently-running games and reply with the text when several people typed the same thing.

Fixing Firefox's colors

If you are running Ubuntu with a dark theme and Firefox, you may have noticed that some text entry areas are too light to read. This is because a web developer only set the background and not the foreground color of the text area. When this happens, Firefox picks up the webpage’s background (likely white or something light), and the window manager theme’s text color (likely also white or something light in a dark theme). This means you get stuck reading light grey on white text. The fix is to put:


in your userContent.css file. That file may not exist yet, but you can create it in:


And the next time Firefox starts up, it will use this code to color all inputs, textareas, and select boxes as white with black text.

I still don’t have a fix for all the buttons getting dark text on dark backgrounds.

Sprint cell phone codes

These are codes for doing a lot of random things to Sprint phones. I have an LG Lotus, and have been poking around in these service menus a bit. Unfortunately, I don’t have any way to get the MSL of a phone. I only have my MSL because I got my phone online, and they give you the MSL to register it.

I got the codes from this very useful thread.

##2342# (##CDG2#) CDG2 Menu (NAI setting here). Requires MSL.
##2539# (##AKEY#) AKey Menu. Requires MSL to Edit.
##2739# (##BREW#) BREW Software Menu. Requires MSL.
##2769737# (##BROWSER#) Browser Settings, also available under ##DATA#
##3282# (##DATA#) Power Vision Program. Requires MSL to Edit.
##33284# (##DEBUG#) Debugging Menu. Requires MSL.
##7738# (##PREV#) MOB_P_PREV (P_REV Prefs). Requires MSL.
##786# (##RTM#) Life Timers & Memory Reset. Requires MSL.
##8626337# (##VOCODER#) Vocoder Settings. Requires MSL to Edit.
##889# (##TTY#) TTY Menu (Same as Menu > Settings > More > Accessibility > TTY)
##XXXXXX# (MSL Code) Replace the 6 X with your MSL, offers SVC menu to change NAM and MSID

Turned off commenting

I’ve turned off commenting on this blog, because it only got spam. Drop me a line on twitter if you want to chat.

Gstreamer and the Logitech Pro 9000

This is a gstreamer pipeline that takes frames from a UVC camera on /dev/video0 and displays them on the screen, while simultaneously saving one frame per second to a file. In other words, it’s a single-command-line surveillance camera.

gst-launch v4l2src device=/dev/video0 ! ffmpegcolorspace ! video/x-raw-rgb,width=640,height=480 ! identity name=artoolkit ! tee name="logger" ! queue ! ximagesink sync=false logger. ! queue ! videorate ! video/x-raw-rgb,framerate=1/1 ! ffmpegcolorspace! pngenc snapshot=false ! multifilesink location="frame%05d.png"

Obviously, the camera can be set up to display in different resolutions, and save to differently named files. The next one expands the length of the section of the filename that changes to 8 digits, enough for one picture every second for 3.16 years. I also reorganized the order of the parameters so that ARToolkit can work with the data stream and do augmented reality stuff to it.

export ARTOOLKIT_CONFIG="v4l2src device=/dev/video0 ! tee name=logger ! queue ! ffmpegcolorspace ! video/x-raw-rgb,width=640,height=480 ! identity name=artoolkit ! fakesink sync=false logger. ! queue ! videorate ! video/x-raw-rgb,framerate=1/1 ! ffmpegcolorspace ! pngenc snapshot=false ! multifilesink location=frame%08d.png"

Cat Ear Code

This is the Arduino code for running the cat person ears. The circuit was simply three switches, one for each paw and one for the petting sensor, and a pair of servos. The code just checks each sensor and moves the corresponding ear.

#include <Servo.h>

//Servo pins
#define rightpaw 6
#define leftpaw 7
#define pet_sense 8

//Ear positions
#define r_up 95
#define r_down 160
#define l_up 180-r_up
#define l_down 180-r_down

Servo leftear;  // create servo object to control a servo
Servo rightear;

int pos = 0;    // variable to store the servo position

void setup()
  leftear.attach(9);  // attach the ear servos

  pinMode(7, INPUT);


void loop()
  if(digitalRead(rightpaw) == HIGH)

  if(digitalRead(leftpaw) == HIGH)

  if(digitalRead(pet_sense) == HIGH)

Flaws with the original cat ears

My first version of the cat ears for people had these problems:

  • The servos are not as powerful as I would like, so they don’t move the ears as far down as I wanted.
  • The petting sensor on the headband between the ears was an afterthought, so instead of one cable leading from the headband to the controls, there are two.
  • The paw cables snap to the gloves with normal clothing snaps. If you dance like a spaz, they will get unsnapped.
  • The palm material of the gloves is insufficiently stretchy. This puts a bunch of load on the seams and, given time or big beefy hands, might cause the seams to fail.
  • The cable between the controller board and the gloves and hands has a non-locking, non-polarized connector in the middle of it. It is possible for this to get unplugged and then put back together backwards.
  • The cables are all absurdly long. It would fit me better if I was nine feet tall.
  • I’m not terribly pleased with the construction of the ears, particularly where the ear lining meets the headband.

I’ll be posting a bunch of links to the techniques used in making the ears and the code soon. It won’t be a full write-up of the process, but it will be enough pointers for someone who wants their own set of ears to do it fairly quickly.

If you can’t sew, solder, and operate simple hand tools, you may want to get a friend to help, but then you can make two sets, and bat your ears at each other.

Why I don't sell things

I have this problem, which may be common, and may not be a problem, where I don’t consider the things that I like doing as ways to make money. I do stuff like building random electronic devices because I enjoy the process of doing it. On the rare occasions that I’ve done it for money, I’ve found that the work stopped being fun and started being work. As a result, when someone approaches me about my hobbies with an eye towards monetizing them, I tend to react like someone told me I could sell my (hypothetical) pet cat for sausage. I could, and I might even make money off it, but it wouldn’t be fun and it misses the point.

That’s part of the reason that I don’t see a problem with making something and then giving it away (to a good home, that is. I don’t build things to be thrown away). Giving things away is usually bad business. It ensures negative margins and financial loss. I may lose money on the transaction, but life isn’t transactions, it’s experiences. I had the experience of taking a bunch of stuff that did nothing, building a functioning thing, debugging it, and learning from it. Once it’s built, it’s just an object, but while it’s being built, it’s a process. If a business is efficient, there is as little process as possible to make as many objects as possible. If a hobby is fun, there’s tons of process and the object is secondary, if it exists at all. Consider sports. You can go play frisbee with nothing but sensible clothes and a frisbee. At the end of the game, you haven’t created anything that can be sold, but you went through a process that was rewarding in and of itself.

It may be that entrepreneurs view their businesses the same way, with the functioning of the business being the process and the end product being the object. From that point of view, a streamlined management structure may have the same beauty and utility as a well-designed and smoothly implemented software framework or a well-designed sensor circuit.

However, understanding someone’s point of view is not the same thing as assuming it. As a result, I won’t be going into the cat sausage business any time soon.

While I was at the Mini Maker Faire, a bunch of people asked if they could buy various things that I had. I hadn’t applied for a permit to sell things, so I didn’t sell anything. I had two reasons for not selling things at the faire in general, and one reason for not selling my animatronic cat ears in specific.

The first reason to not sell at the faire is simple. I didn’t have anything to sell. Everything I wanted to take to the faire is stuff that I was proud of making and planned to keep.

The second reason is complex. I don’t really think of the Maker Faire as a place to buy and sell things, so much as a place to meet people and learn about things. Commerce is certainly present, but in terms of how I approach the event, it’s a lot closer to Firefly than the MIT Flea. Selling things is not the interaction that I want to engage in with people. I’d rather learn about what they are working on and teach them about what I have worked on.

The reason I wouldn’t sell the cat ears is that they are a prototype. I found several bugs in the initial shakedown that I haven’t fixed. I could fix them if I was going to make a production model to sell, but i probably won’t do that, for the reasons detailed above.

However, now I have a list of things to watch out for in the design, and the existing design. That’s enough to publish here and let other people make their own versions. Teaching beats selling any day of the week.

Logitech Pro 9000 and Artoolkit

I’m doing a little augmented reality work for my day job, using ARToolKit. ARToolKit works, and is documented, which is a combination of features that appears to be unique in open-source augmented reality software.

I configured my build to use GStreamer, and set my ARTOOLKIT_CONFIG environment variable to v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=640,height=480 ! identity name=artoolkit ! fakesink

That gives a good tradeoff between resolution and speed, and works just fine with the simpleLite demo program that comes with ARToolKit.

Augmented Reality is like normal reality, but better

Me Showing off at Maker Faire RI