I’m sick. Not entirely sick, just the start of a cold where I can’t think straight and want to sleep all day. The good news is, this is probably the last cold I will have in New York. Yes, Denver has dry winters and rhinovirus, but I won’t be spending my days in subways packed with mouth-breathers wiping their nose with their hands and then grabbing the handrails. I also hope to avoid the land of the recirculated air office for a bit. I’m sure I will get sick in the future. But I also won’t be doing it on four sick days a year.
I can’t believe we only have about a month left in New York. It’s more like three weeks; I think we are scheduled to have the movers take away everything on the 23rd or so, and then we have a day or two on air matresses with mega-cleaning duty before we hop on a plane to the new place. On the 14th, we head out for a short trip to find a place, look at and maybe buy a car, and do everything else. So on the 25th or whatever, we should hopefully have an empty apartment waiting, and will then get there with nothing but the clothes in our suitcases, and get to wait a week or so for our furniture. There are so many timing issues that I’m nervous about, and I guess when it all comes down to it, we can just throw money at problems on either end. (Get to Denver and the apartment’s not open yet? Live in a hotel until it is.) Lots for me to worry about, and I probably shouldn’t. Or at least I should get some Ativan.
One of the reasons I worry is that this is the biggest move I’ve ever made. It’s where I have the most stuff over the longest miles. Seattle was maybe about as long and on a shorter timetable, but I had no crap to move back then. New York was longer, but over a longer timetable, and I was only moving a carful of stuff. This is also the first joint move I’ve made with someone else. In any other move, if something broke or something didn’t fit or didn’t work, then fuck it – buy a new one, it’s my thing that didn’t work. Now, it’s also someone else’s stuff. I am very excited to get our first place together and to start from scratch and set everything up together, but it’s much easier when you’re a bachelor and you can just throw shit anywhere and worry about it later. It will all be great, but there’s a lot of work ahead in the next few weeks.
I have one more week of work. Well, I have one more week of showing up for work – there isn’t much left for me to do. I’m now spending most of my time scouring my hard drive and looking at sites about Denver. It’s all very odd though – this is the longest I’ve ever worked at the same place, ever. I’m a few months shy of six years at the place, which doesn’t warrant a gold watch or anything, but it’s more than twice as long as my previous record. I guess I worked at UCS for almost four years, but all of that was as an hourly, and it included a summer of being gone, a summer of working only about 20 hours total (see Summer Rain for details) and a lot of part-time, half-time, no-time, bad-time work. I guess it seems like such a difference because back in college and the UCS days, every semester was its own era; things that happened in the fall of 91 were eons apart from the spring of 92. At my current job, 2001 blended into 2002 and melted into 2003 and poured into 2004 and so on. I spent all of the time sitting at the same desk, working on the same product, staring at more or less the same constant faces. The last six years seem like about 18 months to me. And when people ask me why I’m leaving, that’s up there on the list of reasons. I don’t want to wake up tomorrow and find out I’m 50 and working on the same shit. Yes, it was nice to save $100,000 in six years in my 401K, but the list pretty much starts and ends there.
Speaking of changing careers, I have been trying to get back on the development horse by learning Ruby on Rails. Yes, it’s a horribly overhyped meme. But I originally thought I should dust off my PHP and MySQL books and maybe write a few web-based apps that are incredibly cliche but would get things rolling in my head: a blog, a wiki, a shopping cart, whatever. Then I started looking into RoR and it’s fairly trivial to implement any of the above in like an afternoon. I really like the setup – it’s a close-to-true MVC structure, where the model (how you represent data in the db, plus any business logic to slap on top of it, like unit conversions or sales tax or whatever), the view (what makes the web page and the controls used to mess with it, like your shopping cart forms) are completely abstracted from the controllers (the go-between that juggles both of those).
In other implementation types, you start with a web page or something that makes the web page (PHP, JSP, ASP) and glue in all of these bits and pieces of db access code and business logic all over the damn place, so when you need to add a PayPal method of payment or change how AMEX handles charges or whatever, you have to scour the entire app looking for the crap you put in four years ago, and will inevitably break the whole damn thing. Or if your web designer needs to add a flaming skull to the top of every page, unless you used a maze of includes and templates and CSS overrides, chances are they are going to have to edit the same damn file that glues together your whole online business, and their outdated copy of DreamWeaver is going to fuck the whole thing. With Rails, you just go to the app directory and change the stuff in the controllers, models, or views directories, and there you are.
Probably the most striking thing about RoR is that a lot of the bullshit work you’d do in PHP+MySQL is done for you. Yes, you can get optional libraries to do that for you in PHP, like Smarty, but I see it as a large weakness that 10,000 opinionated losers living in their mom’s basement release their own incompatible PHP framework and then update it every week so it breaks everything. In Rails, you use their framework or you don’t use one. That’s sort of conformist, but let’s face it – any app you’re writing for the web is probably going to be writing pages, taking input, and swapping it in and out of a db. So 90% of the time, one basic framework structure will do it. Yes, you can add more models if your online store starts selling more junk (books, dvds, whatever) or if each item needs more data categories or types joined to it (reviews, links, whatever). And you can tweak the views to add extra pages, use javascript-heavy presentation, dick around with CSS, or even AJAX.
But the one big strength is that when you start with a blank page, you just tell ruby “okay, make me an app template”, (which is literally “rails clown-makeup” if you’re making a web site about clown makeup.) This blows out all of the directories and starter files for the app, and you’ve saved about the first 10 hours of writing a PHP app. After you create a quick db schema and hit the db with it, another one-line command per data object creates all of the scaffolding for the controllers. So three or four commandlines in, you have a very skeletal app, where you can fire up a web server, hit a URL, and have a bare-bones view of a page to view, list, or modify items in the db. I think the first PHP app I made (an attempt at db-ifying the glossary) took me about a day to get to that point. This takes three lines. Yes, you have to stick with their method of thought. But it buys you a lot in the long run.
Probably the biggest pain in the ass with Rails is setup. You need to set up at minimum a language, a framework, a web server, a DB, and all of the crap that joins them. There are a couple of good drag-and-drop installers that include everything in one zip file. The windows one is actually better as far as I’m concerned. So I installed from source on my Mac and it literally took a day to get and compile everything using macports. Yes, that’s because I was compiling on a Mac Mini, but still. Running an interpreter on a web server without using fastcgi (which pair.com does not entirely support) is also going to be a bitch. I can run everything fine on my Mac, but getting it out to the world may be a bitch. The next major version of Ruby (I think a year out) will be supporting a bytecode VM, so who knows.
Okay, I should be dicking around with my hello world app instead of this…