Archive for the ‘Uncategorized’ Category

Final Metalshop class at 3rd ward

Sunday, March 3rd, 2013

I finished my metalshop class at 3rd ward and I couldn’t be happier with the result. After 3 weeks I can make basic, if ugly, Mig welds.

After the first metalshop class, we got to use the machines. In the second class, welding was introduced. In the third class we were shown the plasma cutter and given a quick overview of the other tools, and we were then turned loose on our project.

In the second class at 3rd ward, we were introduced to the mig welder. Carlos spent time describing the basic safety and operation of the welder and then demonstrated sample welds. Then we took turns making welds on scrap. Each student rotated through and made a weld, then Carlos would give them feedback in front of the whole class. By showing us the other students’ welds, he helped us learn to avoid mistakes we had yet to make.

We were taught four types of welds: the tack and three types of seam welds. The tack is for point welds that loosely hold pieces together while allowing for further position tweaking. The three types of seam welds are the cursive e, the back track, and the close stitch. Carlos heavily favored the close stitch, because he thought it gives good heat control and was the easiest technique for beginners to produce quality welds. Carlos explained common welding problems (slow wire feed rate, high wire feed rate, voltage too high, voltage too low, poor or non-existent ground, no shielding gas). After explaining these potential problems, he went around and caused one of the error conditions while we were making welds to see how long it took us to notice.

By the end of the class sessions I had a better understanding of the welding I have been watching on youtube. I was and still am nowhere near proficient, but I had things to work on. Sadly I had no additional practice time to work on them. Unlike the first class, when I was able to stay after class and watch others work for a few hours, after the second class we cleaned up the shop and everyone went home.

The objective of the third class was to build a square tube frame with sheet backing plate for a clock. After going over the tools we had already seen, we learned how to use the plasma cutter, drill press, and the sand blasting booth (although that was out of media).

We technically had 90 minutes left to build our project. The horizontal band saw and the plasma cutter were the two major bottlenecks, and I don’t think anyone started welding before 10pm (the class was scheduled to end at 10pm). Carlos stayed with the class to make sure that everyone could finish their project.

When we started welding, there was a little bit of difficulty with the machines. Of the three available mig welders, only two were properly functioning at the same time.

I was the last to finish at 11:45 (maybe 10 – 15 minutes behind the others). I don’t think that I was slower than the others, I just think I took my time. I was also happy to enjoy my time in the shop. I helped Carlos clean up the shop and left at midnight with my clock.

Picture of my clock

What’s next for me and welding? Now that I’ve tried it and I know I can do it, I’m even more eager to begin making myself a desk and some furniture. In fact, I’ve been getting ideas for furniture from looking at what’s on sale in major retail outlets, and I’ll be blogging about that soon.
In the meantime, I’m seriously considering a 3rd Ward membership so that I can continue working. Their memberships are expensive; but if I can have open access to the metal shop, it might be worth it. I’ve also considered the (much cheaper) Madagascar Institute, and if anyone has
experience or knowledge of how the two studios compare, I’d love the feedback.

Metal Shop Class at 3rd ward

Sunday, February 10th, 2013

Last fall I decided that I wanted to build an adjustable height standing desk. I began researching existing manufactured desks and determining what features I would need. I quickly realized that none of the existing models had exactly what I was looking for and that I would want to build one for myself.

To research how to build my desk, I read anything I could about welding and watched welding videos online (I highly recommend Welding Tricks and Tips). After several weeks of research, my girlfriend suggested that I really should just enroll in a class. I picked Intro to Metal Shop at 3rd Ward because they seemed to have the most practical class. Their classes are affordable and finite (no need to commit to a 10 week class leading to any sort of licensing), and I liked that they have a workspace that I could continue to use after the class.

Last Wednesday, the night of my first class, I took the train out to Bushwick. It was a quick ride from Manhattan on the L into an industrial neighborhood. After a 7 minute walk from the subway, I arrived at Third Ward.

The receptionist had me sign waiver forms and gave me my tool bag. Included in the bag were large welding gloves from Tillman Gloves a combination square, center punch, soapstone holder, dust mask, and ear plugs.

There were seven of us in the class. Three of us are programmers and one is in finance. We each have different reasons for wanting to take the class: I’m building a desk, one guy wants to be able to build bike frames, and two of the guys both own land upstate and want to learn to maintain farm equipment. Our instructor, Carlos Fernandez-Dieppa, is a full time metal fabricator who works out of 3rd ward.

The class started with general safety instructions and then we moved to the machines, going from machine to machine and learning the specifics of how each operates. We started on the chop saw then we went to the grinding room.

In the grinding room we used a stationary disc sander. Carlos was clear that we should never wear gloves around the disc sander lest the glove get caught and dragged into the wheel. The class was definitely hands-on; at each machine, everyone in the class got a turn. Seven students made for a good class size, giving us each a chance to try the machines but not allowing too much boring down time in between while others were using the equipment. While students ran the machines, Carlos gave feedback about how each student used that machines for the whole class so we could learn common pitfalls.

The next machine was a Jet horizontal band saw. The instructor explained that this was a a precision machine and would be the preferred machine for all angle cuts. It was obvious that Carlos had experience by the tips he gave us, including, “Only lift the saw just above the work, that way you don’t have to wait for it to drop over a bunch of dead space.”

Next, we went back to the grinding room and put chamfers on our 45 degree cuts. After that, the last machine we used was the cutoff blade on an angle grinder. As the class let out I walked around the metal shop. Outside of the students in our class, there were three people working on different projects. One guy was using the Bridgeport mill in the machine shop to drill blind holes. I didn’t want to make a nuisance of myself in the shops, so I explored the rest of the co-working space.

3rd Ward is a large, multipurpose space. From what I saw of it, I would guess there are probably 50 desks for regular day to day coworking. The wood shop was quite impressive: the floor was probably 40ft x 100ft. Because I was there on a Wednesday night, I next stumbled into the Drink and Draw event. Drink and Draw is advertised on the website as a bunch of artists getting together to draw and have a beer.  The website didn’t mention that there would be a nude model – but there she was. I hung out for 5 minutes, then remembered the metal shop was still open.

My instructor Carlos and the metal shop manager were also there, so I hung out talking to the guys. I explained about how I had been watching welding videos online particularly Welding Tricks and Tips. The manager then introduced me to Amazin Blaze.

After years of reading about machine shops and machining it was so cool to finally be in a room with a mill. I asked if it was ok to geek out and ask questions. The guys said ask away. I stayed in the shop for more than an hour after my class ended, and I’m looking forward to next week when I can begin working.

I have a plan for my desk, and I think it’s realistic that I will be able to put it together if I join Third Ward after my class ends. Before that, as a practice run, I’m going to build some stools and a bed.

TL;DR I liked my metal shop class so much I left a room with a naked woman to go hang out in the machine shop.

Homebrew is the future of package management

Tuesday, March 13th, 2012

I have been doing a lot more development on my Mac in the past two months, and it is a much better place to do work than it was two years ago. I moved to GNU/Linux for two reasons: apt and tiling window managers. Homebrew almost completely fixes the package management
situation on OS X. In fact, I think it is better than apt for my purposes.

Homebrew is awesome because it democratizes packaging in the same way git does for contributions to a large project. I don’t think this democratization an accident given that Homebrew is based on git, and github. The barrier for creating a useable and maintainable with
anything on github is so much lower than it is in any other system that contribution is much more likely.

If I want to submit a patch to a Debian or Ubuntu package, I have to go through layers of bureaucracy before it gets approved, and then wait months before friends can see and easily use my contribution (when it gets put into the next release). With Homebrew I can package a new program and have it easily accessible to a friend in hours–they need to point their Homebrew repository at my fork.

I think that more successful package management systems will move toward the Homebrew model. ELPA for emacs has somewhat moved in that direction. I’m not sure of the exact state of clojars, but I would think it’s pretty open. Virtualenv and rvm are interesting, they eschew system wide installs which is good because that encourages experimentation, but they don’t integrate well with version control.

I don’t think a system like Homebrew would have developed on Linux. It had to develop in a closed environment. On Linux, if you’re good at packaging and have an interest in that, you will end up contributing to a distro. Once you’re on the inside in a distro, the ease-of-access problems fade away. On OS X, everyone is a second-class citizen, even the technically savvy developers.

There is a Homebrew branch for Linux that I’m hopeful for. I wonder what Canonical will do. They seem to be pretty tied to bzr, which is a dead end. They also put a lot of effort into Launchpad, another dead end.

System 76 review

Tuesday, November 15th, 2011

So when I started my new job at, I got to chose my computer.  I asked for a system 76.  I wanted to support a company which made quality ubuntu machines.  I really wanted to like this machine.

Ordering experience

I decided that I was looking for the wilddog performance model.  I then had to tell my boss I wanted a computer named the “wilddog performance”.  Come on, I’m an adult, not a gamer.  I wanted a model with two dual-dvi out ports on the graphics card, it was hard to figure out which of the available cards from the website would have this feature.  The card that seemed most applicable – the system76 listed “nVidia GeForce GTS 550″ didn’t exist anywhere on nVidia’s site.  Eventually I figured out that this was a GTX 550 Ti, which did indeed have two dual dvi out ports.  I notified a salesperson from system76 about this via email, they still haven’t updated their website.  I placed my order, about 10 days later the machine came.

Build quality.

The machine was boxed without a manual and only a couple of pieces of styrofoam, I appreciated this. It would have been nice for them to send an ubuntu recovery USB stick, but no great loss. Overall, it seemed like a well built machine, simple but well built, which is fine.  I really don’t see much need for mini-towers anymore.  My machine has no cd drives and only a single ssd drive, I don’t need all that extra volume.  When I first picked up the machine I could hear something rattling around inside it, opening the access panel revealed an errant screw.

Initial startup experience

The machine started up into a fresh ubuntu install, with a very clean onboarding process.  The second reboot however resulted in a blank screen.  Ctrl-Alt-F2 to a terminal, and startx had me back into the windowing environment.   After some googling, I realized that I needed to run

$ sudo apt-get install --reinstall nvidia-current

With that, ubuntu booted normally and I had a reasonable ubuntu experience, system76 was out of the picture.

Overall impression

It worked, it’s a simple machine with (eventually) supported hardware. I don’t think that system76 actually did that much to make it a pleasant linux experience. I’m on the fence as to whether or not I would buy from them again. The machine is blazing fast, but that’s thanks to intel (ssd and quadcore processor), not system76.

XMonad on Ubuntu

Sunday, January 17th, 2010

The biggest reason that I wanted to switch to Linux was tiling window managers. OS X is particularly bad at window management. I am constantly dragging this window here, changing the size from a single corner, rearranging my windows, and cursing. All of these actions are tedious, repetitive, slow, and theoretically scriptable. By default tiling window managers never overlap windows, and they provide good keyboard management for window arrangement. Alas they are only really available on X11.

There are many tiling window managers. Off the top of my head there is ratpoison, sawfish, awesome, xwem – written in elisp, stumpwm – written in Common Lisp, and xmonad – written in haskell. I really want to use stumpwm to get a chance to play with common lisp a bit more, but xmonad seems to be a lot more popular. So for now I am using xmonad.

installing xmonad was a simple “sudo apt-get install xmonad”, making it available as a window manager from the gnome-login was more complicated. X11 has a concept of display managers, from what I can tell display managers control your intial login to an x11 system. The standard x11 display manager is xdm, this runs your ~/.xinitrc and ~/.xsession . Most of the information about installing and customizing xmonad recommends editting these files. However under Ubuntu 9.10 gdm (Gnome Display Manager) doesn’t run your ~/.xinitrc . This is very frustrating. gdm does however have a concept of switchable sessions, when you see the login screen for ubuntu, after selecting the user, at the bottom of the screen there will be three drop downs (DRAWING A BLANK), (DRAWING A BLANK) and Session. By default under Session there is Gnome, Gnome-failsafe, and xterm. I ran some apt-get install command (DRAWING A BLANK) that added an option for xmonad to this list, and sure enough upon selecting it, xmonad started on login.

Starting xmonad in this way lets you play with it, but I of course wanted to customize my xmonad preferences. Piecing together from the xmonad faq and some blog posts I came up with this setup, it feels hackish, but it’s a start.

This setup starts nm-applet – the network monitor control thing, this make my laptop automatically connect to my wifi. It also starts emacs, firefox, and rxvt. Then it runs some xmodmap commands to map the key to the right of the right ctrl-key to mod5, my xmonad configuration uses mod5 as it’s hot-key. I will explain my experiences with x11 key mapping in my next post.

There is a directory /usr/share/xsessions/ which contains files that describe the session dropdown box for gdm. In this directory I made a file for xmonad2.desktop


[Desktop Entry]
Comment=Leightweight tiling window manager

The exec line is the important one, it tells gdm to run xmonad.start. xmonad.start is what I am using instead of a ~/.xinitrc , this is the part that feels very hacky



xrdb -merge .Xresources

#trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --height 12 --transparent true --tint 0x000000 &



#if [ -x /usr/bin/gnome-power-manager ] ; then
#   sleep 1
#   gnome-power-manager

if [ -x /usr/bin/nm-applet ] ; then
   nm-applet --sm-disable &

#kmix --keepvisibility
emacs &
xterm &
firefox &

#most basic xmodmap stuff
xmodmap -e 'remove Lock = Caps_Lock'
xmodmap -e 'keysym Caps_Lock = Control_L'
xmodmap -e 'add Control = Control_L'
xmodmap -e 'keycode 166 = Hyper_R'
xmodmap -e 'add mod5 = Hyper_R'

#feh --bg-scale /mnt/archivio/foto/2008-2009-dublino/2009-04-10-stefano/hapenny-desktop.jpg &
#exec ~/.xmonadrc
exec xmonad

The last file that I have editted is my xmonad.hs file. This is a haskell file that sets preferences for xmonad. For now all it really does is tell xmonad to use mod5 for it’s hyper-key


import XMonad

main = xmonad defaultConfig
         { modMask = mod5Mask
         , terminal = "urxvt"

And with that I have a minimally usable xmonad setup. Xmonad’s default hot-key is mod1 which is mapped to alt/meta , an unusable meta key makes emacs useless, thus the change. Many people use the windows key, but I need that for super in emacs, I plan to use the document key for hyper in emacs, thus mod5 for xmonad.

All in all I am enjoying xmonad. I’m not completely familiar with it yet, but it seems incredibly powerful and fast.

My biggest gripe with the X11 graphical environment is the lack of sane keyboard shortcuts. OS X got this very right. CTRL-Q generally quits an app, Apple-Q always quit apps. The biggest thing I miss about OS X though is the input modifiers for text areas. In OS X, the default bindings for almost every text input box are very similar to emacs bindings. Try it. C-w, C-a, C-e, C-p, C-n, C-k all work as expected, if I had put in the time I could have made the meta bindings work too. I know of no equivalent for linux and I miss it. The upside though is, I only really use emacs and firefox, a media player, sometimes a terminal, a chat program, and an irc client. That is a small number of programs to customize, and if I get my act together, I could do chat and irc in emacs too.

Ubuntu and the t500

Sunday, January 17th, 2010

I’m lucky I got the laptop on a Friday, I am spending this whole weekend setting it up to my liking.  It is very nice to be able to take the time to get things right the first time.  This post will detail the hardware and drivers issues that I have dealt with putting ubuntu on the t500.

For the most part everything just worked.  The install was quick and painless – as I have come to expect from ubuntu.  With one exception I didn’t have to do anything at the command line.

The only area where I may have run into trouble was with wireless drivers.  This laptop has an intel 5100 or 5300 wireless card, I’m not sure.  I say may have because I think the problem was really with my router not ubuntu drivers.

My laptop wouldn’t log into my old netgear router when I got it.  The netgear router showed up in the list of networks available, but after entering a password, the network icon just spun and finally failed.  Friends often have trouble logging into this router.  I changed the security on the router to wep from wpa, no luck.  Then I removed all security from the router, no luck.  I tried to login on my MBP, but that didn’t work either.  Finally I put the security on the router back to WPA and my MBP still couldn’t login, the t500 was never able to login to that router.

I bought a new D-Link dual band router.  I had a little trouble initially logging into the N network with the ubuntu and I ran.

sudo modprobe -r iwalgn
sudo modprobe iwalgn

those commands removed and reinstalled the linux wireless kernel module. After that, I was able to log into both networks with ubuntu. I’m not sure if that was a linux problem or a router problem, during the time when I was having trouble logging into the D-Link, my MBP had a little trouble too. Now everything works, and I’m happy.

Graphics worked off the bat. My t500 has switchable graphics, it has an ATI Mobility Radeon 3650 and built in Intel graphics. On vista the os will use the ATI chipset when you want better performance and the intel chipset when you want better battery life, it switches without rebooting, there are no drivers that accomplish this feat on linux, xp, or windows 7.

Next I wanted to test the different driver combinations for performance. I was only interested in 2d performance, so I used the gtkperf benchmark. I was running xmonad with the test window fullscreen when these results were produced.

Intel Drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:51:08 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.24
GtkComboBoxEntry - time:  0.18
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.03
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.02
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.41
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.13
GtkDrawingArea - Circles - time:  1.47
GtkDrawingArea - Text - time:  1.05
GtkDrawingArea - Pixbufs - time:  0.14
Total time:  4.89

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:51:15 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.25
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.03
GtkToggleButton - time:  0.07
GtkCheckButton - time:  0.04
GtkRadioButton - time:  0.13
GtkTextView - Add text - time:  0.42
GtkTextView - Scroll - time:  0.02
GtkDrawingArea - Lines - time:  1.13
GtkDrawingArea - Circles - time:  1.37
GtkDrawingArea - Text - time:  1.45
GtkDrawingArea - Pixbufs - time:  0.14
Total time:  5.31

Ati Open Source drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:54:06 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.30
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.06
GtkProgressBar - time:  0.05
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.03
GtkRadioButton - time:  0.05
GtkTextView - Add text - time:  0.38
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.00
GtkDrawingArea - Circles - time:  1.62
GtkDrawingArea - Text - time:  0.95
GtkDrawingArea - Pixbufs - time:  0.07
Total time:  4.78

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:54:12 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.29
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.04
GtkToggleButton - time:  0.08
GtkCheckButton - time:  0.04
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.41
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.01
GtkDrawingArea - Circles - time:  1.62
GtkDrawingArea - Text - time:  0.95
GtkDrawingArea - Pixbufs - time:  0.07
Total time:  4.87

Proprietary ATI Drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:59:29 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.27
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.03
GtkProgressBar - time:  0.02
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.02
GtkRadioButton - time:  0.05
GtkTextView - Add text - time:  0.40
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  0.99
GtkDrawingArea - Circles - time:  1.18
GtkDrawingArea - Text - time: 19.52
GtkDrawingArea - Pixbufs - time:  1.97
Total time: 24.72

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:59:56 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.28
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.03
GtkProgressBar - time:  0.02
GtkToggleButton - time:  0.07
GtkCheckButton - time:  0.03
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.60
GtkTextView - Scroll - time:  0.02
GtkDrawingArea - Lines - time:  1.10
GtkDrawingArea - Circles - time:  1.28
GtkDrawingArea - Text - time: 20.11
GtkDrawingArea - Pixbufs - time:  1.98
Total time: 25.83

It seemed like the open source ATI driver was a little faster than the Intel driver, but not by a signficant amount. The proprietary ATI driver was atrocious for text. I don’t know that I would notice a difference in day to day use though, when I get a chance, I will run the same tests on my MBP through OS X and virtualized Ubuntu. For now I will be using the Intel drivers. Things will get interesting when my docking station comes in and I start playing with my 30 inch screen.

New laptop — the hardware

Sunday, January 17th, 2010

On Friday my new laptop came in.  I got a Lenovo Thinkpad T500, with 8gb of ram, 3Ghz processor, and 120gb ssd drive — for $1612.  There are great deals at the Lenovo outlet store.


1. Wow is this fast.

  • I can boot, login, and have firefox reload 20 tabs in about 25 seconds.
  • I can run “find / | wc -l” in .5 seconds
  • Netbeans and eclipse start in 2 seconds

I attribute the speed to the ssd.  Linux helps some, but the ssd makes all the difference.  If you use a computer more than an hour a day, go out and buy an SSD now.  The speed is absolutely incredible

2. I like the build quality.   The screen doesn’t flex at all like my 2nd gen MBP pro did (first gen case).   I’ll see how it holds up.

3. The keyboard is awesome, except for the flex under the s,d,f,w,e,r,x,c keys.  When I press those keys, I can feel the key activation, than I hear a thump as the keyboard back hits another part of the case.  I will talk to Lenovo about this, I might be able to fix it with shims.  This has been discussed extensively .

4. I don’t like the trackpad nearly as much as I did on the MBP.   Two finger scrolling on the MBP was awesome.   On this machine I have to use the right side of the trackpad for vertical scrolling.  This isn’t a huge deal, I am working very hard to set up my environment so that I don’t have to manipulate the pointer at all.  On the plus side, the trackpad buttons feel much better than the button on the MBP, that button was so wide that when I would slap one side of it with my thumb, sometimes it wouldn’t register, others it would twist down on that side instead of moving down in a straight path.

For the most part hardware is hardware.   Running linux on this machine is much more interesting, I’ll talk about that next

My side project list

Sunday, December 20th, 2009

So I was trying to figure out tonight which side project I felt like hacking on. Here are the main ones I have.

Ugh, where to start.  Terminalcast is cool, it impresses people, no one uses it, myself included.  Here is what I want to improve on it.

  • increased participation, I would really like some help developing it,  I’m the only one who plays with it.
  • better marketing, aside from the initial blip on reddit/hackernews, there has been little response from the community.  I would like to see a community form around terminalcast of users and consumers.  I want to encourage the craft of programming.
  • better recording,  I want recording to be much easier.  I would really like recording to be integrated into a terminal emulator, and integrated emacs.  It would be great if I could get it so that recording is the default (keep a one hour buffer of your past activity) and publishing is what you have to decide to do, rather than decide to record an interesting terminalcast and publish it.  I think programmers do interesting things all the time, if we lowered the bar to publishing those interesting things, we would all be better off.
  • better playback, right now sound sync on playback isn’t great, it works sometimes,  I would also like to get seeking to work reliably.
  • Color playback.  Currently color is recorded, but rxvt-js can’t interpret it on playback, that would help so much.  Right now emacs is very hard to follow, because the viewer has no idea where the cursor is.

pydbgr – emacs integration

Pydbgr is an amazing python debugger written by Rocky Bernstein.  It is leaps and bounds better than pdb, because it is debuggable (yes a debuggable debugger), componentized, and connection agnostic (it doesn’t care if you connect via STDIN or a socket).  I want to work on an emacs mode that allows me to set breakpoints without editing my code.  I can pretty much make this work for single threaded/single process python code.  It falls on it’s face especially with multi process code (think django runserver).   Making pydbgr read the breakpoints is fairly trivial (I may have even had it working at some point), I think I can deal with the concurrency issue with middleware fore django .

django unit testing

In the past couple of months I have really gotten into unit testing, well just testing, I don’t know if my tests are unit tests, integration tests, or regression tests, probably some combination.  I have found some things to be lacking though, primarily emacs integration.

I already have code setup so that I can run any single unit test file in my code base with a simple keyboard shortcut, this is incredibly helpful.  I also have a shortcut to test my whole project.  What I really want are functions that allow me to run a single test in a unit test suite ( so that I don’t have to comment out or change the names of other test_* functions in a test class).  I also want a “run last test command” shortcut, so that I can fix a broken unit test, and rerun the last test command that made that break, without navigating back to the original test file.

I would also like to look into parallel django unit testing, so that I can run unit tests more quickly.  It would be especially cool if I could run all my tests on another box, in parallel, and have that box ship me back the results.  if I could have all my tests run in 5 seconds, and see any failures, that would allow me to avoid a bunch of errors, that are otherwise ignored because I don’t run my whole test suite as frequently as I should


I can’t go into a lot of detail about this.  I have been working on a django Form.Field that lets me build word-definition (example) match relationships in an inline formset,  I know what I want to do, but it is often very obtuse to work through django’s metaclass hackery especially when you layer the admin system on top of the field metaclass system.

rope / ropemacs hacking

rope is a refactoring library for python.  It allows me to make awesome transforms on my python code.  It is mind numbingly slow though.  It is also incredibly opaque.  I use it through pymacs/ropemacs .  Pymacs is a library that allows python to expose objects to lisp and vice versa, it runs over a socket.  I have no idea how to debug or sanely develop on the rope codebase, I seem to have 5 minute loops as I make emacs reload the python module.  Rope seems to have slowed down a lot recently, probably because I have installed a lot of system packages.

Hopefully this blog post will motivate me to work on some of these problems. is up and running

Wednesday, September 30th, 2009

I released a project that I have been working on in my free time today.  Since thanksgiving last year I have been playing with terminal emulators and javascript.  I wanted a better screencast tool.

I realized that if I captured the exact output of programs that was going to my terminal emulator, I could reanimate that in another terminal emulator.  The difference is, I wrote a terminal emulator in javascript so that it all is done on the web.

Terminal emulators are incredibly complex pieces of software.  After looking at a couple of them, I settled on rxvt.  Line for line I rewrote rxvt in javascript.  It works (kinda).

I’m proud of it.  I hope that people find it useful

Who the fuck is yaron shohat and why does he want my social security number

Thursday, May 21st, 2009

I was trying to book a flight on yesterday, and I had a horrible experience. When you go to and search for a flight you are redirected to, initially I didn’t notice this. After I entered in my credit card information (with my Bank of America card) and hit submit, I was redirected to , or a similar url. On this page I was asked for the last 6 digits of my social security number and my email address. I hesitated and looked up is apparently part of Visa’s “Verified by Visa” program. There were very few hits on google for the site, and most of them were people worried about phishing scams. I did a whois on and got these results.

      yaron shohat
      8200 Greensboro Drive Suite 1100
      Mclean, VA 22102


   Registrar Name....: REGISTER.COM, INC.
   Registrar Whois...:
   Registrar Homepage:

   Domain Name:

      Created on..............: Fri, Aug 23, 2002
      Expires on..............: Sun, Aug 23, 2009
      Record last updated on..: Sun, Nov 09, 2008

   Administrative Contact:
      RSA, The Security Division of EMC
      8200 Greensboro Drive Suite 1100
      Mclean, Va 22102
      Phone: +1.8665606153

   Technical Contact:
      RSA, The Security Division of EMC
      8200 Greensboro Drive Suite 1100
      Mclean, Va 22102
      Phone: +1.8665606153

   DNS Servers:

Visit for more information about


Register your domain name at

What the fuck. I don’t care if it is really sanctioned by Visa, and is a legitimate site, I won’t submit any information to such a poorly administered site. This is horrid, I don’t know who is responsible Visa, Bank of America, Jet Blue, a hacker who got into Jet Blue, or Jet Blue’s credit card processor, and frankly I don’t care.

At this point I went back to the previous page, and realized that I hadn’t been filing in my credit card information on, but I opened a new browser and went to going through the same steps and I realized that searching for a flight on their home page redirects you to Next I looked at the form on the last page from where I wrote in my credit card info, to see if it submitted to or,  apparently that page does submit to and the response gives an http redirect to

I will call jetblue and my bank today to see what is going on.  Whatever the result, this was a horrible experience.  If this was legitimate, in some ways it is even more scary.  I had a hard time understanding what was happening, and I’m a programmer who deals with the web everyday, my parents are dead in the water.