Not yet dead
So I’m crazy busy again, but should have time to do some posting this coming week.
In the meantime, I’m making an open call for project ideas. If anyone out there has a good one that they want me to try my luck at, send me an email or leave a comment. I’m sick of building my own ideas. Think of this as a cheap alternative to going back to school for me, and a low-pressure alternative to being a research professor for you.
Least-used letter pairs
Curiobot is in the middle of a structural makeover and this morning I decided that the code needed a little condensing. Most popular Javascript applications simplify function and variable names to just a few letters, and some CSS-heavy pages use a similar unique identifier to cut down on bandwidth. This technique also obfuscates your code, if you’re worried about people stealing it and using it for their own (evil) intentions.
In a big old “Web 2.0″ (*gag*) application, condensing your code can reduce your page load times by a serious percentage. I think it’s especially important if you’re offering content for mobile users, where every kilobyte counts. Replacing 300 occurrences of 12-character variable names with 2-character names can save you 10*300 bytes = 3kb per download. That’s probably 5%, maybe 10% of your total script/CSS/HTML weight… so it adds up on high-traffic applications. Of course, as most web developers are quick to point out, I pity the poor bastard who has to try to understand and/or modify a function called “zx()”. Ever taken a look at Google’s scripts? Totally incomprehensible for that reason.
Technically, you could name up to 676 (26×26) functions, variables, or classes using a two-letter pair, but the problem you run into is that when your content is not perfectly isolated from your page’s structure, you can’t simply search-and-replace the page to find every occurrence of the classname “ea” without running into it in a sentence somewhere (”I went to the beach” or “Welcome to my neat-o website”).
For the minimum amount of content-structure collisions, I want to favor the two-letter combinations that are used least frequently in my content. So I wrote a quick Processing app to examine any given text and return an ordered set of letter pairs, sorted according to their frequency. Here are the results for a few sample texts:
- The first two chapters of War and Peace
- The front page of Boing Boing (including html)
- The first five chapters of The Little Prince (English version)
The pairs that are not in bold were not found at all in the sample text (use them for function/class/variable name replacements). Those that were found are displayed by frequency.
Here’s the code. Try inputting text that corresponds to your particular usage for better results.
So the next time you’re thinking of renaming “load_excellent_content()” to “le()”… don’t. Try “vq()”.
Remote kill switching
Bruce Schneier’s commentary on Wired today was pretty eye-opening. He discussed an issue that I had given no thought to: the remote “kill switch”.
OnStar will soon include the ability for the police to shut off your engine remotely. Buses are getting the same capability, in case terrorists want to re-enact the movie Speed. The Pentagon wants a kill switch installed on airplanes, and is worried about potential enemies installing kill switches on their own equipment.
Interesting. And fair enough, in the cases of buses (city-owned) and airplanes (airline-owned), so long as the riders are informed that such a technology exists before they choose that mode of transportation. I assume that OnStar’s engine shut off is marketed as a theft deterrent. Maybe it should lock the thief inside, too.
Of course, the terrifying part is that we’re approaching a Failsafe-esque condition.
When I get into my OnStar car, I want to be able to override the remote commands using a PIN that only I know. Maybe that works. As Bruce points out, however, the challenge becomes structuring the extremely delicate, critically-managed hierarchy of overrides: deciding who has the final say. I can’t even imagine a nation’s government handling the responsibility of something like this.
And then there’s Microsoft… apparently still trying to encourage users to switch to Linux:
Microsoft is doing some of the most creative thinking along these lines, with something it’s calling “Digital Manners Policies.” According to its patent application, DMP-enabled devices would accept broadcast “orders” limiting capabilities. Cellphones could be remotely set to vibrate mode in restaurants and concert halls, and be turned off on airplanes and in hospitals. Cameras could be prohibited from taking pictures in locker rooms and museums, and recording equipment could be disabled in theaters.
Incredible, isn’t it? An astounding lack of foresight.
First of all, let’s say that the bus and airplane overrides were marginally acceptable, assuming that someone finds a way to structure the system, and the public accepts it as a modern security measure. Microsoft’s concept targets consumer goods, not public transportation or corporate-owned airlines. It targets something that has been purchased. With money. Ownership transferred. Mine.
Secondly, the idea neglects the fact that such forms of post-purchase corporate influence have a history of dying slow and painful deaths. Case in point: cellphone hacking. Another one: the music industry.
I’m always amazed by large corporate notions of censorship and regulation. They think that they will win those battles. It’s like creating a map of the empire at 1 to 1, it’s like simulating the universe on a quantum computer. Unless the corporation becomes the population they are trying to manipulate, they fail.
Tutorial #9: Filling Space
I had a crotchety old man as a 2nd-year studio instructor. He was very adamant about the usage of the word space. He tried to tell us that space cannot be created (sometimes architects say that they “create spaces”), but all I learned was that it was very difficult to learn anything from crotchety old men.
It’s a matter of semantics, if you ask me. Creating space, defining space… whatever. Today, I am concentrating on fillling space. There should be no controversy there. Even while he was yelling about space, my professor was certainly occupying some.
I’ve been thinking of trying a space-filling algorithm for some time now. They’re quite simple, and quite useful. Jared Tarbell made a nice one a few years ago: Emotion Fractal. In the world of data analysis, they are commonly referred to as Treemaps.
Here’s what it will look like: The final result (click to activate, then press the spacebar to add boxes)
And here’s the source code: Space-filling classes
Let’s get started…
Art All Around
So the Art All Around competition is due tonight. For those of you who are unfamiliar with it, the premise is this: Create a plan to paint a large number of oil tanks located on the waterfront in (our fair city) Portland, ME. Some of the tanks will only have their tops painted, some will have their sides and their tops painted. The site is visible by land, sea, and air… but really only from a moving vehicle. The tanks are located adjacent to a major highway, and owned by the Sprague Energy Corporation; it is not public land.
Angel and I are submitting two proposals (since the depth of the proposals is very limited by the competition guidelines). Here they are:
** UPDATE: Chris sent me his excellent entry with permission to post it. Check it out below. **
Circles
The enormous silhouettes of local citizens walk in tireless circles around the tanks, while others bask in the sunshine on the tops.
Distortion
A texture of fluid lines challenges the shape of the cylinders, complementing the fact that they are experienced primarily while the viewer is in motion. Algorithmically generated via Processing.
Complements of Chris Nannig
Chris did this study in super-warped color adjacencies. I think it’s great.
Enjoy. Let me know what you think…
Traceroute Color Palette
I had this idea the other day: Make a screen that, when placed on the ground anywhere in the world, allows you to see the exact opposite side. Like your own portable hole through the center of the earth. I suppose it was inspired by this amazing installation.
Of course, I immediately dumbed down the idea a bit. I might pursue it eventually, once we have globally-available 1-foot-per-pixel satellite imagery, but for now, it’s not possible… without a lot of money (sponsorships appreciated!).
The variation became more of a programming challenge than an actual project. I decided to create an application that would choose a single color according to a user’s geographic coordinates, based on the satellite imagery available at that location. It essentially functions the same way as the original idea, except that it outputs only one pixel’s worth of color.
I made a quick prototype yesterday using only PHP. To test it, I hooked it up to a traceroute script and had it choose one color swatch per ‘hop’ on the traceroute, resulting in a color palette for the given route. Here are the steps:
- Using PHP’s PEAR Net library, execute a traceroute from the development server to any given domain or IP. Return a list of IP addresses of the hops along the way.
- Using the IP-to-geographic coordinates script that I made for the IP-mapping globe tutorial, translate each IP address to a longitude/latitude pair.
- Send each of those coordinates to a Google Maps page hosted on my server (developed with the Google Maps API), which centers a small map on that location and zooms in to the highest available satellite imagery resolution (that’s done via a custom Javascript error handler).
- My development server (running on Windows) takes a screenshot of that page using PHP’s COM commands. This part is very hacky, but trust me, using this workaround is much much easier than trying to grab the actual map images off of Google’s server… which also violates their Terms of Service, of course.
- PHP’s GD2 library analyzes the part of the screenshot that contains the map and averages the colors for that geographic location.
- Each color swatch is saved as a new png and output to the browser.
Unfortunately, since it’s set up to run only on a Window’s server (the screenshot command is not *nix compatible), I can’t show a working version. If there’s any interest in the code, I can post it, but again, until I find a more stable way to do this, it remains a development-server-only project.
The image above is the route between me (Portland, ME, USA) and the website nanoq.gl which is in Greenland. The traceroute is as follows:
Saco, ME, US -> Portland, ME, US -> Fulton, NY, US (x2) -> New York, NY, US -> Minneapolis, MN, US -> New York, NY, US (x2) -> Tim, Denmark -> Copenhagen, Denmark -> Nuuk, Greenland (x2)
It takes about 6 minutes per color palette, because the traceroute takes a while, and of course, the screen capture routine requires a delay between each page request to ensure that the page loads properly (Google Maps applications are loaded via the onload() function).
Kind of boring, but maybe some will find it interesting. I haven’t seen too many projects that analyze satellite imagery. Maybe that’s because no one finds it interesting… but I’d guess that it’s more related to the fact that it’s so damn hard to interface with map servers, and most interesting applications would probably defy somebody’s Terms of Service and get shut down anyway.














The article has
no responses yet