simplify

You know, Boba’s Dad

July 17th, 2008 by matt Posted in not good enough, programming, programming languages.

For the past six months I’ve been pretty heavy into a Python web framework called Django. For the most part I’ve been quite happy with it, especially since for a few months prior I had been playing with PHP and that wasn’t making me too happy. Still, there have been a lot of things to get used to:

First off, it’s Python. Don’t get me wrong, Python is a fine language, but it is new to me. I assumed incorrectly that being comfortable with the language would be enough to make development a breeze. It was not. Python is an exceedingly obvious language, at least if you take a little time to learn it. Much more so that previous languages which felt as powerful such as C++ or Perl. Still, coding in Python has it’s quirks. There’s the whole indentation-as-syntax thing, which works much better than I thought it might, but still doesn’t read as well as I’d hoped. But, for the most part the indentation scheme avoids Brace Wars, which I find myself getting irrationally religious about. (Let’s not go there.)

Nits about Python:

You can’t mix indentation types. For instance, you can use tabs or spaces, but not both. Which makes sense on an individual line, but gets annoying if you cut and paste some code from somewhere. I have found 4-space indents work better for me than tabs, but sometimes I cut and paste code when I’m learning something new, and about 70% of code I find seems to use tabs. That’s when Python has a hissy. I don’t understand it, but I trust there’s a good reason it can’t do it on a line-by-line basis. That would certainly make my life easier.

Another thing I kept running into was with creating libraries. I’d code up a class, thow it into a folder in the PYTHONPATH and try to import from it. And what would happen over and over until I learned better? My module was never found. Reason? No magical “__init__.py” file in my folder. Yes, just the presence of the file means “hey, there’s some code here to import”. Not the way I’d have done it, but then again I don’t know the whole story.

Overall my Python nits are minimal. I don’t get the exhilaration I used to get from making something with amazing performance in C++, and I don’t get the  smile that comes across my face when I code in Perl. But I do get things done. I guess it’s a lot like VB in that way. Except not stupid. :)

My problems with Django are still evolving, but so far my biggest problem with Django is configuration. OMG it is a fucking pain in the ass.

Now, I should qualify that: If you already have a current Python, you can install and run Django pretty easily. You just download it, install it, then use the django-admin.py script to create your first app. Once your app is created you can use a mini Python appserver while you develop. You can make changes to the live app and they will get swept up into the current instance of the appserver. It’s similar to the webrick server you would use with Rails. And since sqlite ships with later Python releases, you can have a working, database-backed webapp up and running in about 5 minutes. Of course it won’t do much (aside from the wonderful built-in admin system), but still, to get started that fast is great.

Of course, no one is going to put an app into production with the little webserver that Django gives you. For production you need to tie in with a real webserver. Traditionally that means Apache, which is what I use. There are other high performance web servers that people are using (apparently with great success) with Django, but I’m old school. At least for the time being. Besides, Apache is widely available and supported on a lot of servers, so it makes for an easy target.

Or so you’d think, anyway. Getting a full stack of Apache, mod_python, MySQL, and Django turns out to be the biggest obstacle to working with Django “for reals”. I’m probably spoiled by years of working with stacks that have more integration like .NET, or just more raw ammo, like Perl/CPAN.

I believe I can honestly claim that out of the past 3 months, I’ve spent approximately 1.5 to 2 months dealing with Django configuration. Part of that is my fault. For one thing, I want to have a proper deployment waterfall: development box, staging box, client review, then client’s production.  Which means trying to set up the same damned thing over and over again. Which shouldn’t be a problem, except that I’m developing on my Intel Macbook, staging on my G4 Mac Mini, pushing to review on a Django-friendly Ubuntu hosting provider, and then finally pushing out to a Fedora production box. If this was Perl I probably wouldn’t give a shit. But it ain’t.

The weak points turned out to be mod_python (the Python interpreter which you embed into Apache) and MySQLdb (the MySQL access library for Python). The mod_python install actually hasn’t been so bad. I did have trouble at one point getting mod_python to use the correct Python version. (I cheated and renamed the one that was in the system PATH first. Lame but it worked.) Getting MySQLdb was much more of a pain in the ass. Apparently very few people use MySQL from Python (Postgres seems to be far, far more popular), because there’s basically one dude who maintains the MySQLdb library. That’s a recipe for a lot of blind corners and situations where things don’t work so well. I spent an inordinate amount of time getting MySQLdb working, and I think I still don’t have it working right on my development box.

Oh, that’s right. Did I mention that? I can’t run the full Django stack on my Intel Macbook. Partially because of the MySQLdb crap (I clearly have Intel, it clearly thinks I have PPC. Wtf?), but also partly because of one other library, Python Imaging Library. That fucker will NOT build on my Macbook. Since the main client app I’m working on uses that (sort of… I think the feature it was included for never gets used), I can’t run Django for client development on my primary machine.

All of which means I’m shelling over to my Mac Mini (which hangs daily, btw. Fun.) and developing there (In pico. Yay.), or sometimes I just give up altogether and code on the review box.

Now, this all probably sounds kind of negative. And it is, but only about short-term things. When everything is actually up and running, developing with Django is fast and pretty enjoyable. But getting to that point costs a small portion of your soul.

Worse, I think my Joel score just went down.

Yahoo Doesn’t Need A Fail Whale

July 14th, 2008 by matt Posted in humane, not good enough, rants.

I haven’t posted in a while. I’ve been crazy busy. But it’s more than that: I don’t want to post just to hate on people. And every single time I think I have a good thing to write about, it comes out negative. And that has kept me away. But, apparently I can’t deny what I am.

I’m a hater.

I just can’t help it.

Maybe it is the heat, I don’t know. But shit like this just pisses me off, and has for *far too long*:


A gentle note to Yahoo:

I DO NOT LIVE IN MOTHERFUCKING FRANCE!

And dammit, Yahoo, you know this. You’ve known me forever. Look - I’m logged in! Read my profile. Or see that I’m connected from a well known ISP in the US, with an IP address which simply *does not roam*. And cookies! You’ve got the cookies.  You can look at those and see every place I’ve asked about. None of those places is in France, or Mexico, or anywhere else you’ve asked me about.

I can’t believe this fail has lasted as long as it has. Why not just go all the way and give me a pulldown list with every country in the world on it. (Be sure to put Afghanistan first on the list and the US way down past Uganda too. Bonus points!)

See how negative I’m being? Feel the hate? It just seems so wrong.

But man, it *feels* so right.

Still, maybe I should be more compassionate. Maybe Yahoo US is underfunded and just can’t make it better. Hey! I know: Maybe the guys at Yahoo Japan can make it better. Seems like they have some extra budget over there…



Seaside

June 12th, 2008 by matt Posted in programming, programming languages. (2 Comments »)

Today I noticed that Randal Schwartz has a video up where he demos Seaside, the up-and-coming web development framework based on Smalltalk. I’ve been hearing about Seaside for about two years now, but I just haven’t had the time to look into it. Actually, that’s not entirely true. I’ve been learning new tools, languages, and platforms like crazy lately, especially over the past 10 months or so. But almost all of that has been driven by the need - real or perceived - of clients or potential clients or my own product development. Seaside, while interesting, doesn’t have the clear “this piece goes here” aspect that has warranted focused attention. Still, every now and then I’d see some mention of Seaside on Hacker News or proggit and my ears would perk up.

I don’t know Randal, aside from his reputation in the Perl community. But apparently at some point last year he went all Paul-of-Tarsus over Seaside. Ever since then I’ve been seeing “Randal Schwartz” and “Seaside” together all over the place. At some point I found Randal’s Smalltalk blog and subscribed. (Btw, Vox is just awful. My 2 cents.)

Here’s what my news reader typically showed for Randal’s feed:

  • Talked about Seaside to Perl guys in French Polynesia
  • Suckered some Perl dudes into listening about Seaside.
  • Seaside talk @ North Pole
  • I snuck my Seaside talk into another Perl conference.
  • More Seaside talking

Of course I’m exaggerating. But not as much as you’d think. He seems to take a special pleasure in sneaking up on Perl programmers with Smalltalk. And he really does seem to get around. But for all of that, there never seemed to be a video. So I was left to wonder: What is the big deal with Seaside?

[Full disclosure: I missed my whoppertunity to see Randal give his talk in person this year because I’m a tool and missed BarCamp.]

Early misgivings and/or questions I had about Seaside:

  • If you’re going to run Smalltalk, why not just run Ruby?
  • If it’s Smalltalk, it’s image-based development, right?
  • Do you remotely debug the image or what?
  • Can I tie this into Apache?
  • Why would a JAPH like Randall give up Perl?

After watching Randal’s presentation I do feel like I understand things a little better, though most of my original questions still linger.

I won’t go over the entire talk. I took a few notes though.

  • He talked about GemStone, a commercial solution that handles distributed data managment/replication, and Magma, a free solution which I guess does roughly the same thing with more work required. I spent a little over a year building a distributed fail-over system for Windows Workflow. So I can appreciate having that kind of power ready to go, and would love it in a web platform.
  • I have mixed feelings about the idea of a continuation-based framework. I struggle with the idea of preserving state too much, especially with something like a web application. But honestly we do a lot of state management in other platforms just to maintain sessions. So I’m not so sure it matters. I will say that the continuation scheme for Seaside seems to just fall naturally out of the capabilities of Smalltalk. Contrast this with Windows Workflow. If you know WF, you know that it didn’t just “fall out” of .Net: it was carved out with a chainsaw.
  • I don’t like the sound of a “canvas” approach to doing HTML. He describes it just like doing 2D graphics drawing, except instead of a canvas or DC you have an HTML “canvas” to “draw” to. I’ll have to see it hands-on to be sure I understand it, but in general I’m against programmatic HTML generation. I think this is one of the fundamental mistakes which happened with Perl web development. I believe strongly in the separation there, and also in the idea of assembling and transforming documents rather than building them programmatically.
  • While I have misgivings about image-based development (especially after breaking my first Squeak image in about 10 mins a few years back), I really, really like the idea of being able to do live debugging. That’s one of the few things I liked about classic VB: You could make changes and continue on. Smalltalk seems to take that all the way down to the VM, which sounds great. I would have killed for that ability in Perl and would love it in Python.

Toward the end of the talk, Randal sat down to do a demo. Unfortunately, the knucklehead behind the camera followed Randal instead of focusing on the screen, so we see almost none of the code or the Smalltalk environment he’s using. (WTF?! Why do the camera people always focus on the speaker during technical presentations? That’s almost never where the action is. Granted, PPTs can get dull, but when actual code or images are being shown on the screen the camera should focus there!)

So the big payoff I expected from the video never came. I’d seen Alan Kay’s Squeak demo before though, so I was able to guess a little about what was on the screen and still got some value out of the video. Here are a few thoughts from that portion:

  • After not looking at Smalltalk in about 4 years and having learned Scheme in the interim, Smalltalk seems much more lispy than I remember. I guess my perspective has changed.
  • It is still not entirely clear how (or if) you can do remote debugging of the web app if you’re executing it on a server.
  • Seaside seems to emphasize or rely upon a lot of round-trips. It also seems to focus on owning the entire app, whereas the trend lately has been toward pulling together apps from smaller pieces with an ajaxy front end.

Hurdles I foresee with Seaside:

  • People have to understand continuations or have them abstracted to the point where everything is “magic” and they don’t understand anything.
  • People have to learn Smalltalk. There seem to be a lot of languages to learn these days. Randal says he can teach you the syntax for Smalltalk in 30 minutes. Big deal! I learned the syntax for Scheme in about 10 minutes and I still don’t know what the hell I’m doing with Scheme or Lisp. Syntax is usually the easy part. Libraries and idioms are the hard part of learning a language. (Most of the time anyway. I found Erlang to be an exception.)
  • The number of competing Web frameworks seems to be growing at a geometric rate right now.
  • No high volume apps running it. Perl has Slashdot, Rails has (for better or worse) Twitter. Django has the Washington Post. PHP has Wordpress (and everything else ever). What’s Seaside got? Dabble DB is mentioned often, but it isn’t on that same level.

Randal gave a nice talk and demo, but it’s one of those subjects that probably requires a few hours, not 40 mins. I was hoping with a demo video I’d have a shit-or-get-off-the-pot moment where I’d feel Seaside was either worth taking time to learn or something to toss. That didn’t happen; I’m still on the fence. For now, Seaside remains on my “someday” list.

Choke

June 7th, 2008 by matt Posted in culture.

Just got word last night that my favorite Palahniuk book, Choke, has been made into a movie that’s coming out in the fall.




Hollywood did such a great job adapting Fight Club, I’m almost afraid they can’t do it again.

Don’t do it Barack!

June 4th, 2008 by matt Posted in politics. (1 Comment »)

Don’t do it Barack. Don’t make Hillary your veep.

She’s not worthy. But that isn’t the important thing. The important thing is the crossover vote you will surely lose if you align yourself with Hillary.

... as long as you don't pick Hillary!Reagan had the “Reagan Democrats”. You could have the “Obama Conservatives”. There is a lot of support for you from conservatives, libertarians, and quasi-libertarians such as myself. There could be even more in the months to come. But tread lightly.

I have supported your campaign since it was only a rumor. I have your bumper sticker on my car. I voted for you in my state primary. In fact, I had to fight red tape just to have my vote counted. So I’m a pretty loyal guy. But if you give Hillary the nod, I’m going to have second thoughts.

You may be led to believe that Hillary represents a great deal of Democratic votes. That is a load of crap. Those votes are already yours. In practical terms it is pretty clear that no one who would vote for Hillary would instead vote for McCain. So with Dems, you’re golden.

The real hassles lay ahead. No doubt you’ll have to deal with the Greens and the Naderites in the fall. That’s going to be enough of a problem. Don’t make it worse by ostracizing those of us who have made the effort to cross over and support you.

Do us all a big favor: Pick up the phone and see what Bill Richardson is up to.


UPDATES: Jimmy Carter knows what I’m talking about.

And here’s the type of voter you risk with a Hillary ticket.

Where the fuck is my Ari Gold?

May 12th, 2008 by matt Posted in contracting, programming, software industry.

Software development is its own unique thing. It is not a profession that can be directly equated to any other. This tends to frustrate people who try to understand the profession. This is true even for software developers, who would like an established model to follow. This is why you see some software companies run like a law firm while others are run like a band of pirates.

Architecture is often seen as a parallel to software development, leading to the trend over the last decade for everyone who can design a program to declare themselves a “software architect”. Of course software is also like plumbing and gardening and a bunch of other professions. And yet it is still unique.

Software by its very nature is an abstract concept, and there are only a few professions that deal in abstract concepts. Law is certainly one. Acting is another, and that’s what I’d like to talk about today.

Think about one of your favorite TV or movie actors. Why do you know this person? 99% of the time, you know an actor because of some role they played which you saw and liked. It was probably some great role you saw them in too. You know George Clooney from “ER” or films like “Ocean’s Eleven” or “O Brother Where Art Thou?”. You probably don’t know him from “The Facts of Life” or “Streethawk”. (Remember Streethawk? It was awesome.) In any case, you know most actors by what roles you’ve seen them play, and how well (or in some cases how terribly poorly) you think they’ve done.

The software world doesn’t work like that. Think of just about any well known person in the software world. How do you know about them? Did you see their amazing code? Probably not. More likely you bought their book, or you saw them speak, or you read their blog.

Of course there some exceptions - programmers who are known mostly for their work. These are almost exclusively in the free software field though, like Linux Torvalds or RMS. (Of course RMS is more like a Tim Robbins: Respected and talented with a passion for activism. But I wince when he opens his mouth.) And even in these cases, most people have never seen any of their code, even though they’ve probably used it.

If you’re a great actor, pretty much all you have is your portfolio of work. But that’s ok: If you’re talented and had good opportunities, you can point back to your portfolio and get more work. In software it doesn’t work that way. Sure, you may have a portfolio of work, but nobody cares. Unless you have an existing relationship with an employer, getting hired consists largely of two things: What specific technologies you’ve worked with lately, and how long you’ve worked with them.

No one calls up George Clooney and asks if he has recent experience playing a 5′ 10″ lesbian biker with a mohawk. (Although I am now tempted to make that call.)

That sort of thing happens everyday in the software world. Why? Our representation is different.

You've got Gold!

In Hollywood, if you’re lucky enough to break in to the movie business, chances are good that you’ve got an agent. You commit to an agent for an agreed upon amount of time. Your agent works actively to find you a part in a movie. You audition, and if you get the part your agent gets a percentage of what the studio pays for you. From what I hear, that percentage is usually in the 10-15% range. Sometimes a little higher depending on what they are doing for you. It is a simple system that seems to work.

The software business in different.

If you’re a contract programmer like I am, things usually work one of two ways: Either you work for a consulting company directly and you let them find you work, or you advertise yourself on places like Dice and negotiate each contract through a recruiter to get a job you want.

That first scenario is most like having a Hollywood agent. You typically don’t commit to the consulting company for any fixed length of time, but otherwise it is the same. The consulting company works to match you to a suitable position. You interview for the position, and if you land the gig your consulting company takes a percentage. Except the percentage they take is more like 40%.

If you work under the second scenario, you generally have more control over things, but you’re also taking more risk of being out of work. More often than not you’re going through the very same consulting companies to get contracts, but you’re not staying exclusively with them so you’ve improved your bargaining position somewhat. You’ll probably be able to negotiate a better deal than 40%.

There is actually a third scenario where you find your own contract. Often you still need representation either because the client requires it or because you don’t want to do billing and cash management yourself. In that situation you have all the bargaining power, but even so, the lowest commission I’ve been able to negotiate is 14%.

So why can’t contract programmers have a Hollywood-style agent? After all, most actors aren’t George Clooney or Tom Cruise. We’re not talking about the top 1% here, we’re talking about the average Joe, the character actor. Why can’t I commit to an agent for a few years, have them find me work, negotiate for me, and only take 10-15% of my earnings?

The answer, as best as I can tell, is commoditization. In our industry the middlemen - hiring managers, HR people, recruiters, etc. - work extremely hard to commoditize labor. To most recruiters, if you’ve got 5 years of experience with C++, you are the same as anyone else who has five years of experience with C++. Never mind that you are an actual person with unique skills and personal qualities that are hard to encapsulate in a resume.

This can be greatly frustrating at times. Most recruiters out there are non-technical people. They aren’t idiots, but most aren’t passionate about what they do and are generally focused on short term goals. Their job becomes one of matching up acronyms in the job requirements with acronyms on your resume. This is reinforced by hiring managers within their client companies, who are almost always in some huge hurry. This system practically guarantees that the best people for a position will never get selected.

Even more frustrating is the need to go through the negotiating process every time you want to work. Really, that’s what an agent is for, and sorry, you’re out of luck there. There are no true agents in this business. Instead, you get a recruiter who either deals in large volume or fat margins. The amount of money they make pimping you is unlikely to be much different than the money they would make pimping someone else. Multiply that by hundreds of developers a year and it all averages out. Why bother to cultivate a personal relationship with talent?

If you’re a movie actor, when you complete a film you have something tangible to point back to and say “I did that”. Not only that, but thousands or maybe millions of people have seen what you did. Your unique skills and personal qualities come through.

If you’re a programmer, when you complete a project, even a highly visible one, you can also say “I did that”. The difference is only a handful of people are really going to understand what you did. Any programmer who has tried to explain what they do to their mom knows what I’m talking about. Is it any wonder that programmers have to turn to non-programming means to stand out?

Creole (or why I’m not down with the JVM)

April 30th, 2008 by matt Posted in culture, needs revision, programming, programming languages.

A lot of languages are seeing ports over to the JVM these days. I don’t think that’s a very good idea.

Why? I’ll spare you a long exposition. The answer is this: Java’s libraries suck. Yes, there are tons of libraries for Java. And yes, I’m sure very smart people wrote them. But that’s actually part of the problem. An awful lot of a language’s character comes from its libraries. Better said, libraries encapsulate culture. So when your culture devalues simplicity, your libraries will reflect that. Worse, they will propagate that.

I’m sure the JVM performance is wonderful, and it has no doubt been analyzed to death to make it shiny and lickity-splickity fast. But it seems like an awful lot of people want to get their oddball language on the JVM to take advantage of Java’s libraries.

That’s just crazy talk.

For the first few years of my career I was a C++ programmer. Pretty serious about it too. I loved me some C++.

At that time there weren’t a ton of libraries for C++. Not by today’s standards, anyway. In fact, a lot of the libraries I used were directly descended from C or were just straight C libs that had been around forever. So for me, at that point, C++ really was a C with an object system and a few extra bells and whistles.

When I started to learn Perl, my expectations of C++ changed. Which eventually led me to the STL. The STL was a huge leap forward for me. It was only at that point that I felt like I was seeing C++ as its own language. Before that I could only see it as a C.

Many years later, when C# was announced, I winced. Here was M$, and it seemed they were going to just blatantly clone Java and everything that came with it. But that’s not what happened. Aside from out-iterating Java, the .NET platform (and therefore C#) actually got better libraries. Much better, in some cases. In other words, they managed to capture a lot of the advantages of Java without absorbing too much of the culture.

Similarly, a lot of people who liked VB 6 feel that VB.NET is hobbled because it has to be compatible with C# through those same .NET libraries. And they are probably right. VB culture was hugely impacted by the move to .NET.

So, language designers and porters, look before you leap. Putting your language on the JVM brings it closer to Java, a platform whose values are probably the exact opposite of yours. Don’t be surprised if your culture changes.

Stockton Syndrome

April 16th, 2008 by matt Posted in conferences, problem solving, programming, travel.

I don’t know about you, but lately I’ve been seeing lots of ads for conferences here and there. I just missed PyCon ‘08 in Chicago. I’ll probably miss WWDC in SF this summer. And the odds of me making it to another OOPSLA are slim to none these days. Still, I try to be optimistic about such things. From time to time a conference will catch my eye and I’ll give some thought to attending. And so I saw a blurb the other day for the eBay Developers Conference in Chicago this June.

Not being big on flying, I headed over to Amtrak to see how many arms and/or legs they wanted for a ticket.

For the most part I have no real problems with Amtrak. They are running an under-appreciated and underfunded service in an almost non-existent market on tracks they don’t own and have no control over. Many people I’ve talked with over the years say they long for a European-style rail system where train travel is widely available, simple, and popular. Amtrak will never be any of these things, sadly. There’s just too much that needs fixing. But I digress.

Amtrak has a decent website with features and functionality that have steadily improved over time. Like any other travel-industry website there is a small learning curve, but for the most part it is easy and pleasant. That pleasantness even extends to the check-in procedure at the station. If you order your ticket online you can pick it up from a simple automated kiosk that will print out a neat little ticket that is a classic example of how forms should be designed. With it’s classic 50’s styling you’ll feel like Cary Grant in North by Northwest. Bring your own Eva Marie Saint.

Amtrak Station, Salem OR

Don’t be fooled though. The website, the modern kiosk, and the wonderful ticket design all hide a secret that you probably already know: Amtrak is fucking insane. Like ‘Kramer doing stand-up at the Apollo’ insane. Like Cameron Diaz in Vanilla Sky insane. I think you get my point.

Still, the train is the train. Biggest thing I like about the train? It will never, at any point, fly at 30,000 feet. Call me crazy, but I’ve got a thing about sitting in a fuel-filled aluminum tube 6 miles in the sky. I’m sure it’s just me. Whatever.

So I went on the Amtrak site, punched in PDX to CHI, selected June something-or-other for the dates, and presto, here’s what they gave me:

Amtrak Schedule

Do you see what I see?

In case you can’t read their time table, this lists four possible trips that I could take to get to Chicago. So far, so good. The first trip looks best: Portland to Chicago, straight through. No muss, no fuss; $245.

The next two are a little more complicated. I can take the train to either Seattle or Spokane. Then I get to dick around for a while before catching a connecting train to Chicago. No savings to be had here. In fact one is mysteriously $26 more.

And then comes my favorite, trip #4. It’s a chance to save $25! For clarity I’ll describe the itinerary:

  • I take the train from Portland to Sacramento.
  • I take a bus from Sacramento to Stockton.
  • I take another train from Stockton to Bakersfield.
  • I take the bus from Bakersfield to LA.
  • I take a final train from LA to Chicago. (Assuming I made my connection in LA. Trust me, I wouldn’t.)

So to sum up, I take trains and buses 1000 miles south, then I take a train 2000 miles northeast. Eventually this gets me 2100 miles east of where I started. Just like Pythagoras said, right?

Here’s the stats:

  • Total distance: roughly 3000 miles
  • Total time: approximately 66 hours
  • Total savings: $25 (No, not priceless. Sorry.)

Why the hell would Amtrak even suggest something this inane?

Clearly they are taking the Traveling Salesman problem way too far. Actually, I take that back. I have no idea what they are doing algorithmically over there. The real problem - from a user standpoint anyway - is that they aren’t filtering well.

There are very few parameters to this problem: My needs are simple and specific; their abilities are limited and finite. As far as I’m concerned, there should be no more than three possible trips presented when the parameters are so few. Why three? Because there are only three factors at stake that either customers or Amtrak care about. What are they?

  1. Price
  2. Time
  3. Quality

Notice I say “no more than” three trips. In this particular case there should only have been two shown to me. Let’s work through it:

Right away we see that Trip #1 is priced lower than Trip #2. Notice that Trip #2 takes almost 4 hours longer. And it has a connection. Connections equal risk, and risk equals lower quality. So Trip #2 is out.

Trips #1 and #3 are the same price, but Trip #3 shaves about an hour off the travel time. The quality is lower because there’s a connection, but it is only one connection and it is train-to-train. I’d keep this in the list. You never know who wants to save that hour.

Finally, Trip #4 is cheaper than any of the other trips, but it is over 20 hours longer!! If that isn’t enough of a reason to shit-can it, there are four connections, alternating between trains and buses. Throw in a plane and some pillows and you’d have a John Candy movie.

Wait.

Those aren’t pillows!

Craigslist = Magic Ads

April 9th, 2008 by matt Posted in culture. (1 Comment »)

It took me a while, but I finally cracked it. I solved the mystery of “Who the hell are these people on Craigslist?”.

This has puzzled me for a while. The people on Craigslist aren’t like you and me. They have email and know how to surf the web, but that tends to be where the similarity ends. For the most part these people aren’t particularly geeky and are as likely to work in a coffee shop or own a tire store as to work in technology.

One thing sets the typical Craigslist user apart from me: Insistence on using the phone and apparent distaste for email. I suspect that this group thinks of email being like regular mail… Something you check once a day at most, and only when you’re expecting something. Sometimes the reluctance to email borders on rude. And sometimes the literary skill reflected in those reluctant emails borders on… fourth-grade.

So where the hell do these people come from, these folks who can manage to read and post ads on a website, but can’t manage to handle the social graces of email?

Magic Ads. That’s right, Magic Ads. In case you don’t know what the hell Magic Ads are, I’ll briefly fill you in. Magic Ads are (or were, I haven’t seen them in many years) this crappy little free newspaper that you could pick up on your way out of the grocery store. “Newspaper” isn’t really the correct term though, because there was no news. As the name implies, the paper contained ads. As for the “magic” part? I can only conclude the magic was from the dreadfully magical yellow color which the paper was printed on. Otherwise not a lot of magic was involved.

Magic Ads ran ads for all sorts of things. Some of the ads were for accident attorneys or car repair shops. But the great majority of ads were small classified ads like you might find in any newspaper. These ads were just very, very cheap to run.

Magic Ads kind of existed on the periphery of the culture, but everyone knew about them. And often they were the first stop when someone had something to buy or sell or some other “need” to fill. As a result a small culture evolved around them. Sound familiar?

So the answer is Magic Ads. Everyone that used Magic Ads or any of the other shitty little papers like it around the country have all ended up on Craigslist. I’m sure you’re as glad as I am that the mystery has finally been solved.

“Wow” Books

April 8th, 2008 by matt Posted in programming, reading. (2 Comments »)

Matt's Bookshelf

Here is a short list of books that led me to a breakthrough in one way or another in my understanding of programming.

I’ve read a lot of other good books on programming - many of them more technical than what I list here, and some eye-opening in their own right. The books on this list were different though. These books were beyond educational; they provided some transcendental insight or stimulated a leap in my thinking. They are listed in no particular order, with an exception at the very end of this post.

  • Refactoring
  • Extreme Programming Explained
  • The Pragmatic Programmer
  • Code Complete
  • Programming Pearls
  • Software Tools
  • Programming Perl

Finally, the most valuable “book” on programming I ever read is actually only 1 page long. It is Brian Kernighan’s Programming Style Tips. I found this early in my career and put a copy up on my office wall. More than any other text or person, this simple list shaped me as a programmer. Proof that in a wired world you don’t always have to know your mentors personally to benefit from their knowledge and generosity.