mdxi's Journal http://use.perl.org/~mdxi/journal/ mdxi's use Perl Journal en-us use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners. 2012-01-25T02:20:02+00:00 pudge pudge@perl.org Technology hourly 1 1970-01-01T00:00+00:00 mdxi's Journal http://use.perl.org/images/topics/useperl.gif http://use.perl.org/~mdxi/journal/ Update During Downtime http://use.perl.org/~mdxi/journal/26701?from=rss <p>* Have new job</p><p>* Have new place of residence</p><p>* Carrying one's entire set of belongings up 2 flights of stairs induces copious amounts of pain</p><p>* Bellsouth screwed up phone provisioning, taking my servers down 2 weeks early</p><p>*<nobr> <wbr></nobr>...but I have DSL at home again as of this afternoon</p><p>*<nobr> <wbr></nobr>...and I have an arrangement worked out with a local colo facility</p><p>* Getting 2 new (used) servers from a coworker tomorrow (supposedly)</p><p>* Bought a new tv tonight (42" plasma)</p><p>* IKEA doesn't actually stock everything in their own catalog. Try to buy one of the less-cheap sofas and you'll probably fail</p><p>* More later</p> mdxi 2005-09-13T03:31:35+00:00 journal LCCO and Black http://use.perl.org/~mdxi/journal/26147?from=rss <p>Lorcan Dempsey recently wrote about a <a href="http://ddcresearch.oclc.org/ebooks/fileServer">DDS browser</a> which OCLC has implemented, and it reminded me that I <em>tried</em> to do basically the same thing a couple of years ago with the Library of Congress Classification Outline. His very literally drills down, starting with the top 100-level DDS categories and placing the next level under that as the user selects which segment to expand. My design, which never got past the static mockup stage, started with the user picking a top-level LCCO category, which it then exploded in vertical stacks progressing to the <em>right</em>.</p><p>This worked pretty nicely with <strong>A</strong> (General Works), but as soon as I started trying to mock up <strong>B</strong> (Philosophy, Psychology, Religion), the complexity spiralled and my abortive effort ended up looking like a microphotograph of a CPU, there were so many shadings and colors arrayed around each other.</p><p>Which brings me back to an old bitch: there are no good classification systems. The LCCO seems nice at first, but the intricacies of generating call letters for it are nigh-impenetrable (I know the Letter Digits Dot Digits Cutter OptionalYear part, but what's the <em>other</em> thing that looks like a secondary Cutter, which sometimes follows the year? And how to I <em>generate</em> Cutters anyway? And are they guaranteed unique or are collisions allowed? Why isn't this information public knowledge?). On top of this, the LCCO was last overhauled beginning around 1900 and finishing around 1960, resulting in huge swathes of modern works and fields of endeavor being shoved into sub-decimal categorization spaces, while American History gets two whole top-level letters. I'm sure this was fabulous for the actual Library of Congress, at the turn of the last century, but it's not so good for dealing with the modern world where we expect things to be designed for maximal flexibility and expansibility.</p><p>On the other hand we have the DDC (and UDC, which is DDC but not). The DDC, as most people are completely unaware, is owned by a corporation who charges license fees to use it and has a history of suing people who aren't aware of this. It should therefore be viewed as unsuitable for use in public/volunteer projects (like the one I'll get to in a second).</p><p>I have recently become aware of some <em>fringe</em> categorization schemes, such as Bliss, but I don't see them as any more of a win than anything else.</p><p>At this point you may think I'm a big fan of "folksonomies" and "tags" and that sort of thing, but I'm not. Very few people have the mindset which allows for things like data integrity, logical categorization, and stripping of spurious/redundant data. Flexibility and expansibility are always good but mob rule is never the answer, and that's all the folksonomy movement is. I'm down on pure democracy for the same reason the founders of the US government were: most people are so lazy can't even be trusted to make informed decisions which affect themselves.</p><p>I don't have an answer, only complaints. Moving on...</p><p>Much has been made (and made and made and made) of the recent interactions between Google and libraries. I'm very much of the opinion that libraries need to hurry the fuck up and actually get their collections online, as opposed to just data <em>about</em> their collections (yes, yes, whatever you're thinking, <em>I know</em>, but seriously people, wasn't the Internet supposed to be something a little better than porn and livejournal?), but I don't think Google is the right way to go about it.</p><p>For years I've been very slowly working on planning (and planning and planning) a framework for publishing text collections, but let's not talk about that now; let's talk about the idea which followed that one, which I call Black (all my project names are colors). In a nutshell: it's a combination of RSS and distributed source control.</p><p>Imagine that sites have created electronic collections -- not as web pages, but as collection data and content data (preferably with the text bits in small-ish chunks and transformable, diplay device neutral markup) in databases. Now imagine that you can flip a permissions bit on any document in the collection and your front-end collection server will inform an upstream meta-collection (Black) server of this. Now imagine networks of <em>these</em> servers, throwing collections data back and forth between each other. Now imagine that this network of "metaservers" is searchable, and that feeds of newly available documents are being served to other sites with their own collections engines in place.</p><p>Site B's admins or users see something interesting on the new docs feed (or turn it up in a search) and send a subscription request to their upstream Black server. A subscription to that document is set up, and a BitTorrent style copy operation begins, fetching the doc from Site A as well as any other sites which also have copies.</p><p>Three weeks later Site A makes changes to the doc. When it is republished on their internal system, messages are passed to the Black servers about the new version, and as messages filter through the network subscriber sites begin picking up the deltas (the changed and/or new and/or deleted bits).</p><p>Hey look, it's a worldwide, self-replicating, self-updating, fault-tolerant, on-demand library!</p><p>Things like allowing subscriber sites to keep full version histories or only newest versions, yadda yadda yadda are all fairly simple and eminently do-able. The only real problems are:</p><ol> <li>Writing the Black server software</li><li>Codifying the messaging format (protocols)</li><li>Ensuring that database schema are compatible with each other (or that compatibility layers are available)</li></ol><p>(Note that here I am actually thinking of volunteers putting their own collections online, either completely on their own or in small collectives which would probably be focused around certain topics. The whole reason I started thinking about this stuff is because I want to share my old textbook, cookbook, and asian history collections.)</p><p>Some people probably think that things like "intellectual property rights" are another issue, but I honestly don't care. My concern is maintaining and communicating human knowledge and our shared body of cultural works, not making sure a multinational corporation is properly compensated for the work of a long-dead author. I am concerned with saving (and making avilable) the information in all the mouldering, brittle, and disintegrating books around the world, not in making it easier to pirate Harry Potter book 7. A trust metric of some sort might be a good tool to assist human Black server admins, but I really believe that policing the collections is a policy issue and not a technological one.</p><p>To all the real librarians who just sat through this, I'd like to apologize if my ignorance and hubris has insulted you.</p> mdxi 2005-08-06T19:50:22+00:00 journal New Job http://use.perl.org/~mdxi/journal/25990?from=rss <p>Thursday I started work at my new job. N was kind enough to drive me (we're planning to swap off the driving as much as possible while I'm crashing with her and J) and upon arrival I was dog-n-ponied around for introductions, then I started a clean install on my workstation. All the production stuff is Debian machines. Two of the guys I work directly with bring in their Powerbooks and work using them; the third prefers to have Windows on his workstation. I put Debian on mine, as I'm trying to maintain a measure of separation between me and work.</p><p>As the install was wrapping up (slooooow network at work), I was surprised by being taken out to lunch. We went to <em>Malaya</em>, a small restaurant with a menu which is half Malaysian and half Americanized Chinese (knowing nothing about Malaysian cuisine, I can't say how Americanized it is, but everything looked pretty homestyle).</p><p>I had a savory chicken soup whose name I can't remember -- it was basically shreds of chicken and lots of onion in a tangy-sweet broth which was based on soy sauce. My entree was described on the menu simply as "pot roast on rice noodles", and that's basically what it was. The beef was roughly cubed, with a good amount of fat still attached to some pieces (that's a good thing; think pho) and had been simmered in some sauce which had a really awesome procession of flavors: salty/spicy followed by tangy followed by sweet. They served it on your choice of egg noodles or rice noodles, but rice noodles are clearly the proper choice. On the side was a small mound of what looked like lightly stir-fried spinach, but the leaves were a bit larger than the fresh spinach I'm used to seeing. And then two little breaded and fried things, which I determined from the appetizers menu to be fried chicken dumplings. Take minced boiled chicken, blend with just enough binder (mostly flour, I assume) to let you roll it into thumb-sized cylinders, bread in a spicy coating, and deep fry. Awesome stuff all around.</p><p>On the way back from lunch I was given a tour of our server farm, which is hosted at Internap. Pretty standard stuff, but impressive for the amount of redundancy and backup capacity built into the design.</p><p>Once back at work proper I was handed my first actual assignment: add a slideshow viewer to the content management system. This is a really really simple thing, but it was (I think) chosen as a crash-course in seeing how things hook up to each other as well as the people side of the process. I got a list of requirements from the person who acts as the liason between us and the customers, then spent the rest of the afternoon asking my team what I should do. The problem wasn't that I couldn't figure out how to do it, but rather that I could see <em>many</em> ways to do it, and was trying to figure out the best, most House Style way to get it done.</p><p>This bit ended up being particularly interesting, as I've never really worked with a <em>group of competent people</em> before. Every job I've had in the past has basically had my acting alone, though I was nominally part of a group of people assigned to a task. I would be given something to do, and I would go and do it, then report back when done. Here, the dynamic seems much more open and everything seems to be discussed back and forth.</p><p>The afternoon was wrapped up with a group review of a new perl module that the lead developer was interested in for purposes of the upcoming overhaul of one of out projects. Everyone adjourned to the conference room and he toured through the POD and gave examples of how he envisioned it being used in-house, then asked for comments and questions.</p><p>Basically, it's the same give and take and flow and cross-pollination of ideas that I've become accustomed to via distributed development online, but happening in the real world. It's the damnedest thing.</p><p> Friday </p><p>Friday morning I drove myself, since I'd be heading back to Eatonton after work. I got to work fairly early and spent a while perusing our wiki, reading news, and doing some tweaks on my workstation. Then I sketched out my initial plan, UI thoughts, and db schema for the slideshow tool (focusing mostly on the editing portion; there's precious little to say about the actual output aside from "and then it dumps a stack of web pages").</p><p>I sat in with Vince and Linda's lunch, which was half work and half hanging-out. Then, at L's suggestion, I put my design work on the slideshow on the wiki so that everyone could look it over.</p><p>After doing that, I headed up to what the elevator provocatively describes as the "Roof Garden". It's not very garden-y, but it is pretty cool. The building I work in is one of a group of disused industrial buildings, across from the south side of Georgia Tech campus, which have been converted into ubertrendy office space. Whoever designed the conversion did a neat job of it though, leaving the massively thick exterior brick walls and huge (like 12&times;18 inch huge) timbers exposed throughout, then putting in modern hardwood or carpeted floors and lighting. The overall effect is really neat, and is probably making them huge sums of money. Anyhow, the specific building I work in was a candy factory, built at the turn of the (20th) century. Our suite occupies roughly a third of the top (4th) floor. The elevator runs to the roof, however, where a large deck has been constructed. The views aren't pure art or anything, but it's a surprisingly quiet and breezy place. There's a 5-track railroad only meters from the south end of the building, and more low-rise aging industrial waste beyond that. North is gatech. East is the high-rise city center of Atlanta proper, about a mile away. I'll take pictures this week.</p><p>Later on, I had a discussion with Vince about the merits of various software engineering support tools (CVS, svn, svk, wikis, Trac, RT, and so on). He's just starting the task of pulling the development process out of the manually-versioned morass it's currently in, and into something more sane and modern, but he's been strapped with just keeping things running during their period of chronic understaffing, so he was receptive to the information I could provide.</p><p>Then Linda wanted to talk to me about Corporate stuff. Basically gave me the hello-orientation-welcome speech that she was too busy to do on Thursday. It was refreshingly bullshit-free, and it was neat to learn that it's actual written company policy to hire exceptional people and pay them what they're worth instead of hiring flocks of marginal hacks and paying them as little as possible.</p><p>I am cautiously optimistic.</p> mdxi 2005-07-31T17:50:22+00:00 journal Olive b8, Shopping http://use.perl.org/~mdxi/journal/25867?from=rss <p>Gave up finishing the manual, made some last tweaks, and kicked b8 out the door. It was a good solid update as-is, anyway. This at least lets me forget about it for a little while, freeing cycles for other things.</p><p>Like moving and working. And buying new things. I <em>cannot</em> stop shopping (not buying, just shopping). Don't even know exactly what the house'll be needing yet, but I can't stop looking for it. Couches, floor coverings, electronics.</p><p>Especially electronics. We don't wanna take the WEGA with us. It's too gigantic and heavy, and we both really want a 16:9 model anyway. We definitely want another WEGA, but Sony now makes so many different sorts that I've no clear idea what to get. My heart wants the 42" plasma, but they have a new 55" DLP model that uses 3 LCD chips instead of one and a colorwheel and costs 2/3 what the 42" plasma does. I guess the only solution is to go look at them in person and see which one is the most awesome.</p> mdxi 2005-07-24T20:45:26+00:00 journal My Life Just Got Interesting http://use.perl.org/~mdxi/journal/25799?from=rss <p>Well, it took nearly two months, but barring paperwork-related catastrophe, the job I first fired off an inquiry about on May 27 is mine. Got the offer this morning at about 1030 and was pretty happy about it. Called K and told her; I think "ecstatic" is too mild a word for her reaction.</p><p>Then, when she comes home for lunch she discovers that one of the major roadblocks to her getting financial aid for school has been taken care of. This makes her even happier, as she's been getting a major runaround for weeks.</p><p>A couple of Sundays ago K went to Athens to study and found a house for rent right next to where we used to live in family housing. This caused us both to start hoping really hard that I'd get the job so we could score that house while the summer housing glut was on. This evening we were back in the AHN to deposit her paycheck and scope out the house situation, now that fat sacks of cash (moneyhats!) were on the horizon. The house she'd notices was off the market, and she wa visibly depressed about it, but lo! only two blocks over was a MUCH BETTER house with a For Rent sign in front of it.</p><p>We stopped in the street and called the number on the sign. A nice lady answered and was surprised by my inquiry about the house; the sign had gone up only a couple of hours earlier. It's frighteningly perfect: 3br, 2ba, LR, usable but unfinished basement, attic storage. It's literally a thousand feet from campus in one direction and a thousand feet from Five Points in the other (that's the Athens Five Points, not either of the Atlanta Five Pointses). The neighborhood is beautiful, and the price is probably a little high but it's lower than what we were expecting and WAY lower than what Philly would have been (especially as a percentage of salary). I'm going to see it at 9AM tomorrow.</p><p>The only question is: is this all karmic refunds on the past 2-3 years of horror, or is it a layaway against somethiing horrible in the future?</p><p>Fuck it. Rock and roll, baby \m..m/</p> mdxi 2005-07-20T02:40:51+00:00 journal Cranberry, Weekend http://use.perl.org/~mdxi/journal/25771?from=rss <p>Friday night I finally overcame a week's inertia and started hacking on cranberry, my console mode mp3 player. I got a harness around Audio::Play::MPG123 (which works just fine with mpg321 (there is a Audio::Play::MPG321, but it has problems, somewhere -- its poll() method takes a significant fraction of a second to execute, which is wholly unacceptible for something in a core event loop)) and then hooked it up to my Acme::Curses::Marquee, and then added a tiny bit of control logic, <em>et viola</em> a simple randomizing mp3 player. This is just the barest beginning of what I'd eventually like it to be however. I'll write more about that when I have a more concrete idea on how things should work.</p><p>Did absolutely nothing else over the weekend except watch a couple more bad movies. We (and by "we" I mean "K") tried watching the recent King Arthur movie, but it was so bad that <em>we</em> actually gave up after about 10 minutes (which is so say, after the third line of dialogue).</p><p>We followed up with 1984's <em>Silent Night, Deadly Night</em>, which was a far superior movie. Full of nonsensical nudity, nonsensical baroque violence (kudos on the deer head idea), it is a shining example of the mid-1980s slashflick form. Two things really elevate it above the norm, though. First, the Mother Superior nun, who has the least sympathy of any human being ever: the lead character is traumatized by seeing his parents murdered by a petty thief in a Santa suit, so the nun beats him into sitting on another Santa's lap every year, causing him to become more and more violent; later, the children in her care witness a policeman shoot a blind priest dressed as Santa at close range (he nearly falls on top of them), and she simply hustles them back inside and makes them sing "Deck the Halls". Second, everytime the lead character is about to off someone he yells either "PUNISHMENT!", or my personal favorite, "NAUGHTY!". This is sheer genius.</p> mdxi 2005-07-18T19:00:23+00:00 journal Trac, Satisfaction, Bislama http://use.perl.org/~mdxi/journal/25625?from=rss <p>Started using Edgewall's Trac yesterday. It's a really nice tool. The only complaint I have about it is that it's designed to handle <strong>single</strong> projects, and I really want to be able to manage <strong>all</strong> my projects at once, and see TODOs and milestones and tickets from all of them. Still, until I get around to writing that, it works very nicely. It's also about 4 times faster than Kwiki, with both of them running in pure, unaccelerated CGI mode.</p><p>What <em>happened</em> to kwiki between 0.18 and 0.3? My uneducated guess is that there exists a point of diminishing returns for "pure" software engineering and OO subclassing, and Kwiki crossed way over it during its redesign.</p><p>We watched a movie Friday night that made last weekend's batch seem like masterworks: <em>Satisfaction</em>. If you're unlucky, you may actually remember this 1988 stinkbomb which was meant to rocket Justine Bateman to superstardom, but didn't quite manage to do so. This Aaron Spelling-produced crapburger is mostly notable for being the first credited appearance of Julia Roberts (as "the trampy one"), and being the only movie that Britta Phillips (better known as the voice of Jem (as in Jem! and the Holograms), now in an actual band called LUNA) has ever appeared in.</p><p> <em>Satisfaction</em> doesn't have a plot. It has a taped together string of set pieces lifted from after-school specials, with no real segues between. Now they're facing the prospect of being away from home for the first time. Now they're having creative differences. Now Julia Roberts is being a slut. Now they're experiencing the harsh realities of not fitting in with the posh kids. Now Jem is overdosing. Now Justine Bateman's teenage heart is being broken as she tries to cope with adult relationships. Oh yeah, adult relationships. This movie also features Liam Neeson in a performance I'm sure he's not happy about, as a club owner/beach bum/former musician who falls in "love" with Justine Bateman and is "inspired" by her to start "writing" "music" again until his ex, Debbie Harry, shows up and ruins the thoroughly creepy and unappealing summer "fantasy". </p><p>The douche commercial lookalike montage of Neeson and Bateman riding horses and bicycles on the beach is not to be missed.</p><p>Finally, last night, one of the #perl guys announced that he'd spent the day localizing Firefox into Bislama, which is a creole/pidgin/trade language from Vanatu and surrounding islands. Or, in Bislama:</p><blockquote><div><p>Pidgin toktok blong Saot Pacific</p></div> </blockquote><p>Several humorous real and faked examples of Bislama were given, with most people focusing on "blong" (a corruption of "belong" and the all-purpose possessive modifier/"containing" preposition/"type of" adjective pointer) and "wittem" (a dialectish corruption of "with"). I tried my hand at a blinkenlights grade pastiche of the language, but ended up closer to home than I intended:</p><blockquote><div><p>&lt;me&gt; me blong schlong fapfap wittem piccies blong headred plumpytitties &lt;bislama_guy&gt; FYI, breasts actually <strong>are</strong> called 'titi' in Bislama. A bra is 'basket blong titi'...</p></div> </blockquote><p>Bislama: 1, Me: 0</p> mdxi 2005-07-10T19:56:39+00:00 journal Bard's Tale http://use.perl.org/~mdxi/journal/25557?from=rss <p>The PS2 version, and not the C=64 or Apple ][ version, just for clarity.</p><p>Waltzed through it in about 12 hours thanks to turning on the invincibility cheat and the 100X damage cheat (not a typo) and just blasting my way through with the balletics of dual-wield (broadsword in one hand, dirk in the other). </p><p>It's an enjoyable game, is quite funny (K laughed out loud quite a bit), and the treble endings are a neat bit, though they're all WAY too short. How can you not like a game with dance-battling zombies and undead livestock? The humor is split between beating-you-in-the-head unsubtlety and never-explained-wry-touches (I didn't see the logic of undead sheep casting sleep spells until near the end of the game). Also, having a semitransparent undead puppy is the best thing ever.</p><p>The biggest problem is that despite being a light, Diablo-style, comedy-oriented, action RPG, Bard's Tale suffers badly from FF6 syndrome (AKA FF Plot Death). For the uninitated, this is where a game has a very enjoyable and engrossing storyline until halfway through the game, where Some Bad Event transpires and suddenly it's just one dungeon crawl after another, with tiny bits of plot thrown in to keep you from breaking things. It <em>specifically</em> suffers from FF6 syndrome in that there actually is a WOR type scenario, which closes off lots of things you may have been saving up for or wanting to come back to, with no warning.</p><p>There are some unlockable extras, but they're rather poorly implemented (the art galleries, for instance, in addition to not being zoom/pannable, are uncontrollable slideshows).</p><p>Final nitpick: it claims to be a naughty, bawdy game, and has the M rating to match, but there's nothing in here you wouldn't see or hear with far more frequency in a PG-13 movie. Since they rated themselves M, they should have gone all out and just streamlined actual cussing and nudity into the game as <em>God of War</em> did (have I mentioned how much fun <em>God of War</em> was?)</p><p>It's definitely fun and satisfying as a rental. I don't think I'd want to buy it though.</p> mdxi 2005-07-07T03:57:18+00:00 journal Catchup http://use.perl.org/~mdxi/journal/25495?from=rss <p>I've been very busy while accomplishing very little. The job thinger is still in limbo, first and foremost. Hmmmm. Moving on.</p><p>A week ago, on a whim, I thought I'd see if I could manage to make a ASCII-art scrolling track/artist/album type display for the mp3 player I plan to write. It started well and went very quickly, but then I got bogged down in the fiddly bits of making the display animate properly, and ended up staring at it for 4 days without doing anything worthwhile. But during that time I did realize some problems with my initial approach, which made things go rather swimmingly when I sat down on Friday to make it go. Go it did, so yesterday I cleaned it up and isolated the logic into a module, which was released on the CPAN as Acme::Curses::Marquee. With that out of the way, and use of mpg321's remote mode, implementation of a non-sucky console mode mp3 player should be nearly trivial once I figure out how it should behave.</p><p>Olive's manual is nearly complete. Once it is, I want to try to hunt down the first-list-entry-link bug and fix it, then release b8.</p><p>Moving on...Literally years ago I wrote a little story in the mode of a childrens' picturebook, but the project fell by the wayside because I can't draw at all and I didn't know any people who could (much less <em>would</em>) do the illustrations for me. A few months ago a friend volunteered to help out, but her life has rather taken off on its own, so she hasn't had time, and I never bothered her about it. This week, taking a gamble on a somewhat renewed acquaintance, I asked someone else if they'd be willing to give it a shot. She was agreeable, but had some other things to finish up before she could get started. I was overjoyed; after about 5 years of languishing, what's another few months?</p><p>When I told <em>another</em> friend about this, she got all excited and asked if she could be in on the project as well. It turns out that she's been hiding her art-light under a bushel for quite a while and wanted a chance to get back into things. Long story short, now I have two illustrators and may actually do the original long version of the project, instead of just the one story. So awesome.</p><p>Next up: movies. In a nutshell, don't watch any of these unless you wish to induce vomiting -- <em>Prom Night II</em>, <em>Hot Water</em> (AKA <em>Junior</em>), or <em>Rape Squad</em>. At least <em>Hot Water</em> features the sizable naked breasts of Suzanne DeLaurentiis, who would go on to produce <em>Rocky V</em> and <em>Mannequin 2</em>.</p><p> <em>U-541</em> is predictable. So predictable that it's nearly a pastiche of submarine movies, but it's really quite good if you watch it right after <em>Rape Squad</em>.</p><p> <em>Tougher Than Leather</em> is laughably bad; if only the whole movie had been Jam-master Jay foolin' with the Beastie Boys and Run pretending not to like the receptionist chick. Rick Rubin should be killed for his role <em>in</em> the film as well as his roles in <em>producing</em> the film. Dave Mustaine sucks.</p><p> <em>No Retreat, No Surrender</em> is the best movie I've ever seen where Jean-Claude Van Damme plays a Russian karate champ who is part of a faceless corporation's evil ploy to win amateur karate titles on the west coast of the US, but is foiled by a teenager in too-tight jeans who is trained by the ghost of Bruce Lee.</p><p>That is all for today.</p> mdxi 2005-07-03T21:45:07+00:00 journal OPML http://use.perl.org/~mdxi/journal/25283?from=rss <p>Olive now has the capability to import lists of feeds in OPML format. Here's the first run:</p><blockquote><div><p> <tt>mdxi@fornax:~/code/olive/trunk$<nobr> <wbr></nobr>./olive ~/MySubscriptions.opml<br>Olive starting up.<br>Loading modules.<br>Initializing system.<br>Final stage setup.<br>Beginning OPML import.<br>71 of 72 feeds imported<br>See ~/.olive/errors.log for more information<br>mdxi@fornax:~/code/olive/trunk$<br>mdxi@fornax:~/code/olive/trunk$ cat ~/.olive/errors.log<br>-- Starting up at 2005-05-20T02:06:06 --<br>You're already subscribed to http://mdxi.collapsar.net/rss.xml as 'Diary'<br>mdxi@fornax:~/code/olive/trunk$</tt></p></div> </blockquote><p>It's quite simple: start Olive with an argument, and that argument is taken to be the name of an OPML file to be imported. A couple of basic sanity checks are done for each feed found (nested outline files are understood, but the 'container' outlines are discarded) and if everything looks good, the feed is added to the feeds hash. When its done, Olive terminates.</p><p>The result of the above import (me folding rjbs's NNW subscriptions into my testing subscriptions, yielded the following status line:</p><blockquote><div><p> <tt> [S: 571/981] [U/N: 888/888]</tt></p></div> </blockquote><p>So now we know that Olive handles larger amounts of data okay, and with the expected minimal increase in memory footprint (18M for ~80 feeds and 981 stories versus 17.5M for ~10 feeds and ~100 stories).</p><p>It still needs some cleaning up -- it should definitely ask the user for a new nickname when there is a collision instead of just throwing the feed out and writing to the error log as it does now -- but for right now I can consider this done and move on to the last few things I want to add before moving into a pure cleanup and documentation phase for a stable release.</p> mdxi 2005-06-20T06:29:15+00:00 journal God of War http://use.perl.org/~mdxi/journal/25224?from=rss <p>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.</p><p>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.</p><p>Level design and music are both excellent; the game plays like a movie. It's beautiful.</p><p>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.</p><p>Go play this game.</p> mdxi 2005-06-16T08:34:29+00:00 journal Amy, Olive http://use.perl.org/~mdxi/journal/25206?from=rss <p>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).</p><p>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. </p><p>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 <em>useful</em> but <em>small</em> software out of their listings but ensures a neverending stream of PHP image galleries and the like).</p><p>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 <em>my</em> diary code) and bolt on RSS generation on publish (also very very simple).</p><p>Got into an interesting job-related email exchange involving <em>Scheme</em> today. More on that later.</p> mdxi 2005-06-15T03:54:03+00:00 journal Wrap-up http://use.perl.org/~mdxi/journal/25146?from=rss <p>Had an interview today. If any of <em>you</em> 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.</p><p>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.</p><p>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.</p> mdxi 2005-06-11T03:56:28+00:00 journal Apple Suxx/More Feedback http://use.perl.org/~mdxi/journal/25104?from=rss <p>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:</p><p>I hope Apple dies.</p><p>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 <em>do</em> get that feeling from the Mac UI. </p><p>But still, I've used Macs continuously since 1998, and have used every version of the OS since 7.6, and the <em>polish and elegance</em> 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.</p><p>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 <em>really</em> bad error messages..."-10061", "-16022", "-10582" anyone?)</p><p>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 <em>not</em> 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.</p><p>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".</p><p>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&times;00 and 6&times;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 <em>also</em> 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?</p><p>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.</p><p>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-&gt;Import several thousand times, so I started up iPhoto and told it to import <strong>one</strong> 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.</p><p>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 <em>file</em>, just bad JPEG <em>data</em>), 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').</p><p>This is not how Apple software is supposed to behave. I submit to you, Dear Reader, that something fundamental has <em>changed</em> at One Infinite Loop.</p><p>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 <em>used</em> 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.</p><p>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 <em>really</em> 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.</p><p>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.</p> mdxi 2005-06-08T20:52:43+00:00 journal Spam Generator Problems http://use.perl.org/~mdxi/journal/25031?from=rss <p>This is either a bug or output of the most obfuscated spam generator ever made:</p><blockquote><div><p>Hello, do you need to might overtake you. And don't you yet realize where you stand - inspend Iess on your druggs? </p><p> 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 </p><p> 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. </p><p> With each purthe wealth of the city.chase you get: </p><p> * three men on the poop, and Pitt immediately below them, had failedTop quaIity<br> * BEST PRlCThat bloody vampire Jeffreys - bad cessto him! - sentenced me toES <br> *Total confidgained by precipitancy, and a deal to be gained by delaying, asentiaIity<br> * of sense might have sat down and waited, judging that to be theHome deIivery</p></div></blockquote><p>Bizarre. The non-spam text, by the way, appears to come from <i>Captain Blood</i> 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.</p> mdxi 2005-06-03T15:56:21+00:00 journal Indirect Hacking http://use.perl.org/~mdxi/journal/24993?from=rss <p>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 <strong>as</strong> or just <strong>after</strong> you press a key to do something for the first time in 15 minutes.</p><p>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). </p><p>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 <em>look</em> at the code and see what was going on. That was a good feeling.</p><p>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 <em>thing</em> that Dave Winer claims is a spec on his website. I'm sorry, but "An OPML doc consists of some <em>stuff</em>, stuffed inside some <em>other</em> stuff, in whatever way you'd like", is not a <em>spec</em>.</p> mdxi 2005-06-02T04:25:34+00:00 journal Mail on Olive http://use.perl.org/~mdxi/journal/24970?from=rss <p>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:</p><blockquote><div><p>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.</p></div> </blockquote><p>It's from Eben Moglen.</p><p>It feels pretty good.</p> mdxi 2005-06-01T06:00:08+00:00 journal Bleh http://use.perl.org/~mdxi/journal/24969?from=rss <p>New Olive release yesterday. Small changes, improved install script.</p><p>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.</p><p>I still really need new glasses.</p> mdxi 2005-06-01T03:32:12+00:00 journal HTTP Must Die http://use.perl.org/~mdxi/journal/24928?from=rss <p>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.</p><p>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.</p><p>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.</p><p>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 <em>XMLRPCHTTPRequest</em> (which, as I understand it, is just far more sophisticated message passing) and more <em>constrained network-transparent virtual memory</em> with XUL and/or HTML as a <em>user interface definition</em>.</p><p>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.</p> mdxi 2005-05-29T03:00:54+00:00 journal AirPort http://use.perl.org/~mdxi/journal/24912?from=rss <p>Found out last night that the Pismo's AirPort card <strong>does</strong> 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.</p><p>Struggling to get going on the diary project. At least I have a plan now. I slacked so hard this week.</p> mdxi 2005-05-27T18:45:43+00:00 journal AntiLiveJournal http://use.perl.org/~mdxi/journal/24820?from=rss <p>In one of those weird <em>synchronicity</em> things that happens now and again, several friends have recently complained at me that they'd like an online journal kind of thing, but don't want to use one of the big popular sites. Apparently livejournal's Whiney Emo Fucktard stigma is more widespread and mainstream than I thought.</p><p>Naturally all this planted the idea firmly in my head: I must help my friends by crafting a non-sucky, lightweight journalling platform. So that's what I'm doing this weekend, even though I hate web programming. Of course it's <em>really</em> simple (unlike the nightmare of forms processing that is kdict), so it doesn't hurt too badly so far.</p><p>In other news, K has decided that she wants an app similar to the One PIM To Rule Them All that I've been meaning to write for some yeard now, only she wants it as a Cocoa app, and while I find Xcode and Interface Builder to be completely awesome tools for GUI app building, I don't know ObjC and am fairly put-off by the brief glances I've taken at the docs for it. Maybe this Camelbones thing will hurry up and get done.</p> mdxi 2005-05-22T14:52:32+00:00 journal NOTHING http://use.perl.org/~mdxi/journal/24765?from=rss <p>I did nothing today. Felt mildly crappy (so much snot coming out of my head) and just wanted to chill. Watched the Sony and Nintendo E3 press conferences. I'll talk about those later. Eventually went for a walk, then did some more nothing, then made some dinner. Now, I am thinking, sleep.</p> mdxi 2005-05-19T04:23:56+00:00 journal For Robert http://use.perl.org/~mdxi/journal/24740?from=rss <p>1) Total number of books owned?</p><p>854, not counting periodicals, catalogs, or manuals</p><p>2) The last book I bought?</p><p>Omnibus edition of the <em>Journal of the Association of Engineering</em> <em>Societies</em>, volumes XIII and XIV (1894 and 1895)</p><p>3) The last book I read?</p><p>I think the last non-reference I actually completed reading was Mark Kurlansky's <em>Salt</em>.</p><p>4) Five books that mean a lot to me:</p><p>I hunted <em>Arnold Roth's Crazy Book Of Science</em> for years and read it a thousand times when I was younger, so it must mean something. The other four I'll have to think about.</p> mdxi 2005-05-17T15:31:37+00:00 journal Owwww http://use.perl.org/~mdxi/journal/24724?from=rss <p>Last night my eyes were watering a bit due to allergy type stuff. I absently dabbed at the corners with a bit of tissue, and suddenly my left eyelid fluttered open and closed, trapping part of the tissue against my eyeball.</p><p>Once I quit freaking out (just a few seconds, I swear) I went and examined the situation in the bathroom mirror, pinning my eye open Clockwork Orange style with two fingers. The tissue had become saturated with tears and was plastered on the leftmost part of my left eye, with the very edge of it just visible on my iris. It was disgusting. And painful. And irritating. I tried rinsing it off and plucking it off like a contact lens, but it wasn't having it. After a while the suck subsided ever so slightly and I went to sleep.</p><p>This morning my left eye cracked open and stared out through a haze of god knows what. Some rapid blinking cleared things up somewhat, and my eye seemed to be bothered a bit less, but there was still clearly a lump of tissue crud affixed to it. I figured I'd have to go humiliate myself at an opthamologist's office, but within an hour it was obviously starting to feel better. Apparently it had pretty much broken down and was being slowly flushed out the outside corner of my eye as a slow, thick stream of gunk and crust.</p><p>By mid-afternoon it was gone. Currently my eyes just feel a bit tired and look like I've smoked a couple kilos of marijuana.</p> mdxi 2005-05-16T23:20:34+00:00 journal Benchmarking http://use.perl.org/~mdxi/journal/24712?from=rss <p>Started learning Haskell today. So far, it's neat and only minimally annoying (stupid types). Knowing Perl and Elisp make it not too brain-stretchy. Actually compiling code feels odd...it's been probably since my last C++ class in 1999 that I compiled something written by myself.</p><p>One of the early examples in the tutorial I'm working through (YAHT) involves -- surprise -- the Fibonacci series, implemented recursively. Out of curiosity I wrote an iterative version in Perl and started running them side-by-side. First the code:</p><blockquote><div><p> <tt>--<br>-- This is Haskell...<br>--<br>module Main<br>&nbsp; &nbsp; where<br> <br>import IO<br> <br>main = do<br>&nbsp; &nbsp; &nbsp; &nbsp;hSetBuffering stdin LineBuffering<br>&nbsp; &nbsp; &nbsp; &nbsp;putStrLn "Find which Fibonacci number?"<br>&nbsp; &nbsp; &nbsp; &nbsp;num &lt;- getLine<br>&nbsp; &nbsp; &nbsp; &nbsp;putStrLn ("F[" ++ num ++ "] is " ++ show(fibo(read num)))<br> <br>fibo 1 = 1<br>fibo 2 = 1<br>fibo n = fibo (n - 2) + fibo (n - 1)<br> <br>#<br>#<nobr> <wbr></nobr>...and this is Perl<br>#<br>$num = &lt;&gt;;<br>chomp $num;<br>$t1 = 1;<br>$t2 = 1;<br> <br>for (1..$num) {<br>&nbsp; &nbsp; if ($_ == 1 || $_ == 2) {<br>&nbsp; &nbsp; &nbsp; &nbsp; $f = 1;<br>&nbsp; &nbsp; } else {<br>&nbsp; &nbsp; &nbsp; &nbsp; $f = $t1 + $t2;<br>&nbsp; &nbsp; &nbsp; &nbsp; $t1 = $t2;<br>&nbsp; &nbsp; &nbsp; &nbsp; $t2 = $f;<br>&nbsp; &nbsp; }<br>}<br>print "F[$num] is $f\n";</tt></p></div> </blockquote><p>The Haskell code was compiled with no special options using ghc. The perl was run under Perl, twice the first time, so that perl(1) would be buffered. Things didn't get interesting until around the 30th number in the series:</p><blockquote><div><p> <tt>mdxi@fornax:~$ time<nobr> <wbr></nobr>./haskell/fibo_hs<br>Find which Fibonacci number?<br>30<br>F[30] is 832040<br> <br>real&nbsp; &nbsp; 0m0.672s<br>user&nbsp; &nbsp; 0m0.432s<br>sys&nbsp; &nbsp; &nbsp;0m0.004s<br>mdxi@fornax:~$ time perl fibo.pl<br>30<br>F[30] is 832040<br> <br>real&nbsp; &nbsp; 0m0.240s<br>user&nbsp; &nbsp; 0m0.002s<br>sys&nbsp; &nbsp; &nbsp;0m0.002s</tt></p></div> </blockquote><p>This is where you can finally start to see a difference between recursive and iterative implementations. By 40 the difference was staggering:</p><blockquote><div><p> <tt>mdxi@fornax:~$ time<nobr> <wbr></nobr>./haskell/fibo_hs<br>Find which Fibonacci number?<br>40<br>F[40] is 102334155<br> <br>real&nbsp; &nbsp; 0m52.804s<br>user&nbsp; &nbsp; 0m52.541s<br>sys&nbsp; &nbsp; &nbsp;0m0.024s<br>mdxi@fornax:~$ time perl fibo.pl<br>40<br>F[40] is 102334155<br> <br>real&nbsp; &nbsp; 0m0.256s<br>user&nbsp; &nbsp; 0m0.002s<br>sys&nbsp; &nbsp; &nbsp;0m0.003s</tt></p></div> </blockquote><p>It took the recursive implementation 1m26s (162% longer) to find number 41 and 2m17s (147% longer than 41; 240% longer than 40) to find number 42.</p><p>Meanwhile the iterative implementation took 0.43 seconds to find the 100th number and the same amount of time to find the 500th. At this point I figured my typing lag was taking most of the time, so I rewrote the perl to use command-line arguments (I don't know how to handle that in Haskell). With this change, the iterative approach took 0.005s to find the 1000th number of the sequence, and (0.014, 0.111)s to tell me that perl(1) considers the (10,000; 100,000)th numbers equivalent to infinity.</p><p>What does this tell us? Other than that I am easilly amused, pretty much just that: the flip side to TMTOWTDI is that not every way is the right way for the job at hand. But we all knew that already, right?</p> mdxi 2005-05-16T02:21:19+00:00 journal Console Wars http://use.perl.org/~mdxi/journal/24710?from=rss <p>To borrow a metaphor...</p><p>Episode IV: Atari 2600 vs The World Winner: Atari 2600</p><p>Episode V: NES vs SMS Winner: NES</p><p>Episode VI: SNES vs Genesis Winner: SNES</p><p>Episode I: Saturn vs N64 vs PSX Winner: PSX</p><p>Episode II: Dreamcast vs PS2 vs Gamecube vs Xbox: Winner: PS2</p><p>E3 starts tuesday. This is when we finally get some idea of how Episode III may shape up.</p><p>Microsoft has finally come clean with some actual detail about their system, and it looks pretty good. They've realized that the best way to make a gaming console actually <strong>isn't</strong> to pretend that it's a really cheap PC (though they persist with their "vision" of a unified "media center"). The hardware is impressive. The idea of everyone getting online access would be a world-beater, but they only mean everyone gets chatting and downloadables, etc. You still have to pay for multiplayer stuffs. Gameplay on the few titles they've shown looks...well, it looks like you'd expect. Better. Smoother. The big question in my mind is: will the XBOX2 have any games worth playing? The original finally gained about 5 titles which weren't first-person shooters, fighters, or racing games; can this iteration do better? The controllers still look sucky though. Little tiny glossy buttons is <strong>still</strong> not the way to make a good controller, and making the gigantic logo in the middle light up doesn't change this.</p><p>Sony hasn't gone public with the PS3 yet. There's been rumors and conference whitepapers on its processors (note the non-use of "CPU"), but no hard data on the actual configuration of the system. There are screenshots of games coming out now, and they look...they look like renders. I've read several people's statements that screenshots no longer do games justice, and I believe it. I'm gonna need to see this stuff in motion. I'm not worried about games for the PS3 -- it has all the Japanese developers behind it, and with the runaway success of Katamari Damacy, I am hoping that more of them will be willing to release more of their "quirky" games to the North American market. I'm also sure that the PS3 will have built-in networking capabilities (any whitepaper on the Cell processor makes this clear) but no one knows what Sony is going to do with this. I'll also be pretty disappointed if there's no hard drive...memory cards suck balls, and you're gonna want to do <strong>something</strong> with that ethernet jack, right?</p><p>Nintendo isn't showing the Revolution at E3, and personally, I'm having a hard time caring. In recent years they've done nothing but take a "we know what you want better than you do" attitude and make promises which haven't even vaguely been kept. They're not showing the R because if they did "people wouls steal [their] ideas". You may remember that this is the reason Mario 128 didn't show at the LAST E3. Remember Mario 128? Remember how Mario Sunshine was a stopgap side-story and not the tru successor to Mario 64? Remember how Mario 128 would be out real soon now? In 2002? This behavior sounds strangely familiar somehow...can't quite put my finger on it...hmm. Anyhow, I'm really thinking Nintendo needs to be reborn as a software-only company, like Sega has. Then I won't need to buy a whole freakin' console just to play the next Zelda game.</p> mdxi 2005-05-16T02:07:07+00:00 journal Undocumented Features http://use.perl.org/~mdxi/journal/24693?from=rss <p>I was going to write myself a little Firefox extension just now. A teeny tiny textbook example of an extension to add a single item to the right-click menu. I wanted to be able to view an image in a new tab and others agreed this would be a sensical addition, so I started googling for HOWTOs and docs. It didn't take long to find pretty much exactly what I wanted because everyone seems to use this very action (menu modification) as the example of how to write an extension.</p><p>I grabbed a FF nightly, modified its registry to point to the unzipped versions of the chrome jars, and dug into the code. Finding the right starting point wasn't difficult, and I was just getting warmed up and about to make a first simple edit just to replicate the "View Image" entry and change its label, when I noticed this line in its stanza:</p><blockquote><div><p> <tt>onclick="checkForMiddleClick(this, event);"</tt></p></div> </blockquote><p>Why would a context menu entry be middle-click sensitive? The only thing middle-click does in Mozilla is...open...things in...new tabs. Hmm.</p><p>Right-click; middle-click; BING!</p><p>Dang, I was looking forward to writing that and learning something new.</p> mdxi 2005-05-14T21:40:08+00:00 journal MCLOCK http://use.perl.org/~mdxi/journal/24686?from=rss <p>Once upon a time (in high school, so, like 1992) Josh and I had the best idea ever: what if instead of, like, hours and crap, you just divided the day up into 1000 equal segments? Dude, that would be <strong>awesome</strong>. And completely unoriginal, but you think everything is your idea when you're an ignorant teenager.</p><p>Fast-forward a couple of years (1996). I'm working at TSYS, hating my life, and one night K and I are ambling down the walkway which goes along the Chattahoochee and was very nearly the only nice thing about that town. For some reason (was I already working on it???) I have my TI-85 with me, and I finish my first implementation of mclock, the metric timer.</p><blockquote><div><p> <tt>PROGRAM:MCLOCK<br>ClLCD<br>Disp "-----m c l o c k-----"<br>Disp "Enter current time in"<br>Disp "24h format. Hint: add"<br>Disp "15s as a pad."<br>Disp "<br>Input "Current hours:",STDHOUR<br>Input "Current mins.:",STDMINS<br>Input "Current secs.:",STDSECS<br>(STDHOUR*60*60)+(STDMINS*60)+STDSECS-&amp;gt;STDSECS<br>STDSECS/86.4<nobr>-<wbr></nobr> &amp;gt;MTIME<br>ClLCD<br>Disp "Current metric time"<br>Disp "is below. Enter it at"<br>Disp "the prompts."<br>Fix 2<br>Outpt(3,14,MTIME)<br>Float<br>Input "Hundreds digit&nbsp;<nobr> <wbr></nobr>:" Z4<br>Input "Tens digit&nbsp; &nbsp; &nbsp;<nobr> <wbr></nobr>:" Z3<br>Input "Ones digit&nbsp; &nbsp; &nbsp;<nobr> <wbr></nobr>:" Z2<br>Input "Tenths digit&nbsp; &nbsp;<nobr> <wbr></nobr>:" Z1<br>Input "Hundredths digit:" Z0<br>ClLCD<br>Outpt(1,6,"**********")<br>Outpt(2,6,"* mclock *")<br>Outpt(3,6,"**********")<br>Outpt(4,6,"*&nbsp; &nbsp;<nobr> <wbr></nobr>.&nbsp; &nbsp;*")<br>Outpt(5,6,"**********")<br>Outpt(4,8,Z4)<br>Outpt(4,9,Z3)<br>Outpt(4,10,Z2)<br>Ou<nobr>t<wbr></nobr> pt(4,12,Z1)<br>Outpt(4,13,Z0)<br>Outpt(7,1,"&nbsp; &nbsp;TI-85 ver. 0.3"<br>Outpt(8,1,"Press a key to quit."<br>While getKy==0<br>For(TIMR,0,339,1)<br>End<br>If Z0==9<br>Then<br>Z0=-1<br>If Z1==9<br>Then<br>Z1=-1<br>If Z2==9<br>Then<br>Z2=-1<br>If Z3==9<br>Then<br>Z3=-1<br>If Z4==9<br>Then<br>Z4=-1<br>End<br>Z4+1-&amp;gt;Z4<br>Outpt(4,8,Z4)<br>End<br>Z3+1-&amp;gt;Z3<br>Outpt(4,<nobr>9<wbr></nobr> <nobr> <wbr></nobr>,Z3)<br>End<br>Z2+1-&amp;gt;Z2<br>Outpt(4,10,Z2)<br>End<br>Z1+1-&amp;gt;Z1<br>Outpt(4,12,Z1)<br>End<br><nobr>Z<wbr></nobr> 0+1-&amp;gt;Z0<br>Outpt(4,13,Z0)<br>End<br>ClLCD</tt></p></div> </blockquote><p>I also wrote the obligatory die roller, and apparently started on something called UNICON, whose abortive code bills itself as a "Programmer's Multi Function Converter". It seems to have wanted a decimal integer as input, and would have returned the number in hex and octal plus the ASCII and EBCDIC characters. What was I thinking? Was I seriously planning on embedding 2 whole character sets (I can only assume I was going to pick <em>one</em> of the EBCDICs) in a TI-85 program?</p><p>Oh, those were bad days.</p> mdxi 2005-05-14T06:54:36+00:00 journal God Doofus of Dune http://use.perl.org/~mdxi/journal/24645?from=rss <p>23:56 &lt;@bda&gt; It's weird...<br>23:56 &lt;@bda&gt; Going from Children of Dune to God Emperor was kind of like...<br>23:56 &lt;@bda&gt; Going from Stormwind to Daranassas.<br>23:56 &lt;@bda&gt;<nobr> <wbr></nobr>...<br>23:56 * bda sighs.<br>23:57 &lt;@bda&gt; brb, punching self in groin.<br>23:57 &lt;@ejp&gt; heh<br>23:57 &lt; solios&gt; the Second Half of Dune is only for the hardcore.<br>23:57 &lt; solios&gt; it's like the First Half of star wars.<nobr> <wbr></nobr>:P<br>23:57 &lt; solios&gt; all the gay, but you read it anyway because you liked the first half.<br>23:57 &lt;@bda&gt; According to to O'Donnell, Herbert wrote the first three books at once.<br>23:57 &lt;@bda&gt; Which makes sense.<br>23:57 &lt; solios&gt; they read like it.<br>23:57 &lt; solios&gt; more or less.<br>23:57 &lt;@bda&gt; Taken as a whole, they're Complete.<br>23:58 &lt; solios&gt; I mean, there's a HUGE paradigm shift after Dune.<br>23:58 &lt;@bda&gt; Paul bowing out from becoming The Mantrout.<br>23:58 &lt; solios&gt; so it stands more to reason that he wrote Dune, THEN wrote Messiah and Children.<br>23:58 &lt;@bda&gt; Yeah.<br>23:58 &lt;@bda&gt; Well.<br>23:58 &lt; solios&gt; but they're logical extrapolations of what's going on in Dune.<br>23:58 &lt; solios&gt; I mean, you KNOW that's where it GOES.<br>23:58 &lt;@bda&gt; Supposedly he had it all in his head and it was all written at once.<br>23:58 &lt;@bda&gt; Yeah.<br>23:58 &lt;@bda&gt; And then...<br>23:58 &lt;@bda&gt; THREE THOUSAND YEARS IN THE FUTAR<br>23:58 &lt;@bda&gt; DUM DUM DUM<br>23:58 &lt;@bda&gt; I dunno.<br>00:01 &lt; mdxi&gt; Duncan Idaho MCMLXVII strode with purpose into Leto's chamber, hand raised in the challenging gesture of a teacher to a familiar student. "Now look here," he said, "I'm getting pretty tired of living in 20 minute spurts. You've really got to..." His words were cut off as the transmogrified Leto, hearing Duncan's words through the spice haze and his degenerating humanity, bellowed with rage and rolled about the chamber, crushing his old mentor with his bulk.<br>00:01 &lt; mdxi&gt; "Well fuck," said the Tlilaxau, "back to work..."<br>00:02 * bda stares at mdxi.<br>00:02 &lt;@bda&gt; &gt;_&lt;<br>00:02 &lt; solios&gt; mdxi: dude, he'll be there in about six pages. Don't spoil any more of it for him.</p> mdxi 2005-05-12T04:38:21+00:00 journal Good Day http://use.perl.org/~mdxi/journal/24586?from=rss <p>We returned to the trail with the old quarry and hiked the full 2 miles of it. It was a beautiful, sunny, warm spring day. The tail end of the trail had a uphill section that was a little too long for comfort, but if you're comfortable you're not getting anything out of it. I really must return in a day or two with camera.</p><p>An article I wrote is up on Groklaw today. Hello, world. Some people seem to like it fine, and a few seem to be fixating on the intro PJ prepended to what I actually wrote and are busilly taking issue with <strong>that</strong>. I don't think I'll be posting any comments in the discussion; I'll just watch from over here. It's rather tension-inducing, knowing that something you wrote will be read by hundreds of thousands of people in the coming days.</p><p>One person has already taken exception to my characterization of FORTRAN as a "less well-known" language. Welcome to the twenty-first century, my friend -- I know it's there and you know it's there, but believe me, not many of the new crop coming up do.</p> mdxi 2005-05-08T23:59:22+00:00 journal