Aphyr

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9

On this page

25 March 2009 Neotokyo Soundtrack
31 March 2009 Implant Surgery: Part 1
3 April 2009 Next Book Underway
13 April 2009 Marriage Equality - Religious Freedom
19 April 2009 Comps Done
23 April 2009 Hidden Spaces
8 May 2009 Ruby Vodpod Bindings
24 May 2009 Comps Grade, New Book
26 May 2009 Microsoft's 2019 Vision
29 May 2009 Character in the Dark
7 June 2009 Graduation
22 June 2009 Thoughts on OS X 10.4
25 June 2009 Ubuntu 9.04 on the Macbook Pro (3,1)
10 July 2009 Engagement Wanted
12 July 2009 Construct: Ruby Configuration
23 July 2009 Construct 0.1.3

Neotokyo Soundtrack

Back in 2004 I played this mod for UT2004 called Neotokyo, which, in addition to being a really fun futuristic shooter with a good community, had an excellent soundtrack. Over the last five years they've been busy porting the game over to the Source engine, and are almost (fingers crossed) to a first release. One of the coolest things to come out of their efforts so far has been the just-released soundtrack put together by the talented Ed Harrison: a two-disc album which I now have the pleasure of owning.

First impressions: astounding. There is not a single track among the 26 that is not worth listening to carefully. The album has a characteristic "Neotokyo" design: ominous scale and atonal drones, punctuated by sampled vocals and driven by electronic baselines. Soaring orchestral movements empower tracks like "Scrap I/O" and "Tachi", while spacious drums and harsh cello drive the centerpiece "Pravhaba" to inexorable conclusion. "Footprint" evokes a more contemplative mood, with light percussion and querulous synth piano taking time to explore the landscape, building to discontinuous crescendo. The bass sometimes feels lacking, and at some points the layered sound can become so complex it's hard to tell what's happening, but these are minor flaws in an all-around solid release, full of high-quality material. For $11, it's a bargain. Go get it while it's still around.

Implant Surgery: Part 1

I went in for the first implant surgery today, to replace the missing three upper teeth from my January Broomball accident. For those of you who haven't heard of dental implants (I hadn't!), they're roughly 1.5 cm titanium screws which are inserted into the bone where the tooth's roots used to be, ending right under the gumline. Artificial teeth are then attached to those screws.

The impact shattered two teeth, so I had to have the left-behind roots extracted from my upper jaw. Between the injury itself and having to dig around a lot to get the roots out, I'm now missing the thin sheet of bone which runs over the front of the roots, for the canine side of the upper jaw. Luckily the bone near the middle is reasonably intact. This is problematic, because the implants need solid bone to anchor to. If, upon opening everything up, they found that there wasn't enough bone to place the implants, I'd need a bone graft taken from my mandible behind the molars, and six months additional recovery for that graft to integrate. Luckily, this wasn't the case! The implants took hold in the jaw even though the labial bone wasn't intact. (Note to kids: another reason to get your calcium!)

The procedure took about an hour and a half for two implants, and was pretty much painless under local anesthesia. Started with novocaine (and another longer-lasting nocioception blocker whose name I don't remember), followed by a few incisions in the gums to expose the bone, and a lot of tugging. They drilled out the implant sites with three progressively larger bits, which go way up there. I suspect my sub-nasal sinus got real familiar with that drill, which apparently is okay. The implants themselves look like stocky, truncated conical screws, coated with a rough titanium dioxide layer which actually bonds to the osteoblasts in your bone, creating an extremely strong connection. They literally screw right in to the jaw—I remember thinking "I've stripped screws before," as they twisted in—but everything took hold right away and felt solid. After that, they packed in a processed bovine bone substrate around the sites. Over the next six months, my intrepid little osteoblasts will move into that substrate and grow new bone, hopefully back to the original thickness. Bunch of sutures finished up the job, and I walked out of there a little sore and bloody but doing okay.

The whole site is really tender, so I'm sticking to Mac & Cheese for now, but if the last extractions were any indication, I'll be basically healed in 4 days, and back to normal in a couple weeks. It is a pretty big incision to close up though, so it could take a while. Regardless, I'm pumped that they were able to place both implants today. I could get real teeth by fall, which would be terrific.

Next Book Underway

I've started having meetings with faculty and facilities in preparation for taking photographs for the next book. My goal is to explore hidden spaces at Carleton—rooftops, tunnels, basements, and secret rooms, recording messages left by past adventurers and to share the experience of discovering unseen infrastructure. Goal is to have a library of photos collected by week 6 or so, produce the book source by week 7, and have physical copies before I leave.

Marriage Equality - Religious Freedom

I was watching Glen Beck today, who suggested that legislation supporting marriage equality has a more sinister motive of suppressing church religious freedoms. This argument, or some variation of it, has appeared in a number of anti-same-sex-marriage public campaigns. For a great example, take a look at the (fantastically well-designed) Yes On Prop 8 ad archives.

The idea is this: churches should be able to decide whether or not to perform marriages in accordance with their religious beliefs. Legislating that all church perform marriages for same-sex couples who approach them would be undue government interference in religious self-determination.

On the other hand, if legislation defines marriage as between one man and one woman, then a significant number of churches (for example Reform Judaism, the MCC, UCC, and various progressive congregations) are essentially prohibited from exercising their own religious beliefs.

"Ah, but that's quite different," You might say. "We shouldn't set up the laws to allow churches to do whatever they want. What if a denomination refuses to acknowledge interracial couples in marriage?"

So perhaps churches should be restricted for larger social concerns. Of course, that brings us right back to the possibility of legal same-sex marriage. And in all likelihood, more churches will be affected by not being able to perform desired marriages than would be forced to perform undesired ones. Canada's had same-sex marriage for roughly five years now, and their legal structure doesn't require pastors to perform marriages if they don't agree. In fact, the same goes for the Netherlands, South Africa, and Norway. So why not advocate—if religious freedom is really your concern—for marriage equality with clauses ensuring churches won't be forced to act inconsistently with their beliefs.

Comps Done

My comps is done.

I just finished writing version three—the final release, as it were—of my senior thesis, or "comps", for Carleton. It's an introduction to the Casimir effect, integrating aspects of quantum electrodynamics, thermodynamics and statistical mechanics, numerical modeling, material science, history of science, and a sampling of experimental literature. There is no original research here (save correcting a typo in the parallel-plates derivation which I suspect everybody knew about). It's just an exercise in figuring things out, and explaining them to others.

I wrote the paper from books, papers, and discussions with my advisors and peers over the last six months. Last term, I also delivered a 70 minute general-audiences talk, which went pretty well. Since then I've been integrating feedback from faculty and peer advisors over two rounds of review. Since the beginning their feeling has been positive, but I have finally (I hope) addressed all remaining concerns with the paper. This version may be tagged "stable".

Hidden Spaces

The Hidden Spaces project is going really well, and is responsible for the slew of new photos this week. I'm immersed in Carleton lore right now, digging through tunnels and Caucus to try and piece together a story about this campus and all the weird things behind the scenes. It's an incredible experience.

Ruby Vodpod Bindings

I recently wrote some quick and dirty Ruby bindings for the Vodpod API. They're pretty rough right now, but usable.

Comps Grade, New Book

Two things of note this week: I received distinction on my Comps, and submitted the first draft of Character in the Dark, my new book, to Blurb. If the copy I get back looks good, I'll put it up for sale.

I originally intended to work with Engage Print like I did for Sampling Error, but I'm running into logistical constraints. First, it's not really practical for me to bind more than 6 copies by hand, and I'd like to make the book available to a wider audience. Second, Engage's Indigo printer can only run up to 12x18", which is slightly too small to really give the images good space on the page.

Hence, I'm sacrificing the pleasure of hand-making the book, and having good control over color/paper, for the convenience of Blurb's automated print-on-demand system. I'm guessing price will be somewhere around $60; details when I finish the final version.

Microsoft's 2019 Vision

If you haven't seen the 2019 video, you should definitely take a look at Microsoft's ideas about where we might be headed with computer interface design. It's bold, slick, and leaves out a really big question.

Watch the video, and ask yourself: "how much work are people getting done?"

Do you see anyone writing a document? Responding to an e-mail? Correcting the errors the automatic voice transcription software made in the meeting minutes? Writing software? Designing a building? Laying out a magazine? Precision work is almost totally absent from this vision.

And with good reason: glass keyboards are awkward! There's no haptic feedback anywhere in this vision! In fact, physical controls are almost entirely absent. That's great--I love soft interfaces--unless you want to, say, touch-type, align two elements with the arrow keys while watching the results, adjust the volume of your music player in your pocket, dial a number on your phone without looking, or play a video game.

In fact, I think there's a fundamental problem here which hasn't been addressed. Vertical workspaces are great for looking at, since they take up a large solid angle in your visual field when sitting. However, holding your arms up for 8 hours to interact with one of those displays is tiring; which is why it's nice to have control surfaces laid out horizontally. These two opposing goals mean it makes a lot of sense to maintain blindly-usable physical interfaces--so you can input data where it's comfortable, and read it where it's easiest to see.

It turns out that virtual controls make a lot of sense for some applications, especially those where high-bandwidth (either in rate or space) input isn't necessary. Look at the success of the iPhone for a great example. Microsoft is showing some terrific ideas here. It just isn't the end-all be-all of interface design, awesome as it looks.

Character in the Dark

Graduation

I just finished my last undergrad assignment—Hector's E&M test. Got an A in the course, actually, which really surprised me. I'm now done with Carleton, and graduate in a week. I'll be living in Madison for a few weeks, and then moving out to San Francisco for my new job. Should be exciting!

Also, I ported Cortex Reaver to Innate and Sequel 3.0.0. It works, but things are a bit shaky still.

Thoughts on OS X 10.4

I recently got a MacBook for work, and thought, "Hey, here's a chance to finally stop mucking about with all the inconvenient things about Linux! Flash won't be broken half the time, I can use things like VMWare Fusion and Adobe Lightroom... it'll be great!" So I installed 10.4, and started trying to get some work done. Here's my thoughts for that day.

Bad stuff

Spaces is a total joke. Every time you open an application it switches workspaces to wherever the application was last. You can enter spaces to drag apps around, but that means that if you want, say, a new firefox window on the current workspace, you need to switch to another workspace, fire up a new window, enter spaces, drag the new window back to the space you want, and exit spaces to the new workspace. It's completely broken.

Also, "new window" is a difficult concept. I wasn't able to map a keyboard shortcut to it, even after giving up on the OS X keybinds configuration pane. Vague mutterings on the internet suggest you can write an Applescript program to accomplish this, and link it into quicksilver, but that's still more keystrokes than I need, and Spaces gets in the way again.

The zoom button is dumb. It never does what I want--namely, seeing much more of the window. Invariably it does something ridiculous like shrink in one direction and give me 40 extra pixels in the other. No maximization--and no horizontal or vertical maximization either. No window snapping. No alt-drag to move windows. No alt-middle-drag to resize. In fact, no middle mouse bindings at all. Huh?

Why doesn't enter open a program or file? Which are you going to do more often--open something, or rename it? Why does the enter key mean "confirm/submit/activate" in all other OS X contexts but the finder?

Home and end don't do anything like what you'd expect them to do. The terminal does default to Bash now, which is a great improvement over tcsh, but still has broken backspace, nav keys, and arrow mappings.

Good stuff

Two-finger panning is awesome. However, it's just emulating (like the Mighty Mouse) two independent scroll wheels, which can't be active at the same time. Hence you can't (as you might readily expect from both the Mighty Mouse and the touchpad) pan at a 45-degree angle; you're limited to awkward horizontal or vertical panning but not both at the same time. Oh well.

The keyboard feels pretty good. Keys are responsive, though sometimes you have to hammer on them. I prefer the Dell Latitude keyboard--tactile feedback is a little more clear, and it doesn't take as much force to ensure a keystroke is made. The fn/ctrl/alt/meta arrangement is a little weird but not bad. I do, however, question why they opted for half-size arrow keys and no navigation keys at all, when my Latitude fits all of those in a smaller chassis.

The screen is bright and clear! Slightly blue-tinted, but even color and brightness across the whole surface. It's a nice box to work with, on that alone. Integrated microphone and camera are fantastic. Little things like the magsafe connector and magnetic clips to hold the lid shut are satisfying and unobtrusive.

The box as a whole is fast, and the 500GB drive on my macbook pro is great. The wireless is kinda flaky though--something I've noticed from most Apple laptops over the last 4 years in Sys/Net.

OS X is really slick. The apps are fantastically designed, and everything works together. I also loved the widgets layer--a lot like dockapps but prettier. If it weren't for the broken window management and weird application model, I'd use it on a regular basis. Oh, and it needs Apt.

Bottom Line

I gave up on OS X and installed Ubuntu. More on that in the next post.

Ubuntu 9.04 on the Macbook Pro (3,1)

Here's what I did to get the Macbook Pro (rev 3,1) running smoothly under Ubuntu 9.04.

Turn on the nvidia drivers with jockey-gtk (the hardware drivers manager).

Add the keys for the mactel PPA:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0x8db7f87a2b97b7b8

Install lots of packages (better drivers for the wifi, touchpad, power management, backlight, etc), and remove mouseemu which causes some conflicts:

sudo apt-get install bcm5974-dkms gnome-power-manager nvidia-bl-dkms hid-dkms applesmc applesmc-dkms hal-applesmc mbp-nvidia-bl-dkms xserver-xorg-input-synaptics linux-backports-modules-jaunty
sudo apt-get remove mouseemu

Add a couple modules to /etc/modules:

applesmc
nvidia_bl

Better settings for the touchpad driver go in /etc/hal/fdi/policy/appletouch.fdi. This enables two-finger and three-finger clicks for middle and right click, respectively, and sets some better acceleration parameters.

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.touchpad">
      <match key="info.product" contains="appletouch">
        <merge key="appledevice" type="bool">1</merge>
      </match>

      <match key="info.product" contains="bcm5974">
        <merge key="appledevice" type="bool">1</merge>
      </match>

      <match key="appledevice" bool="1">
        <merge key="input.x11_driver" type="string">synaptics</merge>
        <merge key="input.x11_options.SHMConfig" type="string">1</merge>

        <merge key="input.x11_options.TopEdge" type="string">0</merge>
        <merge key="input.x11_options.LeftEdge" type="string">0</merge>
        <merge key="input.x11_options.RightEdge" type="string">1100</merge>
        <merge key="input.x11_options.BottomEdge" type="string">800</merge>

        <merge key="input.x11_options.FingerLow" type="string">15</merge>
        <merge key="input.x11_options.FingerHigh" type="string">25</merge>
        <merge key="input.x11_options.TapButton1" type="string">0</merge>
        <merge key="input.x11_options.TapButton2" type="string">0</merge>
        <merge key="input.x11_options.TapButton3" type="string">0</merge>
        <merge key="input.x11_options.ClickFinger1" type="string">1</merge>
        <merge key="input.x11_options.ClickFinger2" type="string">3</merge>
        <merge key="input.x11_options.ClickFinger3" type="string">2</merge>
        <merge key="input.x11_options.VertEdgeScroll" type="string">0</merge>
        <merge key="input.x11_options.HorizEdgeScroll" type="string">0</merge>
        <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>

        <merge key="input.x11_options.MinSpeed" type="string">0.5</merge>
        <merge key="input.x11_options.MaxSpeed" type="string">2.5</merge>
        <merge key="input.x11_options.AccelFactor" type="string">0.15</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Add an init script to swap the meaning of the function keys so they mean F1, F2, etc, and add it to the default runlevels with update-rc.d.

#!/bin/bash
# Fix fn key behavior on macbook pro

echo 2 > /sys/module/hid_apple/parameters/fnmode

Run syndaemon during login to prevent awkward touchpad events during typing:

# Prevent awkward touchpad events when typing
syndaemon -d -t -K -i 2

Engagement Wanted

My life recently has been an object lesson in extreme deviations from the norm. I got my teeth knocked out in broomball, but also landed an outstanding job in an arguably abominable economy where most of my peers have been struggling to find work and make ends meet. I'm now a software engineer at Vodpod, a web site oriented towards video aggregation and publishing. I love what I do, but how I got the job in the first place is also an interesting story.

Carleton College just started this new program called Engagement Wanted. As a graduating senior, you write a short "elevator speech" and post it on their web site. Here's mine, in its entirety:

Looking for a year-long job while I apply to physics grad school. Physics research would be great, but I also have six years experience in IT, ops, and web development. Photographer, graphic designer, *nix admin, network guy, and open source software developer. If you know anyone who's hiring (especially using Ruby), I'd love to hear from you!

A few weeks later, I got some responses. One was a pointer to an open position as a calorimetry engineer at Fermilab. Another came from Mark Hall, the CEO of Vodpod. He offered some help in finding jobs in San Francisco. However, as we talked more about the projects I've worked on, it started to look like I might be a good fit for the Vodpod team.

After a couple technical interviews (quick, explain HTTP!), they asked me to write something using their API. In between working on Character in the Dark I put together a quick and dirty set of Ruby bindings for their JSON interface and published it as an open-source gem. I guess it worked, since they offered me the job!

I talked Kryptiq, who I've worked with for the last six years, and eventually decided to go for the Vodpod job. They flew me out to San Francisco shortly after graduation.

I love what I do here. In fact, it's going to be hard to go to grad school after a year off. Right now I'm designing the new infrastructure to let our Rails app handle roughly a million requests per day, and designing the new API using Ramaze. It's a pretty cool job!

Construct: Ruby Configuration

I got tired of writing configuration classes for everything I do, and packaged it all up in a tiny gem: Construct.

Highlights

OpenStruct-style access to key-value pairs.

config.offices = ['Sydney', 'Tacoma']

Nested structures are easy to handle.

config.fruits = {
  :banana => 'slightly radioactive',
  :apple => 'safe'
}
config.fruits.banana # => 'slightly radioactive'

Overridable, self-documenting schemas for default values.

config.define(:address, :default => '1 North College St')
config.address # => '1 North College St'
config.address = 'Urnud'
config.address # => 'Urnud'

Straightforward YAML saving and loading.

config.to_yaml; Construct.load(yaml)

Define whatever methods you like on your config.

class Config < Construct
  def fooo
    foo + 'o'
  end
end

It's available as a gem:

gem install construct

Construct 0.1.3

I released version 0.1.3 of Construct today. It incorporates a few bugfixes for nested schemas, and should be fit for general use.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
Copyright © 2003—2010 Aphyr