mdxi's Journal
http://use.perl.org/~mdxi/journal/
mdxi's use Perl Journalen-ususe 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:00pudgepudge@perl.orgTechnologyhourly11970-01-01T00:00+00:00mdxi's Journalhttp://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>mdxi2005-09-13T03:31:35+00:00journalLCCO 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>mdxi2005-08-06T19:50:22+00:00journalNew 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×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>mdxi2005-07-31T17:50:22+00:00journalOlive 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>mdxi2005-07-24T20:45:26+00:00journalMy 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>mdxi2005-07-20T02:40:51+00:00journalCranberry, 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>mdxi2005-07-18T19:00:23+00:00journalTrac, 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><me> me blong schlong fapfap wittem piccies blong headred plumpytitties
<bislama_guy> 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>mdxi2005-07-10T19:56:39+00:00journalBard'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>mdxi2005-07-07T03:57:18+00:00journalCatchup
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>mdxi2005-07-03T21:45:07+00:00journalOPML
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>mdxi2005-06-20T06:29:15+00:00journalGod 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>mdxi2005-06-16T08:34:29+00:00journalAmy, 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>mdxi2005-06-15T03:54:03+00:00journalWrap-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>mdxi2005-06-11T03:56:28+00:00journalApple 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×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 <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->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>mdxi2005-06-08T20:52:43+00:00journalSpam 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>mdxi2005-06-03T15:56:21+00:00journalIndirect 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>mdxi2005-06-02T04:25:34+00:00journalMail 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>mdxi2005-06-01T06:00:08+00:00journalBleh
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>mdxi2005-06-01T03:32:12+00:00journalHTTP 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>mdxi2005-05-29T03:00:54+00:00journalAirPort
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>mdxi2005-05-27T18:45:43+00:00journalAntiLiveJournal
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>mdxi2005-05-22T14:52:32+00:00journalNOTHING
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>mdxi2005-05-19T04:23:56+00:00journalFor 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>mdxi2005-05-17T15:31:37+00:00journalOwwww
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>mdxi2005-05-16T23:20:34+00:00journalBenchmarking
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> where<br> <br>import IO<br> <br>main = do<br> hSetBuffering stdin LineBuffering<br> putStrLn "Find which Fibonacci number?"<br> num <- getLine<br> 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 = <>;<br>chomp $num;<br>$t1 = 1;<br>$t2 = 1;<br> <br>for (1..$num) {<br> if ($_ == 1 || $_ == 2) {<br> $f = 1;<br> } else {<br> $f = $t1 + $t2;<br> $t1 = $t2;<br> $t2 = $f;<br> }<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 0m0.672s<br>user 0m0.432s<br>sys 0m0.004s<br>mdxi@fornax:~$ time perl fibo.pl<br>30<br>F[30] is 832040<br> <br>real 0m0.240s<br>user 0m0.002s<br>sys 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 0m52.804s<br>user 0m52.541s<br>sys 0m0.024s<br>mdxi@fornax:~$ time perl fibo.pl<br>40<br>F[40] is 102334155<br> <br>real 0m0.256s<br>user 0m0.002s<br>sys 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>mdxi2005-05-16T02:21:19+00:00journalConsole 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>mdxi2005-05-16T02:07:07+00:00journalUndocumented 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>mdxi2005-05-14T21:40:08+00:00journalMCLOCK
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-&gt;STDSECS<br>STDSECS/86.4<nobr>-<wbr></nobr> &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 <nobr> <wbr></nobr>:" Z4<br>Input "Tens digit <nobr> <wbr></nobr>:" Z3<br>Input "Ones digit <nobr> <wbr></nobr>:" Z2<br>Input "Tenths digit <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,"* <nobr> <wbr></nobr>. *")<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," 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-&gt;Z4<br>Outpt(4,8,Z4)<br>End<br>Z3+1-&gt;Z3<br>Outpt(4,<nobr>9<wbr></nobr> <nobr> <wbr></nobr>,Z3)<br>End<br>Z2+1-&gt;Z2<br>Outpt(4,10,Z2)<br>End<br>Z1+1-&gt;Z1<br>Outpt(4,12,Z1)<br>End<br><nobr>Z<wbr></nobr> 0+1-&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>mdxi2005-05-14T06:54:36+00:00journalGod Doofus of Dune
http://use.perl.org/~mdxi/journal/24645?from=rss
<p>23:56 <@bda> It's weird...<br>23:56 <@bda> Going from Children of Dune to God Emperor was kind of like...<br>23:56 <@bda> Going from Stormwind to Daranassas.<br>23:56 <@bda><nobr> <wbr></nobr>...<br>23:56 * bda sighs.<br>23:57 <@bda> brb, punching self in groin.<br>23:57 <@ejp> heh<br>23:57 < solios> the Second Half of Dune is only for the hardcore.<br>23:57 < solios> it's like the First Half of star wars.<nobr> <wbr></nobr>:P<br>23:57 < solios> all the gay, but you read it anyway because you liked the first half.<br>23:57 <@bda> According to to O'Donnell, Herbert wrote the first three books at once.<br>23:57 <@bda> Which makes sense.<br>23:57 < solios> they read like it.<br>23:57 < solios> more or less.<br>23:57 <@bda> Taken as a whole, they're Complete.<br>23:58 < solios> I mean, there's a HUGE paradigm shift after Dune.<br>23:58 <@bda> Paul bowing out from becoming The Mantrout.<br>23:58 < solios> so it stands more to reason that he wrote Dune, THEN wrote Messiah and Children.<br>23:58 <@bda> Yeah.<br>23:58 <@bda> Well.<br>23:58 < solios> but they're logical extrapolations of what's going on in Dune.<br>23:58 < solios> I mean, you KNOW that's where it GOES.<br>23:58 <@bda> Supposedly he had it all in his head and it was all written at once.<br>23:58 <@bda> Yeah.<br>23:58 <@bda> And then...<br>23:58 <@bda> THREE THOUSAND YEARS IN THE FUTAR<br>23:58 <@bda> DUM DUM DUM<br>23:58 <@bda> I dunno.<br>00:01 < mdxi> 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 < mdxi> "Well fuck," said the Tlilaxau, "back to work..."<br>00:02 * bda stares at mdxi.<br>00:02 <@bda> >_<<br>00:02 < solios> mdxi: dude, he'll be there in about six pages. Don't spoil any more of it for him.</p>mdxi2005-05-12T04:38:21+00:00journalGood 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>mdxi2005-05-08T23:59:22+00:00journal