My First APL Program

As a side project right now I’m investigating computer languages — not just experimenting with Perl vs. Python but trying to expose myself to different families of languages, such as functional, logic, imperative, object oriented, and obfuscated.

Most recently, someone mentioned that array languages are the least

widely known family — perhaps because the founding language in the group,

APL, was written with a nonstandard character set. Perhaps the most terse

of all programming languages, APL spawned a series of children, like J and K,

which, even though they can be written in a normal alphabet, retain APL’s

essential terseness — or, dare we say, obscurity?

I plan to learn J. However, before I did so, I committed myself to learning

at least a smidgen of the original APL, so I could see how the language was

originally intended to work and look.

Here’s my first APL program, designed to produce a Vigenere tableau:

Note the code isn’t in the standard ASCII character set, so I had

to represent it as an image file.

The heart of the code is the central box of the next image. This should read as:


disclose (( -1 rotate (indexList (shapeOf Y)))
(outerProduct rotate) (enclose Y))

and executes right to left:

To translate into pseudocode:


// Assign the alphabet to the variable Y
Y = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
// Now perform the following:
(unbox
((outerproduct rotate)
(rotate -1 (enumerate (length y)))
(box y)
)
)
 
// This is the moral equivalent of:
// (1). Treat array Y like a "scalar" variable
boxedY = box(y)
 
// (2) Find the length of Y - in this case,26
lengthOfY = length(y)
 
// (3) Get an array from 1 to the length of Y
// We will use this (1 2 ... 26) later to
// rotate the alphabet to the side
list1toY = enumerate(lengthOfY)
 
// (4) Rotate list by one so that the first
// row is a "no-op" rotation: (26 1 2 ... 25)
// (I should have just have subtracted one
// from each list to get (0 1 .. 25), but
// it's just my first APL program!)
rotateAmounts = rotate(-1, list1toY)
 
// (5) Create a "mapping rotate" function that takes
// a list of integers as its first argument and
// rotates each element of its second argument
// by the supplied integer.
// We had to "box" Y earlier because APL by
// default treat each of its elements as a one-element
// array.
mapRotate = outerproduct(rotate)
 
// Now create 26 copies of Y, each rotated by the amount
// specified in the rotateAmounts variable, and collect
// them all into a list. This is morally equivalent to:
// list(
// rotate(26, boxedY),
// rotate( 1, boxedY),
// ...
// rotate(25, boxedY)
// )
rotatedY = mapRotate(rotateAmounts, boxedY)
 
// Now "unbox" the rotated list, which takes the
// list of lists of rotated Ys and turns them into
// a matrix or grid rotation
return unbox(rotatedY)


The idea in my mind was to take an input array and print

a diagonalized rectangle with it. With the alphabet, this

becomes a Vigenere table — once the “indecipherable cipher”,

now a trivial matter for any modern computer.

With a different string, like “01” or “_[]” (reading the two

brackets as the APL Quad character), and a suitable change

in length of the output, it becomes instead a checkerboard:

Deciphering that is left as an exercise to you, dear fanu.

Cut me some SLAC!

I just had some pictures developed and found these gems from my November 2003 trip to the Stanford Linear Accelerator:

Some of the other pictures developed are so old that, well,

let’s just say that half the couples in one Christmas shot are

either getting divorced or have been for some time now.

Oy, do I need a digital camera.

Resident Evil 2: Aqualitylapse

I and my old high school buddy William just came back from seeing “Resident Evil 2: Apocalypse”.

And while there were many things I enjoyed about the movie, and even think it had the skeleton of an interesting plot, both William and I had the same reaction.

Simultaneously, we *tried* to excuse its suckitude by dissing it as a “B” movie, but immediately realized it was at best a “C” movie.

“Aliens vs. Predator”, how we miss thee.

OK, now we’ve lit this candle. This isn’t the permanent form of this weblog — I’ve allocated the site and software for a full-blown wikiblog upcoming soon — but at least now the blog and the hand-generated site are integrated, and I can post at the click of a button. Woo hoo!

And to tide you over, here’s a pointer to where I get my physics news.

The Alternate Phantom Menace

Somewhere in an alternative universe, there is a version of Star Wars: Episode I: The Phantom Menace starring Haley Joel Osment as Anakin and Robin Williams as Jar Jar.

And it rocks.

In that universe, George Lucas broke his hip just before filming began and handed the directorial task to his good friend Steven Spielberg. Busy with his own projects, Spielberg hired M. Night Shalayman to smooth out some problems in the script, and Shalayman in turn introduced Spielberg to Osment, starting a collaboration that would later continue in Spielberg’s critically acclaimed movies Artificial Intelligence in 2001 and Harry Potter in 2003.

The real turning point in the production was the hiring of Robin Williams to replace Ahmed Best as Jar Jar Binks. Spielberg was reluctant to replace another of Lucas’ chosen cast but after repeated attempts to tone down the character, Best’s creative differences with Spielberg reached the breaking point and he quit the production. Almost simultaneously, Lucas suggested Williams to Spielberg for some role after seeing him perform at a charity fundraiser at Skywalker Ranch, and Williams heartily agreed.

The completed film was two and a half hours long and made over seven hundred million dollars in its domestic release. Lucas, Spielberg and Williams threw their marketing weight and star power behind the film, but it was Olsment’s Oscar-winning portrayal of Anakin Skywalker that generated real audience buzz. Fleshing out a role already greatly expanded by Shalayman, Olsment brought quiet dignity and heartrending pain to the boy who would be Vader, and became the youngest winner of the Oscar for Best Actor.

While Star Wars: Episode I: The Phantom Menace would go on to win nine academy awards, the biggest upset of Oscar night was Robin Williams’ shutout for his portrayal of Jar Jar Binks. Acting largely from an improvised script, Williams brought both gravity and humor to the role of the exiled Gungan warrior — providing a much-needed element of comedy in Spielberg’s often grave treatment of the fall of Naboo — and later proved the perfect foil for Olsment’s tortured Anakin in his moving death scene at the hands of Darth Maul. However, since the physical appearance of Williams’ character was computer generated, he was technically shut out of the category of Best Supporting Actor, despite the extensive write-in campaign on the part of the Academy voters.

After recuperating, Lucas returned to the executive producer role on the Star Wars saga. Despite his injury, he had remained intimately involved with the production of the movie and was pleased with the final outcome, despite his initial resistance to changes made by Spielberg and Shalayman. Shalayman and Spielberg both attempted to bow out of the saga, reluctant to continue without the magic of Williams nor Olsment, who could not realistically return in later sequels. However, after intense personal lobbying Lucas convinced both Shalayman and Spielberg to return to the project, and work on the sequels began in earnest.

Episodes II and III are being filmed back to back in Tunisia and England as we speak. However, despite the critical buzz already being generated about the project and the remarkable collaboration of the three directors, there is little doubt that the Star Wars creative team will be hard pressed to top Jar Jar’s poignant death scene in Anakin’s arms. As Obi-Wan Kenobi and Qui-Gon Jinn watched helplessly on, young Skywalker is first touched by death as Jar Jar utters words that echo later in the series:

“Remember, Ani. Inna Force, I be with you always.”

-The Centaur
Renaissance Engineer

Interestingly, Van Allen (of the Van Allen Belt fame) now questions human spaceflight:

Space Science Pioneer Van Allen Questions Human Spaceflight

The quick no-bullshit translation of this kind of crap is ALWAYS the same:

“Please spend more money on my kind of programs!”

I just sat in on a NASA talk about robotic exploration. Now, it’s true that

a robotic probe can do a great flyby of a moon. But when it comes to

actual planetary science, the quote went:

“A robotic probe can do in an afternoon what a human geologist

can do in 45 seconds.”

What really irritates me about the kind of evil we’re encountering

in the anti-space-exploration movement is its upending of basic

human values. Your tax dollars, my tax dollars are going to fund

both space exploration and space science. But space science

is fundamentally USELESS unless it serves some human goal.

In other words, if we’re not going to GO there, don’t waste my

money futzing around taking PICTURES of there, because,

“at the end of the day”, all you’re trying to do is kill human

spaceflight so you can keep taking money from me to pay

for your comfortable academic chair.

Get a life.

-the Centaur