Thursday, November 11, 2010

Obama the Leftist

Righteous rant from Kevin Carson:
Obama lied when he said, "There is not a rich America, and a poor America….  We are one nation, one people."


The Iraqi worker is my fellow countryman.  The American plutocrat is my enemy.

Wednesday, November 3, 2010

Hate This

I love bike lanes, but this shrill denunciation of people parking in bike lanes during church is ridiculous: it's Sunday morning; you're not commuting; and church aside traffic is generally light. So just grow a pair and take the damn lane.

In addition, cycling advocates are done no favors by spandexed hobbyists exhorting cops to write parking tickets to old ladies in church hats. Bike lanes should be about safe transportation infrastructure, not staking out territory for yuppies.

Saturday, October 30, 2010

Polygons on a Sphere

It's this shape:
Convex polygon with no holes.

And a couple of instances of them go around a sphere in different directions (the blue dot shows the orientation, which is different from the direction of travel, and the red dot is the centroid):

Far from the center of the projection, they get distorted:
Polygons distorted near the edge of the projection.

When one wraps around to the other side of the projection it gets all screwy, but I couldn't get a screen cap.

Same repository as last time, now additionally depends on Shapely.

Wednesday, October 20, 2010


Contra xkcd, I'm sure thousands of corporations are helmed by people who seek guidance in prayer, horoscopes, tarot, &c. and doing just fine.

Most of these ideas don't even theoretically make sense ("health care cost reduction" isn't a market anyone can "make a killing in," which is why governments have to step in; I believe remote viewing is supposed to require people at the remote location; if the military were using hexes then they would probably keep quiet about it, and they have certainly at least tried it; and I don't think anybody would expect "crystal energy" to be energy in the sense of the physics term "energy").

And in any case, just because "capitalism" is "profit-focused" doesn't mean that individual firms succeed in discovering every possible path towards maximizing profits. Ruthlessness doesn't imply omniscience.

Tuesday, October 19, 2010

Dollar? I never even &c.

Via Atrios, I knew that it was widely believed that the US would not act to devalue the dollar, but I was also under the impression that the context of that position was that, while a falling dollar would be (potentially) beneficial to our economy, there are some number of reasons against trying to pursue those ends. I didn't realize Geithner's position was actually in the opposite direction, that we need to do all we can to strengthen the dollar.

I mean fair enough, some people are in the "let's try anything" camp while others are more towards the "let's not mess with anything and see how it shakes out" side of things. "Let's take whatever people in the 'try anything' camp suggest and run in the opposite direction" seems so pointlessly sadistic as to be off the reservation entirely.

You camp on a reservation right.

Sunday, October 10, 2010

Livin' on a Sphere

I've been mucking about trying to get something that looks something like what's described here, but on the surface of a sphere (not about to try modeling any kind of actual fluid dynamics, just trying to mimic the behavior).

I used a sinusoidal projection so each screen pixel represents about the same area of the sphere. It took me way too long to figure out I should be using regular old vectors in R3 instead of muddling through with latitudes and longitudes.

Brighter green points are heavier, and the blue point is their weighted average. The red point repels the green points and moves to the blue point whenever the green ones slow down sufficiently.

So this is early in a cycle, when the red point has recently moved to the weighted average location:

Early in cycle, origin of impulse close to center of points.

And this is later on in a (later) cycle, as the repelled points are converging towards the antipode:

Later in the cycle, new center far from origin of impulse.

Source here ("" is shown, but there's other related crap in there), requires Numpy and pygame.

Saturday, October 9, 2010

Preview of my Master's Thesis

The phrase "I am not a human being" is a restatement of "no homo," QED, I rest my case, nullus.

Thursday, October 7, 2010

The Means are the Ends

Ezra can't understand why anyone would want to require people to pass a drug test to collect unemployment: but it's not about the drugs, it's about the test itself, and making people submit to it.

The proposed policy differs from Carl Paladino's proposal to put welfare recipients in prison in degree rather than kind. There is no rational motivation, no goal to be accomplished, beyond the stigmatization and restriction of liberty imposed by the enforcement mechanism itself.

It's also blatantly unconstitutional, but when has that ever stopped the police state.

Saturday, October 2, 2010

Out of Comptrol

I didn't know that
  1. "controller" comes from "counter roller," meaning I guess that "to control" comes from "to counter-roll";
  2. "comptroller" is a misspelling of the same word, "born of ignorance and continued in darkness" (that's what she said); and
  3. the "P" is silent.
What I'm still not clear on is whether "the 'P' is silent" means that you're supposed to say "com'troller" because you wouldn't say the "P" in French (would you? I have no idea), or whether you're just supposed to ignore the ignorance-born/darkness-continued–ness of it and say "controller."

Wednesday, September 29, 2010

Questions for the Anti-Vaccination Community

  • Sometimes adults have to get a new immune system and so they get their vaccinations again. But they never go autistic, AFAIK.
  • Pets (dogs and cats, possibly ferrets in some places) get vaccinations. How come they never turn autistic? Retarded yes, but not autistic.
  • QED, I rest my case.

More Dorkiness

I've adapted the code from the other day to use real-valued characteristics, the Euclidean distance in characteristic space representing the probability of agents interacting. And I added some histograms to the display:

Early in the simulation, few connections between sites and traits very spread out

They converge on a wishy-washy moderate consensus pretty quickly, so there's a distance threshold in there to keep everything from joining together right away:

Later in the simulation, more connections and traits clustered around 0.5

Source here.

Monday, September 27, 2010

Your Ways Are Numbered

Have been thinking lately about simulating how cultural values change in a population.1

The general approach I was considering was an agent-based model where each agent's "values" are represented by a set of n real numbers in [0,1]: basically each dimension is like one of those survey questions that's a statement like "everyone should have access to clean drinking water," with answers ranging from "strongly disagree" to "strongly agree," and "neutral" in the middle (0.5).

And when two agents had a lot in common with one another values-wise (i.e., were nearby in n-dimensional space), then they would be more likely to move closer together. So starting with a randomly generated population, you'd see different subgroups start to coalesce into one or more distinct cultures with shared values (and eventually reducing to a single consensus culture if the simulation ran long enough).

Which as I poked around looked a lot like what was done in this 1997 paper (PDF) by Robert Axelrod (nullus), The Dissemination (nullus) of Culture. He puts his agents on a grid and only lets them potentially interact with grid neighbors. It's neat.

Here's a Python implementation, with visualization in PyGame (I inverted Axelrod's color coding so more similar sites are connected by darker lines, which strikes me as more intuitive):

import random

import pygame
from pygame.locals import *

class Simulation:

    WIDTH = 640
    HEIGHT = 480

    LINE = 4

    DRAW_FRAMES = 1000

    def __init__(self, dimensions):
        self.dimensions = dimensions
        self.grid_size = min(self.WIDTH/(self.dimensions[0] + 1),
                             self.HEIGHT/(self.dimensions[1] + 1))
        self.bg_rect = pygame.Rect(max(0, (self.WIDTH - (self.dimensions[0] + 1) * self.grid_size) / 2),
                                   max(0, (self.HEIGHT - (self.dimensions[1] + 1) * self.grid_size) / 2),
                                   (self.dimensions[0] + 1) * self.grid_size,
                                   (self.dimensions[1] + 1) * self.grid_size)

        self.sites = [[[random.randint(1,10) for i in range(5)]
                       for y in range(self.dimensions[1])]
                      for x in range(self.dimensions[0])]

    def background(self, screen):
        screen.fill((255,255,255), self.bg_rect)

    def similarity(self, p1, p2):
        return sum(c1 == c2 for c1, c2 in zip(p1, p2))/float(len(p1))

    def color(self, p1, p2):
        gray = 255 - int(self.similarity(p1, p2) * 255)
        return (gray, gray, gray)

    def lines(self, screen):
        for x in range(self.dimensions[0]):
            for y in range(self.dimensions[1]):
                start = (self.bg_rect.left + (x+1) * self.grid_size,
                + (y+1) * self.grid_size)
                if x < self.dimensions[0] - 1:
                    end = (start[0] + self.grid_size, start[1])
                    color = self.color(self.sites[x][y], self.sites[x+1][y])
                    pygame.draw.line(screen, color, start, end, self.LINE)
                if y < self.dimensions[1] - 1:
                    end = (start[0], start[1] + self.grid_size)
                    color = self.color(self.sites[x][y], self.sites[x][y+1])
                    pygame.draw.line(screen, color, start, end, self.LINE)

    def random_site(self):
        return (random.randint(0, len(self.sites)-1),
                random.randint(0, len(self.sites[0])-1))

    def random_neighbor(self, site):
        x,y = site
        neighbors = []
        if x > 0:
        if x < len(self.sites)-1:
        if y > 0:
        if y < len(self.sites[0])-1:
        return random.sample(neighbors, 1)[0]

    def interact(self, active, neighb):
        different = [i for i in range(len(active))
                     if active[i] != neighb[i]]
        if len(different) > 0:
            i = random.sample(different, 1)[0]
            active[i] = neighb[i]

    def try_event(self):
        active = self.random_site()
        neighb = self.random_neighbor(active)
        active_site = self.sites[active[0]][active[1]]
        neighb_site = self.sites[neighb[0]][neighb[1]]
        if random.random() < self.similarity(active_site, neighb_site):
            self.interact(active_site, neighb_site)
    def run(self):

        screen = pygame.display.set_mode((self.WIDTH,self.HEIGHT), HWSURFACE)

        done = False
        n = 0
        while not done:
            for event in pygame.event.get():
                if event.type == QUIT:
                    done = True
                elif event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        done = True

            n += 1
            if n > self.DRAW_FRAMES:

                n = 0

if __name__ == '__main__':

1 For extremely nerdy reasons.

Thursday, September 23, 2010

Recaps off to ya!

I thought Dave was about to go in a different direction when he cut down recapping television.

I hate to have to point this out, but while Mr. Delahaye attacks a blogger for "compar[ing] [them]sel[ves] to DERRIDA and BARTHES" (his caps), the quoted party he's rebutting actually makes a point of saying that he means "not to compare [him]self to anybody" (emphasis mine).

He rests his case, I'm sure.

But my real objection is that actually recapping is pretty interesting as a genre: it's something of such obviously little value that it only could have found a foothold in a digital context, and yet it evidently has enough appeal that there are not only sites devoted entirely to recapping that manage to scrape by, but there are more than a few non-recap sites that include recaps nonetheless to bolster their hit stats.

And from what I've seen of recaps (and as the Observer piece appeared to be arguing), the more popular ones tend to be not just plays-by-play of television episodes' plots, but rather those that delve into analysis and deconstruction of the sort which I believe Derrida would approve.

The story of television recaps on the internet is that in a medium without (as many) gatekeepers, there exists a public appetite for analyzing popular culture, an appetite that is largely unanticipated and wholly unsatisfied by the corporate producers of said culture.

Thursday, September 16, 2010

Consistency Check

One not infrequently encounters defenses of so-called "sweatshop" labor that proclaim that factories thus described are only able to find employees because they represent the "best available option" for residents of their localities.

Consequently, goes this line of argument, any bleeding-heart's personal boycott (or public campaign exhorting widespread boycott) of companies using these types of facilities is counterproductive, making the lives of the workers the would-be do-gooder claims to be looking out for worse off by hurting their employers.

It strikes me that for a moral person who truly believes this, it should not be enough to stop at "don't boycott" as a response to sweatshops: indeed, there is a moral obligation to actively seek out and prefer sweatshop products over alternatives, and to agitate for others to do the same.

The purchase of "fair trade," artisanal, or other "humanely manufactured" items takes food from the mouths of those who need it most to line the pockets of well-heeled hobbyists and lazy union "workers."

Wednesday, September 15, 2010

Prancis Weight Chart

I forgot to post this earlier, but we recorded Prancis's weight until he reached what appears to be his full size, about 70 pounds. We always wanted to know how big he was going to be based on his weight at different ages growing up, and there just wasn't a lot of data out there, so this is our contribution to the public knowledge base.

He was born in early November 2008 (we say the 4th in honor of Obama's election, but we don't really know), neutered on May 30th, 2009, and he's half Great Pyrenees and half lurcher (in his case, saluki and Bergian shepherd).

Sunday, September 5, 2010

Occam's Razor

Not sure why anyone ever thought Obama was anything other than the neo-liberal centrist he always claimed to be and acted like.

Thursday, September 2, 2010

Fat of the Land

A blogger at Feministe responds to a typical argument against the conflation of weight and poor health. Monica's position is that tracking average weight (or BMI) of populations is useful from a public health standpoint. Thus the Jezebel party line against "fat shaming" is potentially harmful to the extent that it complicates addressing the genuine public health issue regarded as an obesity epidemic.

The arguments are typical of this topic, and they go past each other. The "obesity" epidemic is actually a poverty epidemic shaded by bad food policy. Corporations, as they always do, use its prominence in the public consciousness to push their products: we all know that there is this problem called "obesity" which threatens our society, so do your part by buying our snake oil.

Jezebel is primarily concerned in this case with media and marketing messages aimed at women. They are on perfectly solid ground warning consumers off marketing narratives that conflate a public health crisis with individual morality as expressed by participation in the fitness and diet industries. And while the personal responsibility narrative hurts the middle class consumers Jezebel is looking out for, it does a further disservice by obscuring the extreme income inequality at the root of our society's obesity crisis, so perhaps they do good in that sense as well, if inadvertantly.

In any case, defending the "overweight is unhealthy" status quo is neither necessary at this point nor particularly likely to result in meaningful progress against the poverty-based obesity problem. Middle class tolerance of fatness is a project that does not in any way conflict with correcting the market and policy failures that cause and maintain massive economic inequality.

Tuesday, August 31, 2010

Bees Nuts

Remember when all the bees were DYING? What happened with that?

And/or killer bees.

Basically there are always bees feasting at our window boxes, and I need to know if I'm the planet's savior or a public menace.

Sunday, June 13, 2010

Nerd Alert

Having only watched Buffy years after it aired, I'm totally oblivious to conventional wisdom along the lines of the sixth season being terrible, and that being attributed to Marti Noxon. I liked that season and didn't know anything about Noxon, though she always seemed good on DVD commentary tracks, and I've noticed her name in the credits for other shows I enjoy somewhat.

Do agree that it is disconcerting when one's fellow fans appear to Totally Miss The Point of something. The endless parade of homophobic, sexist, and just generally reactionary comments in the letters section of the Buffy comics really threw me for a loop, but then again it's baffling to me that someone approaching the show from an explicitly feminist perspective didn't like season six, so there's no accounting for taste, is there.

We all want the people we admire and care about to like the same things we like, but more often than not, they don't. And likewise we'd like all the people who do like the things we like to be admirable and care-worthy people, and to like those things for the same reasons. But they also don't!

And it's okay, and at the end of the day there's no reason why any random fan of whatever thing you're a fan of is going to be any more or less likely to be a good or decent person than any random person who isn't a fan of that thing, but in any case "season six was good" is doubtlessly a stronger debating position than "season six was terrible but it wasn't Marti Noxon's fault," and so I do recommend giving that season another chance.

Wednesday, May 26, 2010

Startup Idea

Social networking for municipal politicians. The site would notify all of your friends when you actually became mayor.

Alternatively: political system in which leaders are selected based on who goes to a place the most.

Tuesday, May 18, 2010

Velvet Goldline

Via Atrios, it's hard to understand what could be motivating Anthony Weiner to speak out against Glenn Beck's promotion of Goldline, other than a genuine concern for the people being scammed.

I don't see any political upside, and I don't think the words of a Jewish Democrat from New York are going to carry much weight with people who are already stockpiling gold against the coming New World Order.

So good on him!

Also, relatedly, it actually is probably a good idea to invest in non-gold, right? I have no idea how that even works if you don't have any gold to sell in the first place. How does short-selling work, and can you do it with commodities? Is that what futures contracts are?

(This is purely a hypothetical question, by the way, since obviously I have TONS of gold, just loads of the stuff, they call me the Midas Dutch, &c.)

Friday, May 7, 2010

All Debate on Actual Programming Methodologies Completely Aside

The term "code smell" is really gross. Using it as a compound noun ("x is a code smell"), as seems to be the convention, is even worse. It is a language smell.

Wednesday, April 28, 2010

Programming Language Nitpick

Many computer languages sport built-in keywords for logical truth values: .TRUE. and .FALSE. or true and false or whatnot. In every such language I'm aware of, these are used in comparisons: you have a logical expression and you are comparing it to the value TRUE.

The problem is that the English words "true" and "false" are adjectives, not nouns: the semantics of a comparison are that you are taking one thing and comparing it to another thing, but "true" isn't a thing, it's a description of a thing. (This is why an expression like "if (true == a)" looks backwards, despite being perfectly legal.)

Boolean keywords should be named "truth" and "falsehood" to more accurately convey their usage.

Monday, April 26, 2010

Green Teez Nutz

I love Thomas Friedman's green tea party suggestion, which reminds me of Gregg Easterbrook's prediction that Dubya would fix global warming. How do people who follow politics for a living manage to be completely oblivious to what Republicans actually believe?

Thursday, March 25, 2010

Friday, March 19, 2010

Prancis Bookmarks

Prancis bookmarks
Mark your territory!

Thursday, March 18, 2010

No Accounting For Taste

I played a game demo on the recommendation of Braid creator Jonathon Blow, and I had to go back to his blog post to make sure I hadn't missed some ironic meta-type joke. It's just time-wasting busy-work like sudoku, not interesting in the least...but I suppose that's how many people feel about crosswords. Or reading!

Monday, March 15, 2010

Harper's Puzzle Update

I've still been working through the old Harper's puzzles. I've gotten up to, but haven't yet printed out the puzzle for, my birth month of June 1979. I had to skip one or two because their pages weren't scanned as part of the online archives,1 so that's around forty puzzles in a little over four months.

They've been a pretty good mix of difficulties: though the easiest ones feel considerably easier than contemporary puzzles ever seem to get, there have been a couple that have taken me a while to crack.

1 Extra frustrating, because those must be the ones that are so fun that somebody just had to rip the thing out of the Official Harper's Archive Copy before it could be scanned. Ah well.

Friday, March 12, 2010

Some Notes on Data Binding Windows Forms

Two things I discovered, submitted into the e-ther for the benefit of future googlers.
  1. If you want to drive the state of some radio buttons from a presentation model (or "view model"), put each of them in its own panel. In WPF you have to assign them each a different group name, but the principle is the same: you're disabling the automatic radio button logic so you can handle it in your model (i.e., it is up to you to enforce exclusivity).
  2. If you have a data-bound list box and you want to be able to change the selection in your presentation model and have it reflected in the control (and why not!), you have to bind "SelectedIndex" rather than "SelectedValue". Once I figured this out I could understand why—if you bind to a path or have "ValueMember" set then different list items can have the same value so setting is ambiguous—but it wasn't obvious what was going wrong at first so I thought I'd put it out there.

Tuesday, March 9, 2010

Bad Financial Reform Worse Than No Financial Reform

I agree with Brad on financial regulation. It's a problem that the majority of Democratic politicians really don't see these economic issues as anything other than political balancing acts: don't piss off Wall Street or taxpayers or union members too much and the rest will work itself out.

This contingent does not understand what went wrong in the first place, because the financial crisis was a direct refutation of their world view. And by all appearances they are sticking to their guns: save the banks, calm everyone down, and the rest will work itself out. Ergo, they are unlikely to do anything to prevent further crises.

Video Game Industry Self-Parody Watch

A magazine for women gamers is running a makeup tutorial. Like how to get the look of some character from a video game? Amazing.

I would call it a tonedeaf misread of the magazine's target audience, but clicking through, it seems the "magazine for women gamers" is actually just PR for a "gamer model" agency. I.e., the actual target audience is the dudes who hire "booth babes." Hilarious, in any case.

Real Talk

Yglesias on why the US will never risk experimenting with democracy. Oops, I meant China, why China won't risk democracy.

Saturday, March 6, 2010

"Ramming It Through"

The GOP of yore would never have dreamed of running against Democrats for "ramming their agenda through" over Republican objections. "Vote for us because the other guys are too strong" is the kind of pitch I expect from Democrats. But one can hope!

Thursday, February 25, 2010

Why Require Licenses for Virtual Windows Installs?

At work I'm trying to do more testing on virtual machines, and I've run into the thing where you have to "activate" a virtual Windows install, but you can't just use the key you used for your real system because Microsoft will think you upgraded or replaced your system and stop recognizing the real one (or something: I'm not exactly sure how it plays out).

It appears that technically you need a separate Windows license for each virtual machine you run. Which I totally understand from a technical perspective—if your OS's licensing is linked to the hardware it runs on and you run it on virtual hardware then you need to license it for the virtual hardware—but not at all from a business standpoint.

So it would all make sense, except that apparently newer versions of the OS allow you to run some fixed number of virtual installs (like ten or something) on the same license as the host OS. Whatever effort was required to implement that feature presumably exceeded the effort it would have taken to allow any number of virtual machines to run on a machine under a single host's license.

I literally cannot imagine a single reason for limiting the number of virtual installations of an OS under a single host's license. How is running a zillion copies of Windows on the same hardware going to cheat Microsoft out of anything?

Tuesday, February 23, 2010

Car Handling and Human Intelligence

I had this idea that measuring an automobile's "handling" ability is sort of like measuring a person's intelligence. It's a kind of nebulous concept that summarizes stuff like turning radius, brake sensitivity, center of mass, and a whole bunch of other known and unknown characteristics.

Car experts could probably create a strict ordering for the handling of different models just by driving them, and from that you could fit the results to a curve and come up with a single metric for how well a car handles, a "general handling factor," h.

In talking about intelligence I've had a lot of debates break down to something along the lines of "g (or IQ) is real" vs. "g is not real," and I think this analogy reveals how those sides are talking past each other: h is pretty clearly "real" in that it represents a real property of a car and it would be useful to us in talking about cars and comparing different cars to one another.

On the other hand, h doesn't correspond to any single physical component of the car's construction: you can't just pop out one "handling mechanism" and replace it with a new one. And a statement like "this car corners well because it has a high h factor" ends up sounding kind of incoherent: it's probably sort of true, because cornering ability and handling are going to correlate very highly, but it implies a causal mechanism that isn't there. I think that's the problem of "reification" that people complain about when it comes to g.

Wednesday, February 3, 2010

Not Buying It

Via digby, Andrew Sullivan wonders whether Sarah Palin's son Trig is named for the medical shorthand for the technical name for Down Syndrome, Trisomy-g. I would like to see a citation for "Tri-g" used in such a manner. Google hasn't provided anything except other bloggers repeating Sullivan's musings.

It's also weird that he's still pushing the "Trig isn't Sarah's" theory. I don't understand how both rumors could be true.

Update: Yeah, I'm calling this a hoax. The only thing I found with "Trisomy-g" and "Tri-g" on the same page that didn't refer directly to Palin was at, basically a medical Urban Dictionary clone. I didn't see a way to tell how recently the "tri-g" tag was added to the entry, but I'm going to chalk it up to Jukt Micronics style hi-jinx.

Andrew Sullivan['s ghostblogger] either got played by a right-wing agent-provocateur, or is acting as one on his own behalf. At best it's a distraction, at worst it can function as a your-side's-just-as-bad rejoinder to criticism of "birther" conspiracies on the right.

Wednesday, January 27, 2010

Bad Review, A Zillion Years Later

I recently finished A Frolic of His Own and looked up reviews on the excellent Gaddis Annotations, which featured one from the Times Book Review:
Other obstacles seem gratuitous, even perverse...[T]here seems little excuse for subjecting the reader to 50 pages of verbatim, tiresomely repetitious testimony in one of Oscar’s legal depositions.
While I can imagine that a lot of people did find the deposition scene tedious—all they want is blood and gore and her hand unbuttoning his trousers—I am really astounded that the reviewer thought there was "little excuse" for the scene in question.

It's not "one of" Oscar's depositions, it's the only deposition in the novel. It happens early on: the two lawyers in the scene appear for the first time, in their only scene together, and the whole remainder of the plot refers back to this encounter as the reader learns new things about each of them. And it's not the testimony that's repetitious, but the lawyers' constant objections and rebuttals, which take on a Laurel and Hardy type quality.

In any case, I think the deposition scene is literally essential to the novel.

Tuesday, January 26, 2010

Occamize It!

Ezra Klein doesn't understand why the administration would do something like call for a discretionary spending freeze without getting something in exchange. I think Matt Yglesias's speculation regarding Ben Bernanke from a few days ago might be relevant here.

It is not outside the realm of possibility that Obama just genuinely is a fiscal conservative who worries more about potential future inflation than current unemployment. Our last Democratic president thought trimming the deficit in a recession was a good idea on the merits.

Saturday, January 16, 2010

AxWax Source

Source and Eclipse project files for the cryptic crossword thing available here. You can now sign in with a Google account and have it save your progress.

Thursday, January 7, 2010

Cryptic Thing

I cobbled together a little (barely) interactive crossword puzzle engine. Here's a link to the puzzle I did a couple months ago, Transportation Alternatives.

It has some rendering problems, especially on IE, and there isn't any way to save your progress or check your answers yet, but the highlighting and everything seem to work okay, so I thought I'd link to it.

The interface is GWT which is very cool and fun. And sort of mind-blowing in that it even exists at all, let alone works as well as it does.

Update: changed puzzle link.