Thursday, December 23, 2010


Discover has offered me a job. Or rather, they indicated that they're going to send me an offer for a job next Wednesday.


I'm (probably) going there! My visit there was a such a magical and revolutionary experience that I feel strongly compelled to be there, come what may of Discover. I feel like the Gold Coast is a place that I could settle down in. I've been in an anti-suburb mentality for so long that this is a striking revelation, but its so beautiful that I've been converted. Like Saul on the road to Damascus. I can see myself living there for good. Of course, I almost definately wont be able to afford to right now, but its a long term goal.

I've been loathe to post pictures since Google somehow decided to forbid nearly all of the past ones from outside access, but I'll give it another shot with some Chicago memorabilia.

The Chicago Cultural Center building literally made choke up from the beauty of it.
Partially, perhaps, because the beautiful building isn't merely some religious or government facade, but a library!

Or at least, a former library. Sadly all the books have been moved elsewhere, it seems, but the inscriptions praising books are still gloriously on the walls. The books are now presumably in this building, which may compete in beauteousness. I found myself becoming irritated just then by not being able to take a virtual tour of the inside of that building; Google's streetview has given me a curious sense of what aught to be possible.
Also sadly, the inscription from Victor Hugo (above) seems to suffer from some translation issues. I can't quite parse the latter half, but I get what its meant to say in any case.

The Ballroom of the "Library" looks out on the sculptures in the park, nicely captured here with HDR.

Nearby they also have a giant tree with lights on it! I suspect it may not be a year-round installation, though.

Is this truely Falcor's office? How Lucky!
Ah, wrong spelling.

And in unrelated news, Rachael and I finally finished the Bulbdial Clock, and it is good. This is the "technoclub dancefloor" view of it; ie: from the side and up close:

Wednesday, November 17, 2010

NWS, dunnhumby

Got a callback from dunnhumby, which I'm excited about.

Somone finally responded to my request for NWS help on the R mailing group. Turns out it was an inconsistent capitalization issue. Resolving this got it working fully on the Ubuntu machine, but only partially on the Cygwin machine. IE: I can now send commands and have them executed, but I can't get the values returned to the server. The only error I'm getting on the client machine is "No NWS server found;" which is odd because its the client and you'd think it doesn't need to have the server software running on it.

Friday, November 12, 2010

Where did my pictures go, blogger?

Looks like half my pictures have spontaniously declared themselves forbidden. Hopefully the issue will work itself out.

Had a telephone interview with Discover (the credit card/ banking company) for an Analyst Leadership program in Chicago this morning. It went reasonably well, but it was significantly more difficult than the other interviews I've had recently, asking some pretty pointed technical questions. I was able to give good answeres for most things, but there were a few that I couldn't answer at all. It sounds like a great position and I'd love to do it, so I'm optimistic.

Tuesday, November 9, 2010

Jobs and bikes and Rachael

Had an interview with Macy's today, which I'm excited about. I had given my resume to a representative at the career fair on the third, and they called me yesterday to schedule an on-campus interview. It went very well; I was confident and enthusiastic, had good answers and examples for every question, and the position is a good one. It's a two-year rotational "leadership development" program, where they spend 8 months in three different departments, then go on to be an analyst. He couldn't go into much detail about the nature of the projects that the analysts work on, but he mentioned things like modeling new store openings, which could be cool.

I'm glad I went into the interview with a positive attitude; I had a pause when I saw what they had posted on their website. The representative at the career fair had suggested I go online and take a look at the "capital planning position," but the only thing with such a description I found was something where the requirements were "highschool education or equivalent." I was afraid that was the position they were interviewing for, and we were going to have an awkward moment where we realize that we're both not interested. Happily, this was not the case. The position is attractive, and I'm interested in doing it.

Here's some cool pictures! Sorta like how having a certain model of car makes you suddenly notice how many of the same model there are on the road, having a sweet bike has suddenly made me aware of all the other sweet bikes on the road. Like these:

In roughly decreasing awesomeness order: The first one has actual flannel covering the tank, which I must say is an excellent gypsy touch. The second one is actually in good shape, and the third is just cool cause its big and black.

On my own bike, I think I may have some vibration issues. The super-sweet origninal badge has apparently vibrated itself to pieces, along with the license plate:
How will the curious onlookers determine the engine size and make once it's shattered? Woe!

Here's a picture from our birthday trip to Columbus, with Rachael pointing to a photo containing excellent advice.

We had lots of delicious beer, for example:
From the first (and best, beer-wise) pub we went to. Sadly I can't remember the name of it; nominal aphasia being something I apparently have. [Rachael reminds me that it was called "Barleys," which is a pretty straightforward and memorable name. We also went to a place called Elevator, and one other place who's name escapes me (but had good pizza). IT WAS AWESOME.]

Rachael also solders like an angel:
No seriously, she's really good. I showed her how to do it, we both made some globby solders, then she figured out how to get them machine-perfect. Really. I've never seen hand soldering so good. Anyway, she showed me her angelic technique, and we proceeded building the Evil Mad Scientist Bulbdial clock. I was happy to have found something geeky and machine-y we could do together, having failed to arouse her enthusiasm with my "sand and paint my headers" project.

Here's Rick and I deepening my mom's worst fears and pretending to share a shake. Except its a week-old guiness that the bartender pulled out of the fridge, and Rick has become a guido.
It started off as a joke, but it turns out that week old Guiness is really quite pleasant. So I finished it.

And I didn't feel the least bit bad about it.

Friday, November 5, 2010

Phone interview with Discover in Chicago on Friday!

Wednesday, November 3, 2010

Distributed computing, elections, and house of leaves

My earlier moaning about how easy it would be to implement the NetWorkSpace parallel computing architecture on a *nix system has proven to be less than well-founded. I set up a couple of Ubuntu machines and put the software on them. Initially I was trying to use my Mac as a master, but there were issues in the path naming still. I tried from a second Ubuntu installation, and NWS doesn't run properly from it. I've got an open (perhaps overly verbose) posting on the R mailing list, and Revolutions politely let me know that they make their money from support and thus can't help with the open-source stuff. Also that they don't support Ubuntu. I've all but decided to bail on the NWS package and try to implement MPI. It's apparently the industry standard, but also more difficult.

Yesterday was election day, and I was happy to see Libertarian candidates for all offices except for the Senate (where I voted for the only independent). I'm pleased to see that we'll at get a split government, that should at least tie them up and prevent them from doing too much more damage for a while. But it also precludes repealing the health care bill via legislation. Hopefully the courts can do something about it.

Rachael and I have started reading House of Leaves. I almost put it back on the shelf when I saw the back cover said something about "postmodern delight," but XKCD made a joke about it, so I'm willing to give it a chance. It's been engrossing thus far. The "unsettling" part of it is how effectively it erodes the fundamental assumptions you rely on for interpreting reality. I think the non-standard typesetting is aimed at least in part at assisting the narrative in that regard.

Of course, undermining one's grasp on reality might be a really unhealthy thing, but it also might help get rid of some ungrounded assumptions one might have. As long as you reassemble what you deconstruct.

Or maybe think of it as "Refactoring."

Wednesday, October 27, 2010

Son of Hamas

A very moving book, and I think potentially very important book.

The gloss: the first son of one of the founders of Hamas grows up full of hatred for his Israeli oppressors, gets caught before he can do anything really criminal, suffers inhumane conditions in Israeli prisons, witnesses Palestinian prisoners torture other Palestinian prisoners, and comes to question the cause he was prepared to fight for. He witnesses the brutality of people in his own culture and comes to think that there may be something wrong with it; seeing that Palestinians were treating each other and the Israelis at least as badly as the Israelis were treating them. He becomes appalled at the universal violence and just wants to make it stop. The Israeli intelligence agency asks him to act as a spy; exposing suicide bombers and violent plots. He agrees on the condition that his information won't be used to kill anyone, only to imprison them. Ultimately this stipulation proves impossible, he's worn down by years of living a double life, and he escapes to the US around 2005 and writes this book about his experiences.

Its moving because of Mosab's empathy, passion, bravery, and his willingness to admit that he had been wrong. Its potentially important because it is an outspoken and clear instance of a person with plenty of reason to be filled with hatred (and the position to act on it) forsaking violence and devoting his life to making peace. Not peace in the sense of a negotiated truce, but a genuine, deep healing that obviates violence. More on this later.

Mosab is truly admirable.

Monday, October 25, 2010

I must post this in the midst of my elation before I run into another crippling error

I was composing an email to the R mailing list to ask for help on the issues I described below. Wanting to seem very serious and well-researched, I double checked everything I was doing before sending it. In the process, I found the error. Maybe I should take that as an approach to problem solving in general: write out my problems as if I'm addressing the ultimate experts on the issue. That way if I fail to figure it out, I have a nice message ready to send, but if I figure it out, then I figure it out!

Here's the email:

I'm trying to set up a large cluster of computers at my university
lab. All clients are running XP SP3, and I'm working from a OS X
10.6.4 machine set up as the master; using R 2.11.1 on all machines.

I've succeeded at getting password-less SSH access to the client
machines using Cygwin, but I'm having issues with initializing sleighs
that seem to stem from the "DOS vs UNIX" path-style issues.
I've tried what seem to be two different correct approches, and get
two different errors.

1. The unix-style way; accessing the contents of the C drive through

scriptDir="'/cygwin/c/Program Files/R/R-2.11.1/library/nws/bin/'",

2. The DOS-style way, where the changes are to the "scriptExec" and
"scriptDir" options:

scriptDir="'c:\\Program Files\\R\\R-2.11.1\\library\\nws\\bin\\'",

I've verified that the "" exists in the path
"C:\Program Files\R\R-2.11.1\library\nws\bin\" on the client

At this point I was going to paste in the exact errors I was seeing
and I realized I was missing a directory ("\R\") from all the path's
above, and that I was doing the unix style one with "cygwin" instead
of "cygdrive". Now, the "dos-style way" seems to be working completely
and totally.

So now I can supposedly do parallel computation. I'm almost afraid to take the next step, for fear of what horrors inevitably await!

unix R and windows not playing nice.

This is beginning to have a very quixotic feeling to it. One of the lab consultants who's been away for five weeks on an internship stopped by today, and as I was updating him on my progress on the project it struck me how little I've actually accomplished in five weeks. True, I've overcome some major bariers and discovered some interesting things, but ultimately I'm still not doing distributed computing.

So far, my accomplishments include figuring out the SSH paswordless login with RSA encription, and getting the client machines to respond to unix commands from the host. Before (when I was using COPSSH), I kept getting an error saying that the 'env' command couldn't be found on the remote machine. 'env' is a really basic unix command, but it seems that it wasn't included in the version of Cygwin that was packaged with COPSSH. I resolved the issue by just installing Cygwin directly. The first time through, I didn't realize how enormous the full Cygwin set of packages is and ended up installing 6gb of mostly unknown material to a computer. I was gratified to see that SSH still works with just the minimal subset of Cygwin packages.

The problem I'm having now is even more frustrating, and gives credit to the recommendation from ReVolution not to mess with Windows clients. The issue is with the quoting of file paths, of course. Unix uses forward slashes and Windows uses backslashes; and in most programming languages the backslash is an escape character. Why oh why would Microsoft have chosen to ignore this reality? Unix and C were around and well established before they came on the scene with their dos-style paths... could that have done it explicitly to make it difficult to operate between platforms (and thus increase switching-costs?).

The crux of the issue is in the last line, right after the "\nws\bin\" bit. See that extra forward slash that follows? It seems thats inserted automatically by the stored function, regardless of what I enter as a parameter. Which is, incidentally, the following:






scriptDir="'c:\\Program Files\\R-2.11.1\\library\\nws\\bin\\'",



The double backslashes are what's required to overcome the escape character issue. The "scriptDir" is supposed to be the path to the file on the remote machine where the NWS client script is located. But despite the fact that I'm supposedly executing it with a windows style command (what the scriptExec option scriptcmd does), the function appends the forward slash. It is, I think, an error on the part of the writers of the NWS package. Now I'm trying to dig through their code to see if I can fix it; chances are slim.

Equally grim news on the Snowfall front; I can't even get sfCluster running on the host machine. Many many dependencies are apparently missing; starting with the gcc compiler (which I fixed). Even more frustrating, when I call make install, I get another error that looks like it was an issue with the coding:

Ok. Now call 'make install'.
sh-3.2# make install
Making/probing required folders...
mkdir -pv /usr/local/bin
mkdir -pv /usr/local/etc/sfCluster
mkdir -pv /usr/local/lib/sfCluster
mkdir -pv /usr/local/share/sfCluster
mkdir -pv --mode=700 /usr/local/var/sfCluster/tmp
mkdir: illegal option -- -
usage: mkdir [-pv] [-m mode] directory ...
make: *** [install] Error 64

What I should probably do is just drop both the macbook and the windows machines and try it on my Ubuntu laptop.

Tuesday, October 19, 2010

Distributed Computing

I achieved a milestone in accomplishing my distributed computing project at the computer lab: I was able to get SSH commands sent from one machine to another without using a password. This is the second major achievement: it allows the master machine to distribute the workload to the workers. The first major achievement was the netWorkSpace server, which allows the workers to access the same variable-space.

HOWEVER, its a limited achievement. I was able to get passwordless SSH working from my Mac, off campus, connecting through the VPN to a windows machine. When I try to do the same thing from a windows machine in the same room, I fail. Go figure: reduce three major layers of complexity, get a bad result.

Ironically, I think the issue arises from connecting from a windows machine. SSH apparently works by checking a certain file for public keys, checking them against the private keys on the remote machine if it finds any, and asking for a password if it doesn't. I think the problem lies in where it's looking for the keys. On a *nix machine (like my mac), it looks in the /User/Home/.ssh directory by default. The closest corollary to that on a windows machine (where I've installed COPSSH (which implies Open SSH and Cygwin)) is buried in "program files/icw/home/user/.ssh." It seems that when I try to connect from the windows machine, even using the BASH terminal emulator, it's not looking in that directory for the key. I've also tried adding that directory to the %PATH% variable (which lets me launch SSH from a CMD prompt), but I still get asked for a password.

I'm quite sure there's a way to make it work, I just haven't found it yet. The consultants in the lab office have all become quite amused at my exasperation... I've tried to recruit a few of the more savy folks into helping me, but thus far I haven't had an enthusiastic response. I guess supercomputing isn't attractive to everyone, eh? How do I reach these kiiids?

On the other hand, a few of the people I've talked with about running problems on it have been enthusiastic. One guy I know has a friend who's working on a protein folding simulation in Matlab (which netWorkSpace also supports), which I think would be an ideal sort of problem to run on such a setup. His description of it sounded incredibly computationally intensive, and it sounds like the problem has the attributes that make it viable for distributed computing; ie: many independent sub-problems arising from a small amount of data.

I've also found some lectures on the subject from Google, which is exciting.
Apparently they teach this series of classes to their summer interns. I'm gratified that my post-graduate studies have enabled me to follow along and understand, at least through the parts I've seen so far. I learned, among other more technical things, that its distributed computing, that I'm trying to achieve, not parallel computing. The latter refers to tasks broken up between processing cores in a single machine, the former refers to tasks broken up between multiple machines. Same spirit; differing challenges.

Added: Dad mentioned that the "before" picture "actually doesn't look that bad..." Its just the light. It was bad. But of course, the most significant parts are the ones you can't see; all the internals that didn't work now (mostly) do.

Comparison Shots


It's taken some time, and I'll admit that there were moments when I was ready to give it up as a lost cause. But at last, this 1969(ish) CB450 has been rebuilt, somewhat restored, and wholly resurrected as a cafe racer! It starts on the first kick (usually), goes really fast, and only stalls occasionally!

Short list of things I've done to the bike:
rebuilt the engine,
rebuilt the carburetors,
replaced air filters with pods,
replaced mufflers with short chrome exhaust pipes,
replaced clutch cable and lever,
replaced front break cable,
replaced throttle cable (with a hacked-together one),
replaced and sealed the gas tank,
rewired the electrical system for the lights and replaced the headlight,
replaced the chain,
hacked the old seat into something in the cafe-spirit and made a seat cover,
made the right hand tank badge,
bought a vintage left hand tank badge,
painted everything that wasn't chrome,
installed clubman handlebars,
installed bar-end mirrors.

And a short list of things I still need to do:
jet the carbs,
rebuild the stator,
rebuild the clutch.

But that stuff should be easy, right? I think I may also do something non-standard with the chrome panel on the gas tank, I was thinking of doing a checkered-diamond pattern on it in black.

Friday, October 15, 2010


Rachael and I went to an awesome wedding last weekend between Steve and Cassie Kemple. It was at the Mockbee, which is an old factory building that's usually used as a music venue. The ceilings are all vaulted and 20 feet high, and there's giant arched windows in the main space with the stage. The did the ceremony downstairs in a long vault that was painted white, and they played Beatles songs. For dinner, there was Adriaticos. Any other pizza at a wedding is sort of 'meh,' I feel, but Adriaticos is like a gift.

The wedding itself was really sweet, you could tell it was a couple that really cared about each other.
We had a blast dancing and helping the bar make money. We pretty much danced straight through (with minor gasping, stich-soothing resting periods) till everyone was gone, then we helped clean up.

Rachael was layin down some serious next-level dance moves with Eric. I was too entranced to get a picture, sadly, but here she is with Patrica and Matt:

Thursday, October 14, 2010

Also, HDR is nice.

Wednesday, October 13, 2010

This what I was saving the piston rings for,

turns out.

This is pretty cool: . I knew that that figure had some background; its neat to see that its a formal mathematical concept with a name and lots of history.

Seat cover!

A few too many people said "is that... electrical tape on the seat?" when I showed them the otherwise super-slick photo below (it was actually black duct tape), so I felt motivated to finish the seat.

[Added] A part of this post got cut off when I sent it though the email interface:

I had made the seat cover a few months ago, but I couldn't figure out a good way to attach it to the seat. I was going to just glue it on, but I couldn't get the mounting brackets off of the bottom (they're rusted on). Plus, getting it on tight and smooth would be a nightmare (and likely a total disaster).

Rachael suggested that I sew it on, to which I responded: "Pfffff! The bottom is made of metal, how'm I gonna sew something to metal?" Gradually it dawned on me that she probably meant that I should lace it on, which is, of course, the perfect way to get it tight and deal with the brackets. So thank you, Rachael, for your insight.

Tuesday, October 12, 2010


Wednesday, October 6, 2010

Parallel computing

After a bout of extreme dwarf fortress enthusiasm (which is about to end in a tantrum spiral), I've recovered some of my enthusiasm for more productive geekery. After work today, I figured out how to remotely uninstall R from windows machines, and to install the newest version. This is essential, you see, for my massive parallel computing experiment that I've been stewing on for a little while.

I got my boss's go-ahead to run the scripts about an hour ago (I can't sleep, and he's got a late-email habit); and now I've got all 141 lab machines ready for paralellization. Now I've just gotta get Snowfall figured out and a good problem coded into it. I talked with a professor today on that subject; he was curious about R's optimization capacities. I discovered (after writing a naive email to him on the subject), that R can interface with all the best solvers, including CPLEX and COIN-OR. I think that means that the project is a good idea.

Sunday, September 12, 2010

Rick Nicak's Self Titled album

And another thing that's been going through my head, but for much much longer: you should probably buy this album:

I've been listening to Rick record this thing for the last year or so (really only the summer; for actual recordings that made it onto the final product), but I'm now filled with awe in listening to this thing I got from iTunes.

And for posterity, if rabid fans want bootleg copies of some of his unreleased stuff: let me know and we'll work out a deal!


Best story I've read recently. The word's been stuck in my head all week, on a low level, while I've been on vacation. I realized, when I got home and was idly browsing my browsing histrory, that it's the name of Charles Stross's recent Hugo-winning story.

That the word's been stuck in the back of my mind is unsurprising, considering that I've recently read one of his books, have been reading his blog feed, and have enjoyed everything that's been given the Hugo award.

It was that mix of imaginative and believable that comes from the story-writing idea of "changing one thing, then examining how everything else changes." And with that said, and with that one "changed" assumption made, its unreservedly the most brilliant thing I've read. Maybe not as impactful on my future self as some other works have been, but, standalone, the most brilliant.

As of now, you can read it by googling the word "Palimpsest" and clicking the "archived page" link. Last week it was directly available, but I suspect there were some copyright issues involved in keeping it freely available. Happily, I've managed to read it and preserve it.

Tuesday, August 24, 2010


Rick and I made music last night. We recorded a few takes of a song he's been working on lyrics for, and we worked out some guitar parts I can play. Until our joint work is finished and published (Rick's shooting for the end of September), you can enjoy his solo work on iTunes and on his website: (he may have to register a new domain; he's now messing around on a six-string bass)

There's a sweet widget on the homepage where you can listen to the whole album, as well as a link to buy it. I can't tell for sure from the image, but it looks as though he may have used Papyrus as the typeface on the cover. Have webcomics not taught their lesson?

Thursday, August 12, 2010


I saw this sculpture at the University of Michigan, just outside the Law quad. Its been around for a while, and it bears a striking resemblance to components of my Meme-Gene/Body-Soul sculpture design I did a year or two ago. (Edit: the sculpture was done by Chuck Ginnever in 1972).

The angles look really close to being the same; I wonder if the similar mathematical considerations motivated the designer of this sculpture. As I recall, my method was this:
  • Take an equilateral triangle with side length S as the base
  • Copy the triangle and rotate it by 22.5 degrees (which completes a 360 degree turn in 16 turns)
  • Move the copied triangle up on the x axis by .225*S back on the z axis by the same. (I chose .225 just as an amusing reference to the 22.5 degree turn; I think both are the result of choosing pieces per turn, somewhat arbitrarily)
  • Connect the sides of the copied triangles and make parallelograms out of them, and repeat till you complete a circle (four circles, in my case)
The parallelograms that result make shapes that fit the description of these pictures very closely. I wish I had had a measuring tape on me; it would be cool to see if it obeys the proportions.

More generally, they probably fit into the formula for a helix somehow: x=cos(t), y=sin(t), z=t. Which, of course, is the message encoded in the sculpture I designed.

But given the two arbitrary parameters I made (using 16 pieces per segment, and making the segment depth equal to 1/100th of the degrees per turn times the side length), its remarkable that someone else evidently chose to make the same arbitrary parameter choices.

Of course, they're not completely arbitrary, just guided by what seem like arbitrary aesthetic motivations. Sixteen is the fourth power of two, everyone knows powers of two are cool, and the other two nearest options (8 and 32) would have made it too elongated or too squished, respectively. As for the second choice: turning 22.5 degrees into .225 and using it as the ratio of the sides to the depth just seemed funny.

So we could express it's height H in terms of the side length S, Segments per turn G and number of turns T:


So, if
G=16, S=1, and T=4, it would stand 14.4 feet tall.

If it were made on the scale of the sculpture at U of M, where I'll estimate the S at five feet, it would be exactly seventy two feet tall. Is that significant? Not sure, I was just surprised that it came out to an integer value.

Curious about this, and in a procrastinative mood, I'll test how common this is. Given integer values of S, it looks like H will be an integer 1/5th of the time:
Now, its true that S=5 is the first of these integer values... and it remains true independant of the values of G and T even if they're not integers themselves. Unless T is an irrational number. It doesn't seem to matter what G is.

Cool stuff.

But wait, there's more! I found the sculpture on U of M's website, and it has a beautiful description and a meaning entirely other than what I associated with it.

Though, I note that there happen to be five parallelograms! Ahhh! Am I glimpsing deep mathematical truths, or merely numerological coincidences?

On Technocracy

Its funny how suspicion of technology and faith in technocracy seem to coincide in some people. Are these conflicting phenomena, or is there a connection between them?

It seems plausible that people who have little understanding of technology are unaware of its limitations, and as a result are overly optimistic about what it is able to achieve.

Perhaps this explains why people who call themselves Luddites also seem to often ascribe to technocratic government institutions.

Tuesday, August 10, 2010


Friday, August 6, 2010

I'm taking a couple of computer science classes in the fall, and they assume a prior knowledge of C++. Accordingly, I decided that I should probably learn it ahead of time, and have spent the last week attempting to do so. I've come to the point where I'm fairly comfortable with the syntax and style. Behold, a sort function I've just written!
I must say, I'm not a fan of member functions. I understand their purpose as far as making the code easier to read, but setting them up and debugging them seems not worth the hassle. As far as language evangelism goes, I think I prefer the functional style.

Thursday, August 5, 2010

Amusing Artifact

There's some wonderfully ironic and telling symbolism in this paperweight I came across today. Its intended to look and feel like gold (its really heavy), and is probably made of lead.

Thursday, July 29, 2010

In the month since I finished my thesis project, I've read the following books:

The Left Hand of Darkness
The Name of the Rose
The Structure and Interpretation of Computer Programs (Chapters 1-3.5)

I've also visited a professor at the University of Michigan, (pry not a good fit, turns out), and arranged to visit a bunch of professors at IU in a couple of weeks. Douglas Hofstadter even emailed me back, though to say he'd be unavailable 'cause he's out of the country. I was super nervous in sending him a request to meet face to face, since he's been so influential on the course of my thinking and studies in the last couple of years. But his reply email was prompt and gracious, not nerve-wracking at all.

My professional situation is looking up, and I've also been able to sign up for a couple computer science classes for the fall. I'm taking Data Structures and Discrete Computational Structures, as well as a Discrete Mathematics. Since the programming classes assume a prior knowledge of C++, I'm going to have to shift my summertime programming self-tutelage to that language, from LISP. I think I can get all the way through the C++ version of "How to Think like a Computer Scientist; hopefully that'll be sufficient.

Wednesday, June 30, 2010


Get it?

Here's another hint:

for a subtle pun, read this page:

Aslo, Rick and Matt blew up my stereo though extreme malicious negligence. And it was my 14th birthday present!

Thursday, June 17, 2010

Epistemology paper

And here it is!

My giant epistemology paper, that is. Forty-six pages. I'm fairly pleased with it. It certainly lacks nothing for boldness. Skipper said that writing a good paper takes a month, and he wasn't exaggerating. I just hope he agrees that its good.

I had four separate people copy-edit it, and they all found a ton of completely non-overlapping egregious typos that I overlooked in my many readings of it. Matt and Rachael both found 20 to 30, each! Different ones, too! And I was pretty sure I had caught everything! Its amazing how much tiny errors damage credibility, and how unable I appear to be to see them.

Good to be done with it. Its by far the longest paper I've ever written, and also the most difficult in terms of content. It pulls in lots of the reading I've done over the last couple years, its almost like a year 1 paper (if I was actually in a PhD program).

Tuesday night I went to bed all freaked out. I had 8500 words written, but I had painted myself into a corner and I figured I needed to backtrack and delete a 1000 word section. I was laying in bed thinking "maybe I'm not cut out for this, maybe I should just get a banking job or somehting; maybe cognitive science research is too much for me and I should just be an observer...". I shook off the funk in the morning, deleted the offending section, and wrote the last 2500 words or so straight through.

Friday, June 11, 2010

Triumphs and Travails in Geekdom

My goodness, it seems that finishing theses has a strongly negative effect on blog-motivation! Never fear though, soon I'll have a 9,000 word paper on Simplicity (I know, right?) to share with you! I was afraid for a while that it was straying dangerously far from the theme of the class (Occam's Razor, and the tortured modern interpretations of it), but the professor reassured me that he was equally non-plussed by the several hundred pages of reading he had us do for the class, and that he'd be much more interested in reading something about the cognitive science of simplicity, which is what I'm writing about. Probably wise to at least mention the assigned readings, though; so far I've done lots of exposition on stuff I've read over the last year outside the class and and plenty of integration thereof with nary a mention of 'grue' or 'minimal reversals.'

I had a moment of programming-induced rage last night (involving lots of swearing at hung terminals and throwing empty cranberry-juice bottles), triggered by realizing just how awesomely specialized R apparently is for some tasks, as compared to Python. I'm working on this "Think Python" book, and one of the tasks it had me do really stretched the capabilities of the language. It asked me to read in the official crossword list and do some list operations on it; such an apparently easy task (from my R-soaked perspective) that I almost skipped it. As it turns out, making a list by traversing the word file and appending each of the 1ook or so words to the previous ones takes up a LOT of memory, and it was a "great learning experience". Apparently Python creates a new list at each iteration, so instead of one list with 100k-some elements you get 100k-some lists, each with as many elements as precedes it in the list. I know I could do the math to say how much excess memory that uses, but meh. I tried it several different ways, looking up efficient idoms in python to do the task, and every one of them caused the shell to hang for at least a half hour. None of them actually "finished" in a way that gave me a usable list; if I had the patience it would eventually give me back my command prompt, but would remain hung.

Maybe if my first real programming experience had been with a general purpose language like Python, I would have been expecting this. But I've been working in with super-specialized-for-statistics-"R" for the last year, which does tasks like this efficiently in the bleary-eyed milliseconds of post-waking-up pre-first-cup-of-coffee time frame that it takes for the enter key to spring back up after being depressed. Want to read a file and do list operations on it? Great! Type "someList<-read.csv('filename')" and its done. I gather that this built-in function is actually rather well-designed for the task, though I've never had a chance to really appreciate it until now. After some plastic-bottle-throwing and chair-overturning, it came to me that if I just initialize a vector of the length I needed and then used indexing to assign each word to its proper place as I traversed the list, I should avoid the memory issues. I was ready to throw Python (in the computers trash bin) if it couldn't handle that. Happily I found that its quite comfortable with that sort of operation, but my travails weren't quite over yet. The "range(x)" function will create a vector of length x with pleasing rapidity and is the closest equivalent to R's "vector(mode, length)" function I could find. Unhappily, if you try to print this vector with x=100k-some, it hangs the shell. What the EverlovingEff? This is another thing that R does without blinking. I suppressed my boiling anger long enough to find that if I just assign it to a variable without printing it, like this: "someList=range(x)," everything is fine. It makes a list of the requested length, but fills it with consecutive integers. Presumably this isn't the most memory-efficient way to go, since all I really wanted was zeros, but it does the trick.

Now, at long last, I could read the file and assign words to slots in this damn vector. Here's the code that I finally came up with, at 1am:

for line in fin:
for line in fin:

It works, just don't type "result" into the shell, for the love of god! Why was I doing all this, you might ask? Merely so that I could eventually implement the "bisect" algorithm (which incidentally Python already has a version of) to reduce the search space in sorted lists. Its pretty neat: If you've got an alphabetical list of words and you want to know whether some other word is in it, you could just read through the list, testing each word to see if it matches the new word, and after 100k-some operations you'd be done. OR, the non-naive way to do it: test whether the word is in the first or second half of the file based on alphebetization, then test the half that its in, then test that half... and continue till you've got a list of just one or two words you can test. The virtue is that the bisect algorithm completes the search in twenty-or-so operations, rather than 100k-some. Neat eh? Now that I've finally got a list with indexes, I can actually write the function!

I'd be pleased if some expert Python programmer would offer a comment explaining that I'm doing it all wrong and give me a nice simple solution to the problem. Pleased in an ironic way.

A few more complaints, though: IDLE doesn't seem exceptionally stable on OS X. I can't use the keyboard interupt to stop processes that are taking for ever, and I end up force-quitting it much more often than seems ideal. Also, I can't seem to run more than one shell at a time. Both of these things aren't a problem on my sparkly-new Ubuntu-running salvaged laptop from 2004; though that's got its share of headaches.

Speaking of which: Cory Doctorow has a glowing review of the latest Ubuntu release, co-opting the "It just works!" slogan erstwhile applied to Macs. As much as I'm enjoying Ubuntu, I can't say that I've had the same experience. Version 9.10 worked pretty well, aside from issues with the wireless driver (5 hrs of (clueless) shell scripting), not being able to hibernate when the lid is closed (no solution, just have to do it manually), and the wireless being disabled when it comes back from manual hibernation (no solution but reboot). I enthusiastically upgraded to version 10.4 when it prompted me to do so... only to find that I had to do some shell scripting to get the video driver to work, plus the wi-fi issues were back and harder to solve. I ended up going back to 9.10 in frustration. Complaints issued, I must say that I rather like it. Its sleek and fast, and there's free software available for everything I want to do. My advice to would-be Ubuntu explorers: be prepared for deep-googleing problem-solving sessions, at least if you're using a Dell x300.

Tuesday, May 18, 2010


And if for whatever reason you should want to read it, here it is. And here is the R code in its native format, should you want to run it. Though, you'd need the WRDS data to actually run if profitably, and I think it would be a breach of contract for me to post it. Anyway if you've got access to WRDS, you can use my code.

Its good to be done. I spent an order of magnitude more time on it than some people think is acceptable for that sort of thing. I think as a masters thesis it accomplishes the goal: it demonstrates that I'm capable thinking abstractly and creatively, as well as able to master technical tools. The thesis about bankruptcy prediction; trying to find a new source of information to improve predictive accuracy. Its even moderately successful, but probably not successful enough to be a dissertation.

While I wasn't doing that last weekend, I played Portal. Its a short (awesome) game. Today I found this screenshot on my desk, and couldn't immediately figure out why I had taken it. The humor takes a second to seep in, and only if you're familiar with the game. Note that I took it while the game was still downloading.

If you get it, its pretty funny.

Monday, May 17, 2010

Food flowers

My hanging garden is developing a really pleasant aroma, as my plants
flower. The smell of the flowers keeps catching me off guard; it's
tangier than typical decorative flowers, I get this deep urge to sniff
around and find out where it's coming from. Evolutionary adaptation?

Monday, May 10, 2010

Action Suit

Who could pass up a three piece thriftstore suit, which actually fits, and is made by Levi's?

They say the "Action Suit" suit was a pinnacle of bad marketing research; I say it a pinnacle of awesomeness too lofty for the hungover hipsters that were its intended purchasers. Look at me above, engaging in a manly speaker wire-running adventure, emphasized in its awesomeness by crisp creases and a snappy vest. The facial expression, which could easily be mistaken for some sort of bloodlust in the context of all that feral (and yet refined) masculinity, is actually just an artifact of wondering what Rick just knocked over in his room.

Speaking of the spirit of innovative cleverness and speaker wires, check this out:
On the surface, it appears to be an interrupter switch spliced into a speaker wire, hanging from my ceiling. And that's exactly what it is! Its purpose is to control the on/off-ness of the speakers I just installed on my back deck, which were the object of my speaker-wiring adventure.

Saturday, May 8, 2010

Next thing to fix:

the charging system. The battery is getting drained from running the engine (meaning that its being used for spark), and the headlight intensity varies with the engine speed. I suspect I'll have to rebuild the alternator. Maybe I'll just swap it for the one in the bike I bought for Rick. Might as well take the chrome headers, while I'm canibalizing.

And I'm afraid I've gotta do it before the 20th, 'cause I need a street legal bike for the skills test.

Friday, May 7, 2010

Tuesday, May 4, 2010

NeverDie ambigram

GRE studying, Thesis-making, Coffee-shop-not-buying

I've been hitting the GRE study book hard, and with some payoff. Last test I took (the 8th) I got a 83.33% percent on, up from 73.33% on the first one. My time is improving significantly too, from 45+min to under 30. This is good, since these old paper-tests allow 30 questions in 30 min. However, I'm afraid I might be creating some bad habits in rushing, since the CBT tests are 28 questions in 45 min. On the other hand, I feel like I need to do it in the 30 minuet time limit just so that my raw scores are comparable to the GRE scores they've got in the book. We shall see. I'll have a nice mountain of data that I can do dorky things with when I'm done: the scores of each test, which questions I got wrong, how long I took on each test, how long I took on each question I got wrong, the date I took the test... and then the raw data of the problem-solving in my notebook. Maybe I could categorize the type of mistakes I've made.

I finished writing the ultimate function for my thesis. Ultimate in the sense that its the last thing I had planned to do, anyway. Its only taken me since last summer to learn enough [R] to be able to do it. I probably could have done it at any time last quarter; it took about 20 minutes to write when I finally sat down to it this afternoon. Its been running for about an hour and a half now, so I guess my computer is procrastinating proportionally to how I did.

The plan to buy Koka Cafe and remake it into Logic's Cafe has cratered. The lessors of the business told us they weren't interested in out proposal; no further information. I'm guessing "undercapitalized 20-something grad students" entered their minds. Ah well, it was a nice thought to entertain. I made a neat spreadsheet for it, anyway, and using it could probably pretty well estimate the worth of any given restaurant I walk into.

The first NeverDie ambigram I made for my tank turned out comically bad. It looked alright from straight-on, but at any other angle it looked like a cookie screwed to the tank. The 15-20 coats of laquer made it turn yellow, and all the layers were visible on the edge where I cut it out. It also wasn't even close to round. The silver ink looked alright; but like silver ink rather than metal.

So I made a new one. I made a thinner wafer, sanded it, and painted it black (rather than just cooking it until it was black, which caused the first one to warp and bubble). I then took a beverage can, cut it open, drew the ambigram on the painted side, and cut it out with an exacto blade. The result is that the guitar is backwards, but no biggie. The biggest mistake was trying to attach them to the wafer with spray adhesive. The stuff isn't very sticky, it never fully dries, and it turned the glossy black paint totally matte. As a result of the first and second points, the letters that still had some of the can's curvature wouldn't stay down, and the super-glue I used as a fixxer wouldn't quite adhere either. Nevertheless, I got it worked out to a satisfactory degree, laqured it (once), and put it on. Its pretty rad (see next post for visuals). HOWEVER: the laquer is no match for handlebars-that-hit-the-tank (and its also too thin), so I need to find some way to cover it with a more durable clear plastic. I'll have to melt something, I imagine. Maybe I'll experiment with clear plastic bottles.

Dammit, I just now realized I could have easily turned the cut-out part of the metal I used for the ambigram to make another one, in negative.

Saturday, May 1, 2010

Redbuds are my favorite tree,

Rachaels are my favorite girl.

Thursday, April 29, 2010

So I might buy a coffee shop...

Well, a third of one anyway. Chris is blogging all the details at . I started of just building the financial model for them, but as I became more convinced of the model, I got more enthusiastic about helping run it. I'll graduate with my MS this quarter, spend a year or so running this coffee shop and studying. The only purpose taking classes next year would serve is to discipline myself into studying; but it seems silly to pay upwards of $12k for that motivation, especially when I could end up with a similar amount of owners equity in the same period. Plus, what an awesome experience, right? We'll see how the few unresolved items shake out (ie: liqueur license, signing the lease, signing the loan...).

Returning to a more familiar theme: putting hotter plugs in my bike seems to have improved the starting and running situations. I had inadvertently put the coldest plugs available in it; no wonder they were getting fouled even with the mix screws all the way in.

Its still got some idling issues, but they're different now. It only idles stably at 4k rpm, like before, but now if I close the choke lever by two thirds and reopen it it'll settle down to a nice 1.5k rpm idle. However, it wont come smoothly out of this idle: I have to ease it back up to the 4k level or it'll gasp and die. Once it gets back up to 4k, it stays there unless I do the choke thing again.

I've got the NEVERDIE ambigram tank badge mostly finished. I've been applying coats of polyeurithane to it for the last couple days, its developing a nice clear dome over the embossed letters. It's a race between evaporation in my poorly sealed can and accumulation on the surface to see when it finishes.

Also exciting: I set off car alarms when I ride past them. The neighborhood totally digs me.

On the gardening front: I planted another tomato plant and a pepper in a topsoil bag inside two worn out white t-shirts, hung from my back balcony with four bass guitar strings and a hose clamp keeping the hook from unbending. My garlic are finally all sprouting, I've got some Habanero sprouts, and my ghost pepper seeds have got tap roots. It will be a spicy, spicy fall this year.

Aaand finally, I got the GRE "Big Book;" 54 practice tests. If this isn't good enough, I'm incorrigible. I got a 73% on the test I took this morning. So if I were to do two a day and improve by a half a percent each time, I'd be perfect in less than a month. That's achievable, right?

Monday, April 26, 2010

Brake Cable: Fixed

Headlight: Broken
Spedometer: Inexplicably out of calibration
Sparkplugs: Still getting fouled, but with a little bit of tan coloring on the electrode.

Friday, April 23, 2010


Another thought related to the post below on compression: I'm not sure that the most compressed program is going to be the fastest in all cases. I don't have the requisite computer science knowledge to say for sure, but it seems that compressed computer programs need to be expanded before they are run, and this takes time. If a compressed program had to be expanded every time it was run, and had to compete with the already-expanded version of the program, then it would certainly be slower.

But then again, a program that contains is compressed, but expands to the larger program could be said to actually consist of both the compression and the expansion, and thus it is larger than the expansion alone.

Thursday, April 22, 2010

Simplicity in Epistemology

I got to make a pleasing contribution to my Epistemology class today, and some of my QA degree got called into service. Before class everyone was talking about how the reading was really tough (incomprehensibly so), and someone pointed out that "that guy" (me) was probably best suited to understand it. I was skeptical that this was true, but it actually worked out to be so in some cases.

An interesting point on compression: we were trying to ground Vitani and Li's claim that the most compressed (or compressible) description is most likely to be true (this is "Minimum Description Length" theory). Taking a page from Baum, I suggested:
  • Think of the phenomenon we're observing as a process with inputs and outputs, existing in an environment of finite resources.
  • Two processes may exist that have identical inputs and outputs, but which may differ in the process by which the output is produced.
  • If one process takes longer (ie: if the program is larger), then there will be proportionally more outputs produced by the faster process per unit of time, until the input resources are expended.
  • Therefore, there's a higher probability that the output we're observing has been produced by the simpler process.
Further (as Baum argues), when selection is added to this picture, the simpler process gets selected for and the more complicated one gets out-competed and dies out.

Later, We were trying to figure out why a model with fewer parameters gives larger priors. I pointed out that when you add parameters, you loose degrees of freedom, which is comparable to reducing the sample size, and thus increasing the variance. This (I guess?) would have the effect of reducing the prior. I might be blowing smoke.

Skipper was also intrigued by likelihood ratios: I explained that the "likelihood" of a model for a data set is the ratio of the product of the observed data (fit to the model) to the product of the theoretical values if the model was true. This is, at least, roughly how it works.

Broken brake cable

It never ends, it seems. This is the only cable I haven't yet replaced, and to be fair it was my fault. I apparently didn't put a locking washer on the nut that keeps the front break drum from rotating (and there's lots of force on that nut), and it came out. The result was a weird noise as the brake cable wrapped itself around the hub, and me being shocked when I pulled the lever and found it completely slack. Its surprising that it didn't bind up and pitch me over the handlebars, and for that I'm thankful.

I'm trying to think of what else could break. The only area I haven't overhauled or replaced is the gearbox; so the next trouble is probably there. I have felt the clutch slip a little bit when I really give it gas...

Update: whether or not there was a locking washer on the bolt (and I suspect there actually was) doesn't matter. The threads were stripped right out of the hole. So despite having procured a new cable this morning, I can't install it properly until I get the hole tapped and a bigger bolt put through it.

Wednesday, April 21, 2010

The Return of the King

My bike is, triumphantly, in front of my apartment again.

Several things, apparently, went wrong.

1. The gasket on the distributor cover had a gap in it, and this was causing a short, causing the plugs to not fire. See the post below.

2. When I left the ignition on for five minutes (without it running), it blew a fuse. I put two spares in the toolbox.

3. The sparkplugs were getting fouled; I got a spare and also put it in my toolbox.

4. Carbonized plugs are, evidently, the result of running too rich. I'm trying to figure out how to properly adjust the carbs now.

5. The bolt holding the gas tank to the frame came out.

6. The fuel hoses I installed get kinked when they get hot, as a result of the way the new gas tank makes them sit. Not sure if a longer hose will help, but I'm gonna try. Otherwise I'm just gonna have to modify the petcock on the tank somehow.

7. The lovely toaster tank doesn't have a tube connecting the two lobes of the tank to equalize the levels in them. So there can be lots of gas remaining in the left side of the tank, but if it doesn't slosh over the hump in the right side, the carbs will dry up. I might have to make a major modification to fix that.


I fixed my distributor-cover electrical-shorting problem by making a
gasket out of the back cover of a notebook:

Thursday, April 15, 2010

A very breif victory

So I got the pants, gloves and helmet, and rode my bike back down to Clifton:

I had the pleasure of parking it in front of my house once:
And it broke down. I was riding it in traffic, trying to get the idle right (it was running really really high). I adjusted the idle stop for the right cylinder, it blew a bunch of white smoke, and then apparently stopped firing. I got it to start again and managed to get it to the College of Business, where its parked now. I'm afraid I might have to tear apart the engine again.

Local Music

Eclipse 'pry the best band I've seen live in Cincinnati. Click here to listen.

"Salsa with Cuban influence," as they say, and they blend Jazz with hip-hop vocals in a way that I find pleasing. It's what rap can be when its practitioners focus on rhythm and rhyme (and enunciation), when they have live virtuoso instrumentalists backing them up, and when they have lyrics with positive content.

Tuesday, April 13, 2010

Rachael and TJ, Sittin in a tree


Actually its just her in the tree. Its a bit small for the both of us, but I'm at least under it.

Saturday, April 3, 2010

Rachael and I queue in front of That to see Vampire weekend:

Vampire Weekend takes the stage:
the giant blond lady's powers are invoked:

Back in cincy, a musician gets a head massage before going on:

Friday, March 26, 2010

The first flowers of spring

And more motorcycle pictures.

I had Jack take a picture of me tightening the Last Bolt. Really only the last bolt on the engine, and a false sunrise 'cause I ended up taking that plate off and reinstalling it at least five more times to try to get the clutch right.