On Notice

On Notice!

In related news, check out The Stephen Colbert “On Notice Board” Generator.

Comments Off

Sandwich

This is one of the funniest comics I’ve seen in some time:

Sandwich (from xkcd.com)

Snakes preboarding a Plane

So apparently Snakes on a Plane hasn’t been doing too badly. But did you know that while Snakes on a Plane may be the first movie to be released based on an Internet meme[0], there have been other such movies in the works earlier, that simply failed to see the light of day? Here’s a sampling of some would-be offerings that never made it out of production:

All Your Base

Genre
Sci-fi thriller
Synposis
The FBI investigates the mysterious, unexplained appearance of cryptic messages appearing throughout the nation. Originally assumed to be the work of a suicide cult or terrorist group, things change once NASA discovers a spaceship entering Earth orbit. However, just before the military moves the Zero-gravity Incursion Group to attack, it turns out the messages were just the result of some kid using Photoshop, and the spaceship was just a coincidence. What a twist! (Directed by M. Night Shyamalan.)
Reason for Failure
Time Warner had already acquired the rights to the “All Your Base” name (see below), and efforts at finding an alternative title failed.

All Your Base Are Belong to U.S.

Genre
Comedy, animated
Synopsis
Was to be [adult swim]‘s first foray into feature films and intended to spawn a series of movies starring the cast of Space Ghost Coast to Coast. This movie would have been a zany spoof of American military and foreign policy during the early 21st century, with Space Ghost as the President of the United States, and co-starring Zorak as Secretary of Defense and Moltar as Secretary of State.
Reason for Failure
Abandoned after the cancellation of Space Ghost spin-off series The BRAC Show signalled a lack of interest in military-themed cartoons.

Roundhouse: The Chuck Norris Story

Genre
Documentary
Synposis
Chronicles the life story of legendary martial artist / actor Chuck Norris, beginning with the Big Bang (when he roundhouse kicked a singularity, thus creating the universe) all the way through to his ultimate showdown with Vin Diesel[1]. Stick around after the credits for a touching montage of every Mexican Chuck Norris has punched.

Reason for Failure
After filming completed, Chuck Norris demanded ∞% of the royalties. The producers couldn’t count that high, but Chuck Norris did. Twice. He then roundhouse kicked the completed film into the sun.

Switched! Ellen Feiss (working title)

Genre
Unknown
Synposis
Unknown
Reason for Failure
Script had been completed, but then the computer went “beep beep beep beep beep” and then the script was gone. Unnamed sources indiciate that it was a really good script. The writers were going to start over, but decided to get stoned instead.

Hampster Dance!!!!

Genre
Children’s, animated
Synopsis
Hampsters dance. And sing a song. For two hours.
Reason for Failure
Hampsters dance. And sing a song. For two hours. Test audience homicide rate: 46%. Test audience suicide rate: 54%.

Footnotes:

[0] OK, technically the plans for the movie came first, then the meme, then the movie. But if not for the Internet it would’ve been rated PG and called “Pacific Air Flight 121″.

[1] You may be wondering what the difference between a “Chuck Norris fact” and a “Vin Diesel fact” is. The answer is this: the Chuck Norris facts are true.

Two Steps Forward, One Step Back

This time, the screenshot comes first. Check it out:

Super Mario Bros and the Evaluator window

That’s right, Wallace can now screen scrape games while they’re being played in order to determine how well the “player” is doing. Sort of.

Here’s what the configuration for this looks like:

Screen scraping the score from Super Mario Bros

Intuitively, we need two pieces of information in order to screen scrape: the part of the screen where the data is, and how to convert the raw pixels into a number.

The first part of that is easy enough; load a screen dump into the viewer and draw a rectangle around the part of the screen you want. To make things easier, the current code assumes each character will be on an 8-pixel boundary, so the box “snaps” along the grid lines accordingly. (More on this later….)

The second part is a bit trickier, as we need to sort of do OCR on the image to figure out what characters are there. Luckily, part of NES video memory is the “pattern table”, where the currently loaded patterns are stored. A pattern is simply an 8×8 bitmap with a color depth of 2 bits. NES games use the pattern table as the building block for backgrounds and sprites. For example, here’s the pattern table for Super Mario Bros:

Pattern table from Super Mario Bros

The colors are arbitrary — the actual color you see during the game is a result of combining the pattern’s two color bits with two additional color bits associated with the particular part of the screen it’s being drawn at. If you look carefully, you can see that the first set of patterns are pieces of Mario sprites.

Of course, what we’re really interested in are the patterns for each number, as those tell us what each digit will look like (modulo palette rotation) on the screen. Once we assign each digit to its corresponding pattern (assuming a base-10 number system for the time being), converting a part of the screen to a numerical value is relatively easy.

“Relatively” being the operative word here, unfortunately. For starters, I’ve only been able to figure out how to access the current contents of the pattern table from the FCEU store. For Super Mario Bros this is good enough, since it never changes. However, games with more graphics data will swap different pattern data in and out — for example, the contents of the pattern table in Mega Man 2 change depending on which stage you’re in. I think this might be done with the different mappers in NES games, but the FCEU code here is particularly inscrutable, so I haven’t figured out any way to access the “other” pattern tables without playing to the point where they’re loaded.

Also, remember how I mentioned the code assumes that scores and other numbers you want to screen-scrape occur on 8-pixel boundaries? If you look very carefully at the screen shots above, it looks like that’s the case, doesn’t it? After all, the upper-left corner of the score display starts at pixel (24, 24) (where pixel (0, 0) is the upper-left corner), right?

Well, no. Look very carefully at the patterns for each digit. The digits themselves are only 7 pixels wide, so one column of pixels on each is “blank”. This margin is on the left side of each digit.

In other words, the score actually starts at pixel (23, 24).

The code currently hacks around this by adjusting all your screen scraping bounding boxes by one pixel to the left. Which, of course, breaks pretty much any other game you try.

Plus, if you want to scrape multiple values, you need to set up an action for each separately, which is very much a pain.

In other words, the code is functional, but the interface has got to go. While the “one action per metric adjustment” sounded nice back when I made that design decision, it’d be much nicer to take one screen dump and specify all the parts of the screen we want.

Additionally, since we need pixel-perfect precision for specifying what parts of the screen should be scraped, it’d be really nice to have the program figure out the bounding rectangles for us. As a one-time sort of thing when defining an action, it could take the digit-to-pattern mapping we specify and scan the entire screen to deduce where the digits appear, assemble them into rectangles, and let those rectangles be mapped to metrics.

Just another example of not learning design-relevant issues until actually writing code. In your face, waterfall model!

Meanwhile, Gustav Holst Falls Further Behind

Since it looks like that we’ll soon be designating three new bodies in the solar system as planets, we obviously need new mnemonic devices to remember the order:

Mercury, Venus, Earth, Mars, Ceres, Jupiter, Saturn, Uranus, Neptune, Pluto, Charon, Xena

(Relax, Xena’s only an informal nickname; 2003 UB313 hasn’t officially been named yet. Besides, it could’ve been worse.)

The best I’ve been able to come up with is this:

Most Violent Extraterrestrial Monsters Couldn’t Joust Successfully Until Network Producers Cancelled “Xena”

The worst is this:

Mnemonics Vindicate Excessively Mundane Centuries’ Juntas, Since Undergraduates Need Pneumatic Cniderian Xenophobes

(Hint: try reading it aloud)

Quack Experimental Blog Post

I, Koshi Rikdo, hereby give my permission to have Excel Saga turned into a blog post about Excel Saga.

So you say that you’ve built up a resistance to weirdness. You find Aqua Teen Hunger Force insufferably mainstream. You consider Katamari Damacy trite and conventional. And let’s not even get you started on how linear and predictable a three-hour slog through FLCL is.

My friend, like a marijuana user upgrading to crack, or a Unitarian Universalist converting to Fundamentialist Christianity[0], it’s time to move you up to the harder stuff.

Allow me to introduce you to Quack Experimental Anime Excel Saga. Or, Excel Saga for short.

(Oh $DIETY, you groan, another one of those rambling-about-some-random-anime posts. I promise I’ll try to keep this one interesting. Or at least thoroughly hyperlinked and with some pictures stolen liberated from Wikipedia. Oh, and I also accidentally solve the whole peace-in-the-Middle-East thing in the process.)

Excel Saga has everything but the kitchen sink fourth wall. Robots! Parodies! Aliens! Gangsters! Terrorists! Ghosts! Anemia! Self-Insertion! Dogs! Bowling! Fan Service! Immigrants! Explosions! Exclamation Marks!!

(Fun fact: “Self-insertionsounds a lot dirtier than it actually is.)

Excel Saga, in a nutshell, counts itself a king of infinite space is an off-the-wall gag-a-second anime that parodies and satirizes anything and everything. It spoofs and subverts just about every trope in the book and gleefully genre-shifts every episode. And despite all this chaos and confusion, it still manages to tell a coherent story of love, loyalty, betrayal, and afros.

Yes, afros. Do not underestimate the power of the afro.

Afro Attack!
A cautionary tale: Nabeshin (right, top), Pedro (right, middle), and Sandora (right, bottom) fail to use the power of the afro appropriately, and as a result are about to have their butts kicked by That Man (middle), while the Great Will of the Macrocosm and Pedro’s Sexy Wife (left) watch helplessly.

The world is corrupt! The secret ideological organization ACROSS plans to sieze control of the planet from the ignorant masses. However, “global conquest” is an objective only sought directly by fools capable of grasping only the most general of concepts, so ACROSS is focusing its efforts on Japan. And furthermore, due to limited resources, ACROSS is further concentrating on the conquest of F City, F Prefecture.

And by “limited resources,” I mean “having only two officers”: the eponymously cool saga-worthy Excel (not to be confused with the spreadsheet) and the mysterious, frail Hyatt (not to be confused with the hotel, especially not one in Cincinatti). Excel and Hyatt spend most episodes trying to execute the orders of Ilpalazzo (not to be confused with the, um, palace?[1]), ACROSS’s leader (aside from the shadowy, rarely-mentioned ACROSS HQ in Pogota (not to be confused with Bogotá)).

Even though most of Ilpalazzo’s orders wouldn’t do much to work towards city conquest in the first place, there’s little danger of success with Excel and Hyatt on the job. Hyatt has the habit of dying frequently — not in the “Oh my God, they killed Kenny!” sense, but rather in the “she has a CON of 1″ sense. And as for Excel, what she lacks in basic competence she more than makes up for in enthusiasm and fanatical devotion to Ilpalazzo, willing and eager to do anything for (or to) him. And while they’re carrying out his orders, Ilpalazzo passes the time reading magazines, playing dating sims, and practicing guitar to fulfill his secret dream of becoming a brooding pretty-boy rock star.

ACROSS
ACROSS. Front row, left to right: Hyatt, Excel. Back row: Ilpalazzo (not to scale). Not pictured: Hyatt coughing up blood, Excel being annoying, Ilpalazzo dropping Excel through a trap door for being annoying.

Meanwhile, while all that’s going on, Kabapu (not to be confused with whatever the hell could be confused with Kabapu) is establishing the Department of City Security to defend F City from the forces he imagines are threatening it. (Let’s face it, ACROSS isn’t much of a threat, and Kabapu seems surprised when he discovers there just might be a secret ideological organization out there.) Establishing a team drawn largely from other people living in Excel and Hyatt’s apartment complex, Kabapu turns them from mere civil servants into his dream municipal defense force, whether they like it or not.

Meanwhile, Pedro (not to be confused with a running gag that’s starting to run out of steam), an immigrant worker killed in a fire caused by Excel’s negligence as a part-time traffic cop, wanders the afterlife. After seeing his family quickly replace him with Gomez, Pedro’s former friend, Pedro is seduced by the Great Will of the Macrocosm (a personified reset button). Things get worse when That Man (not to be confused with That Guy), the Great Will’s lover, catches Pedro with her and tries to kill him. Um, again.

Meanwhile, Nabeshin (definitely to be confused with director Shinichi Watanabe, who is in turn not to be confused with Shinichiro Watanabe), runs around with an afro, alternately saving the day or wooing the ladies. Hey, if you’re going to self-insert, why not go all the way? (Yep, still sounds dirty.)

And if all that’s not enough for you, each episode is done in a different genre. Before the opening credits, a fictionalized Koshi Rikdo, creator of the manga Excel Saga is based on, grants his “authorization” to turn Excel Saga into the genre du jour, be it sci-fi (see Episode 2: The Woman from Mars), horror (see Episode 7: Melody of the Underground Passage), romance (see Episode 4: Love Puny[2]), high school (see Episode 11: Butt Out, Youth!), blatant fan service (see Episode 8: Increase Ratings Week), or even a parody of the porn Koshi Rikdo drew in which Excel and several other characters first appeared (see Episode 18: Municipal Force Daitenzin).

(That’s right, in Japan it’s not uncommon for non-pornographic adaptations to be made out of pornography. Oh Japan, it’s like you’re the bizarro United States. What next, cars that don’t suck?)

Municipal Force Daitenzin
F City Department of City Security Municipal Force Daitenzin. (Remind you of anyone?) Blue: Toru Watanabe. Green: Misaki Matsuya. Yellow: Daimaru Sumiyoshi. Red: Norikuni Iwata. Purple: Ropponmatsu Unit 1. Pink: Ropponmatsu Unit 2. I’d tell you which four are Excel’s neighbors and which two are robots designed by borderline pedophile Gojo Shiouji, but this caption is long enough already.

Believe it or not, all this and more does come together somehow in the end.

So, as you can see, Excel Saga is a little weird (in much the same way as Fred Phelps is “a little homophobic“). However, the strangest episode of all is surely Episode 24: For You, I Could Die, as it is played completely straight. That’s right, an entire episode of a gag-centric show is devoid of gags, instead focusing on character development and building up to the big confrontations in the would-be “final” episode.

Though, to be honest, this sudden stretch of seriousness starts at the end of (the otherwise mediocre) Episode 23: Legend of the End of the Century Conqueror, which closes with a surprisingly effective and depressing scene where (spoiler alert) Ilpalazzo shoots Excel. Which is impressive to see pulled off, considering how frequently Ilpalazzo shooting Excel is played for laughs in the first couple of episodes.

Anyway, there are two other episodes in particular that stand out from the rest by virtue of being sheer awesome. If for some reason you decide to watch exactly two episodes, these are the two you want:

In Episode 9: Bowling Girls, Ilpalazzo sends Excel and Hyatt to investigate what sports are popular among the ignorant masses, so as to better woo them into following ACROSS. Excel and Hyatt decide to work part-time in a bowling alley, which (surprise!) is completely empty, save for a local-as-you-can-get TV show filming wannabe pop idols trying to bowl. But then a bowling terrorist group — that’s right, a bowling terrorist group — takes over the alley and hijacks the TV crew to create propaganda to increase interest in bowling by introducing the world to Human Bowling, using their hostages as pins. Excel escapes and hides in the restroom, where she encounters Nabeshin in the next stall over, who mentors her in the ways of bowling (except for the actual sports training montage). She then takes on the terrorists in a combination bowling match / fight to the death to rescue Hyatt and the other hostages.

Maybe I just like this episode because I bowled for three years back in high school. Or maybe I like it because this episode is hilarious. Either way, bowling is definitely the optimal way of fighting terrorists. Hmmm…. Memo to Hezbollah: take advantage of the cease-fire, change your name to Hezbowlah, and challenge the Israelis to a three-game no-handicap match at Golan Lanes. Man, if this takes off, we could bring peace to the Middle East and give new meaning to the Arab League!

But what does everyone[3] want even more than peace in the Middle East? That’s right: gratuitous sex and violence! And Episode 26: Going Too Far is happy to oblige. This episode was made specifically so that it can’t be shown on TV, with nearly every scene (including the opening credits!) packed with something to make the Family Research Council foam at the mouth, including but not limited to nudity, decapitation, soaplands, hot mannequin-on-mannequin action, hourly-rate hotels (wink wink nudge nudge), hot rabbit-on-rabbit action, dogs pooping, hot robot-on-girl action, gushers of blood, and hot girl-on-girl action. (All of which, for the record, is played for comedy, not prurient interest; got that, Justice Stewart?) Plus it ties up the loose ends left over from the preceeding “last” episode, and it even opens with a musical number!

Broken Image???
Yeah, I don’t think my server’s AUP would appreciate a screen capture from Episode 26. But Wikipedia might have a little something for you….

A word of advice to anyone whose appetite has been sufficiently whetted: you’ll probably want to check out the translation notes on each DVD, which will pop up explanations of the various cultural references or inscrutable Japanese puns Excel will babble while you watch. Though since these explanations can sometimes cover the entire screen, you may want to watch the episodes without it first, at least so you can always see what’s going on.

So, as you can see, Excel Saga is hardcore weird. And entertaining. But mostly weird. And entertaining.

It’s just like one of our era’s great philosophers once observed, “Japanese cartoons are weird, man.

Post 552

Quack Experimental Blog Post

Today’s Experiment…………Failed

– Footnotes –

[0] Both examples with no supporting evidence, and one of which I pretty much just made up on the spot, but I won’t let that stop me from using them anyway.

[1] Yes, I know Excel, Hyatt, and Ilpalazzo are all actually named after hotels in Japan.

[2] I’m told it’s a pun in Japanese.

[3] OK, almost everyone.

I Apologize in Advance

Back when I was in college, I learned exactly two things from reading the student newspaper, The Exponent:

  1. Four-star Sudokus are still pretty easy.
  2. The best way to protect someone from a pun is to encrypt it using a monoalphabetic substitution cipher before publishing it.

As a demonstration of this latter fact, I offer you this:

WX D BMD VDPL SHAXQARHL QPEG BQPZB DVQOC XWPDE XDPCDBG YWW, W BOSSQBH CUHG RWZUC IDEE CUHRBHEYHB “BDYH DHAWB”.

And against my better judgement, I’ll even offer you the customary cryptogram hint: K equals X.

Music Applet Website Move

Music Applet has a new home on the web:

http://www.kuliniewicz.org/music-applet/

The old site will automatically redirect you to the new one for a while (at least, until Purdue gets around to shutting down my account on their servers). Updating your bookmarks is highly recommended.

To those of you who may be accessing Music Applet’s Arch repository, you’ll need to update the repository’s location. The following two commands should do it:


$ tla register-archive --delete kuliniew@purdue.edu--2004
$ tla register-archive kuliniew@purdue.edu--2004 http://www.kuliniewicz.org/arch

English Speakers Take Note

One comma is worth approximately $2.13 million.

Too bad you didn’t pay attention to grammar back in English class.

Comments Off

301 Moved Permanently

It’s time for a little bookmark-updating action:

http://www.kuliniewicz.org/blog/

Yes, after all that deliberating over a domain name, I ended up going with the one I initially rejected out-of-hand: kuliniewicz.org. Why? All the names I liked and that were available were also bizarre enough that I’d have to spell them out anyway. (Fun fact: the word-I-just-made-up rephlogisticated.org is not only unregistered, but as of this writing “rephlogisticated” has zero hits on Google! [That’s right! Phlogiston, bitches!] Hasn’t anyone ever given any thought to undoing the effects of dephlogistification?)

Besides, “kuliniewicz” is in my e-mail address anyway, and for the past few years it’s almost been in all my URLs, so why bother changing? And since “kuliniewicz” is practically a GUID, it’s unlikely I’ll encounter much competition for the namespace.

I’ve migrated essentially all the files I care about from Purdue’s server to my new digs at HCoop, and as you can see, my old blog redirects here now. Nothing else does yet, though, and lots of links in earlier posts here still point to the old site. That’ll be fixed all in due time.

So, I advise all of you to update your bookmarks at your earliest convenience. I figure Purdue will shut off my account sometime during the fall semester, so don’t wait too long.

And of course, if something looks broken over here, it probably is. Let me know and I’ll take care of it.

Time Trial

The genetic algorithms and Nintendo games thing makes incremental progress!

Recap: My ultimate goal, for some reason, is to see if you can use genetic algorithms to “train” a computer to play Super Mario Bros. A genetic algorithm needs two key things: a way to generate candidate solutions (relatively easy, here) and a way to measure their “fitness” (or “goodness”) so as to decide which candidates live on to the next generation and which go the way of the dodo.

Of course, being a master of computer science, I won’t be satisfied by creating something that is only capable of playing Super Mario Bros. Nay, I want something that can, in principle, be applied to any Nintendo game. Naturally, a fitness function appropriate for Super Mario Bros. (whatever that might be) would be quite different than one appropriate for, say, Mega Man 2, to say nothing of something like StarTropics or (dare I say it) Final Fantasy.

Clearly, the user of whatever program I create will need some way to specify the desired fitness function. This must be powerful enough to allow the user to make genuinely useful fitness functions, as well as providing enough flexibility to apply to a wide variety of games. And, of course, it needs to be simple enough so that the user stands a chance of using the blasted thing without giving up.

Any fitness function must have some way of measuring a candidate solution. Well, here’s a first stab at it.

Wallace's Evaluator window
(Click image for full-size)

The basic paradigm here is a combination of three simple concepts: metrics, events, and actions.

  • A metric is a named value you can modify. In principle, a metric measures one particular aspect of a candidate solution. If you know anything about programming, a metric is pretty much just a variable. A fitness function would ultimately be defined as a mathematical combination of one or more metrics.
  • An event is a condition you can associate one or more actions with. After each video frame, all events are checked to determine whether or not they fire. If they do, their associated actions are executed.
  • An action specifies how to modify one of the metrics when the action’s event occurs.

An example should make it clear how this is supposed to work. In the example above, we’re trying to measure the wall clock time that passes while playing. We’ve defined two metrics: Minutes and Seconds. Knowing that for an NTSC NES game there are about 60 video frames per second (closer to 60.1, technically), we can say that after every 60 frames, we should increment Seconds by one. Similarly, after every 3600 video frames, a minute has passed, so we increment Minutes by one and subtract 60 from Seconds.

In practice, these measurements wouldn’t be very helpful. If we wanted to measure how long a run took, we’d more likely just want to count the frames and be done with it. But since at this point I haven’t yet implemented more interesting events and actions (which will involve screen scraping in one way or another), this is about all the code can do at the moment.

Nevertheless, it does serve as a proof of concept for how this will work. I suspect this will prove to be a good balance among power, flexibility, and ease of use.

And since you’re all dying to know, here’s how long it took me to play through Air Man’s stage. (Yes, on Difficult; I’m not a wimp.)

Beating Air Man's stage in Mega Man 2
(Click image for full-size)

Remember that that’s me playing, not any fancy randomly-generated, natually-selected solution. My code isn’t capable of doing any of that.

Yet.