God of War (PS2) showed up in the mail today. It alone was worth this month's Gamefly subscription. I played the whole thing through, basically in one go. Admittedly, I was playing on Easy, which makes it nearly impossible to die, but it was a lot more fun that way.
There's a bit from the Manowar track "Warrior's Prayer" which goes: "Each of [them] was, unto himself, a whirlwind of doom." That's how this game plays. You start out as a bad-ass and by midgame you are a whirlwind of doom. Hooray for perfectly executed, baroque, creative violence.
Level design and music are both excellent; the game plays like a movie. It's beautiful.
It's also the only game I've ever seen which contains nudity that doesn't feel like the nudity was put there just so there would be nudity (okay, except for the Athenian Oracle -- she's gratuitous). The female models are also far more realistically and (dare I say) lovingly rendered than the typical product of adolescent male fantasy which is usually to be found in video games.
Go play this game.
Woke up this morning and was surprised to see Amy on AIM. She told me she'd started working at the hospital on a 7-7 (1900-0700) shift, so she was exhausted and just about to go to bed. If we get to move back to Athens soon, I should go cook for her some weekend (or whenever she's off).
Olive b7 was released today. It didn't have the 2 big things I wanted it to have (OPML import, ATOM feed support), but so many little fixes and additions had piled up I just didn't want to sit on them anymore. Then the jerkholes at freshmeat decided to lop half of my "Changes" statement out of their release announcement, because apparently the other 100 or so bytes would have just been too much for their system to cope with.
Someone really needs to implement a non-sucky freshmeat. I know their (self-selected) task is a really cruddy one, but they've just gotten rather cruddy themselves in many ways (most notably their nebulous "non-trivial" requirement, which keeps a lot of useful but small software out of their listings but ensures a neverending stream of PHP image galleries and the like).
Finally pulling the diary2 code into a svn repo so I can set up a dev install on fornax and do some work on hit here and there. Nic wants comments first, so that's the major thing I'll work on, but I need to get prev/next in there (this can be stolen straight from my diary code) and bolt on RSS generation on publish (also very very simple).
Got into an interesting job-related email exchange involving Scheme today. More on that later.
Had an interview today. If any of you are reading this (I'm sure you managed to find it while grabbing source code from me), thanks for the chance, thanks for the pizza, and just ignore those other people and hire me. You totally know I'm the dude for the job.
In Olive news, I've worked around the RFC822 issue, and gotten rather a pile of (good!) feedback and requests lately. I'm sorting through things...well, triaging them, really. It's yet another new and interesting experience. Also, a Debian ITP (Intent To Package) has been filed for it, which is neat.
The guy who wants to package it asked me if it was okay, and I said that I would have already done it myself but (1) becoming a Debian developer is an exercise in pain and (2) Debian's perl package naming scheme makes me want to die inside, so I just install everything from the CPAN.
I had originally planned for this space to be used for a thoughtful and eloquent look at Apple's recently-announced move from PPC to x86, including a historical perspective at their habit of abandoning promising things just before (or as) they get really good (OpenDoc, Newton) and a look at the risks and benefits of this latest sudden move. Instead, as I have just had the most frustrating Apple software moment of my life, I give you the following:
I hope Apple dies.
I've never used a Mac as my primary working environment, because you just can't wrap them around yourself and make it an extension of your mind the way you can with a "pure" Unix. At least I, as a developer and nerd, cannot. I know there are people with different slants (Dan) who do get that feeling from the Mac UI.
But still, I've used Macs continuously since 1998, and have used every version of the OS since 7.6, and the polish and elegance of it made a huge impact on the way I think about how programs should work, even though I largely prefer not to even work in GUI space. I learned that anything reasonable, when tried, should work the way you'd think it would, and maybe some unreasonable things should to. I learned that you should try to trap as many problems as possible and handle them as gracefully as possible. I learned that its your (the software's) job to let the user get their work done, not to shove yourself in their face and dance about telling them how great you are.
I learned these things from the old-line Mac OSen, especially 8.1, which is still my favorite of them all. I learned them again from Newton OS 2, which is still, in my opinion, the most elegantly crafted piece of user-targetted software ever written. (Even though it had some really bad error messages..."-10061", "-16022", "-10582" anyone?)
The transition to OS X was rough, but all the failthful (myself included) felt sure that things would get better. The iApps were great (though one should remember that they are a product of the OS9 era, and not OS X) and things did seem to steadily improve with each new point-release. I'm not sure that this trend is still continuing, however. For a while now I've had this niggling feeling that some of the polish is wearing off, that some of the rough edges are showing through where they didn't used to.
But it was nothing big enough to complain about, and no one else seemed to notice. Over the past 2 years I've gone from being something of an Apple apologist in my nerdier circles to being the one who's always spouting off cautionary tales and playing a wizened Devil's advocate to the newly converted Mac Faithful with their shiny laptops and lickable interfaces. I've even aquired a stock phrase for these situations: "Use Apple, Love Apple, but never Trust Apple".
And I don't just say that to be trendily anticorporate or iconiclastically anti-Apple. I say it because, though I count myself a newbie compared to true hardcore Apple users, I've been around long enough to see lots of Apple-screwing-its-users(and-developers) action. I personally got it in the Newton debacle -- that's where I learned exactly what the "mercurial" in "Steve Jobs, Apple's mercurial CEO" means, but that's a far cry from the only example. There were the clones. There was OpenDoc. There was the Performas which were promised to be upgradable but weren't. There was the 5×00 and 6×00 series PowerMacs. There were the G4s that shipped half a year late. There was shoving OS X (NeXTSTEP) down everyone's throats. And you know Searchlight, the brand new thing that no one really wanted in 10.4? Well no one really wanted it back in OS8.5 either, when it also tied up your machine for hours on end and was generally useless. And last but not least, remember the G5, which was The Future and would totally trounce everything, ever?
The point is: don't unquestioningly buy into Apple's party line, no matter how strong the RDF may be. Once the gloss of the Stevenote wears off a bit, think hard about what's actually going on.
Anyhow, my recent crappy experience is as follows: I wanted to take a whole bunch of JPEG images and turn them into a little movie set to music, using iMovie. I figured that since iMovie now has that "Ken Burns" effect, that this would be really easy. Except that it turns out that iMovie can now only import images from iPhoto libraries. This made me grumble a bit, but I concede that it's easier than going File->Import several thousand times, so I started up iPhoto and told it to import one of the directories of images I wanted to use (about 2500 files). It sat there "Importing..." for several minutes, and then started displaying a thumbnail of each image as it did whatever arcane magicks it needs to turn this stack of files into whatever it uses on the inside. I walked off to go do something else. Several minutes later, the progress bar was at around 50%, so I walked off again. Several more minutes later, there was a dialog telling me that one of the images was corrupt. Well, that's okay with me, really. I can stand to lose one out of about 30,000 images, so I clicked "OK", and the dialog went away.
And iPhoto sat there, doing nothing, a blank slate, no indication that I had ever asked it to do anything. I had assumed it would immediately pick up where it left off, rounting around this one bad image (not even a bad file, just bad JPEG data), or at least ask me if I wanted it to keep going, save what it had done so far, or just quit. Nope, it just quit. I realized that, having assumed that this Apple app would behave like an Apple app, I had rather glossed over the dialog and didn't actually know the name of the offending file (except that it started with an 'f').
This is not how Apple software is supposed to behave. I submit to you, Dear Reader, that something fundamental has changed at One Infinite Loop.
So why is the Finder still single-threaded? Why does it still spod when one makes the vile error of causing a large-ish media file to appear in the preview pane of column view? Why does column view still not remember column widths and keep doing what the user has told it to do? Why can one not even depend on column view being used all the time, even after one has told Finder to do so? Why these small annoyances and dozens more like them? I used to think it was because Apple was busy bootstrapping a new OS and was more concerned with getting it right under the hood before turning their practiced eye to fairly minor UI quibbles. But now I think it's because the old Apple, which cared deeply about the craftmanship of software tools, and which taught me to do the same, is gone. Replaced by a fast-talking, fast-walking, high-chrome somewhat-slipshod company with an opportunistic worldview, targetting the Great Unwashed, who value a lack of value above all else. In other words, they are the Very Model of a Modern Multinational.
Knowing His Steveness, who has more moxie and business acumen in his middle finger than I'll ever have altogether, it'll probably work out. And being the mark for Apple that I am, unless things get really bad, I'll probably keep supporting them as the saner alternative for normal people, but I won't be cheering them on as I once did.
In other news, i got an Olive bug report from Poland today. Someone out there found a new way to be nonconformant with the RFC822 date definition, and I wasn't catching it. I'm getting perilously close to having a complete workaround library for this sort of thing...RJBS says that SIMON has something like that, and as much as I hate to add another dep to Olive, it might be the right thing to do. One way or the other, that issue will be fixed in b7.
This is either a bug or output of the most obfuscated spam generator ever made:
Hello, do you need to might overtake you. And don't you yet realize where you stand - inspend Iess on your druggs?
Save over 70% Name of God! swore the gunner, which did no justice at all to anwith Pharrmainherited from her father the respect in which he had always beencyByMail Shop
Vtaking the whole of the fleet with him.lAGRA VALjurors to mutter in the ear of a brother counsel:lUM CHe took you prisoner, did he - along with Miss Bishop there?lALlS LEVlTslavery! Ugh! His lordship shuddered. And to a damned colonialRA and many other.
With each purthe wealth of the city.chase you get:
* three men on the poop, and Pitt immediately below them, had failedTop quaIity
* BEST PRlCThat bloody vampire Jeffreys - bad cessto him! - sentenced me toES
*Total confidgained by precipitancy, and a deal to be gained by delaying, asentiaIity
* of sense might have sat down and waited, judging that to be theHome deIivery
Bizarre. The non-spam text, by the way, appears to come from Captain Blood by Rafael Sabatini, which is certainly an interesting choice, and which can be had from Project Gutenberg if one is more interested in buckling some swashes than ordering erection-inducing phamacological agents.
Spent all day working on Olive, mostly indirectly. A lot of people (myself included) have been irritated by the feed polling timer hijacking their session. Desite being on a timer, and therefore not affected by anything you're doing, it has a knack for starting up just as or just after you press a key to do something for the first time in 15 minutes.
No longer. Today I delved into the guts of Curses::UI and added code to (optionally) make it track the time of last keypress and force a delay of some seconds afterwards before timer events are allowed to proceed. A patch and test script have been sent to the maintainer (but I ran the idea by him first, so it shouldn't be a big deal). It's already working in my svn repo of Olive, everyone else will have to wait a few days for b7 (and the new version of C::UI to hit the CPAN).
This will be my first contribution to an existing project of any sort. I've always been working over in a corner on my own stuff. I was fairly terrified of trying to modify the guts of C::UI because a few years ago when I tried to learn how to use Curses.pm, I failed pretty miserably, but today I was able to just look at the code and see what was going on. That was a good feeling.
Several other, smaller improvements to Olive today. b7 should be good. Sungo and obra (and eric!) want OPML support, and pointed me at usable docs instead of the horrible thing that Dave Winer claims is a spec on his website. I'm sorry, but "An OPML doc consists of some stuff, stuffed inside some other stuff, in whatever way you'd like", is not a spec.
I just got my first comments on Olive from someone I don't actually know. That is to say, a user who isn't someone I directly asked to try it for testing purposes. This is the first paragraph:
I've been using Olive, and I think it's terrific. I think your design is right, and the radical simplification of getting news delivered chronologically is changing the way I relate to the web.
It's from Eben Moglen.
It feels pretty good.
New Olive release yesterday. Small changes, improved install script.
Spent all weekend working on the journal thing. Got it mostly-done but a few features people wanted are still lacking. One proved to cost effort than I was willing to expend today. I'll get it soon.
I still really need new glasses.
After avoiding web programming for half a year, I'm back in it doing this diary thing for friends, and it sucks just as much as it ever did. In fact, I have come to a realization: "web programming" in its current state, must be ended. It's breaking the minds of a generation of programmers.
Olive is a far more complex program than the web app I'm working on now, but it's easier and far more enjoyable to develop, for a single reason which can be expressed in a single word: state.
Olive, being a traditional user-space app, has state information. As much state information as I want, all neatly organized in data structures of my own choosing. Web apps, as we're all aware, have no state, forcing the programmer to painfully reconstruct it via a horrible system of parameter passing and parsing, every single time the user does anything.
Someone who knows more about such things than I do needs to come up a stateful connection protocol for writing browser-embedded apps with server-side data storage. I am thinking less XMLRPCHTTPRequest (which, as I understand it, is just far more sophisticated message passing) and more constrained network-transparent virtual memory with XUL and/or HTML as a user interface definition.
The web was meant to be a collection of linked documents; let it go back to that, and let programmers go back to getting work done instead of coming up with package after package to attempt to work around the horrible pain of HTTP.
Found out last night that the Pismo's AirPort card does still work. Now I'd just like to know why it's seemingly failed on several occasions in the near past. One obvious change to the machine's config: 10.4 (not that this makes any sense). Now I just need to get one of OWC's high-capacity replacement batteries and it'll be really useful again.
Struggling to get going on the diary project. At least I have a plan now. I slacked so hard this week.