February, 2012 Archives

A new trailer for the upcoming Amazing Spider-Man movie has come out, giving a good idea of the direction the reboot will take. Rebooting a franchise after only 3 movies seems a waste, so this new beginning had better have a good vision, one that justifies starting over. The trailer points to the mystery of Peter Parker’s missing parents, fueling the plot and building Peter’s character. I’m not a fan of childhood flashbacks. It’s taken for granted most super heroes (and many other literary characters) are orphans. Maybe this is to just reduce the narrative complexity, or maybe it’s a necessary ingredient of hero-building. The new movie links Peter’s father to the scientist who becomes The Lizard.

The comic books never had the burden of each issue being taken as a whole, but the movies come out too seldom to be truly episodic, so each movie needs to feel complete. A power franchise like Spider-Man also means the producers have to plant seeds for larger story-arcs and future villains and plot points, but each movie still needs to end with resolutions, and to have resolutions it must first establish complications. So, screenwriter James Vanderbilt has chosen to use Peter’s parents to bind the action with sentiment. We’ll see if that works. » Continue Reading…

Second Spider-Man Trailer, Reviewed

Death stalks the stage in Constellation Theatre‘s production of Federico García Lorca‘s Blood Wedding. A mother grieves years after the death of her husband and oldest son, with her surviving son bearing the burden of providing a new generation to take care of the family farm. The good news of his finding a bride is mixed with worrisome news: the future bride once was with a man related to the murderer of the mother’s husband. I would suggest “Romeo and Juliet and Juliet’s Crazy Ex-Boyfriend” as an alternate title for this play.

Luckily director Shirley Serotsky does away with melodrama and presents this tragedy with duende, earthy and ethereal. Key to the plot’s emotional twists is the bride, played by Victoria Reinsel, who has to choose between passion and love.

The story is accompanied by music throughout, primarily by guitarist Behzad Habibzai sitting on the side of the stage. Actors join in by singing, most joyfully when rousing the bride with “Awake, O Bride, awaken,” the guests’ celebration contrasting with the bride’s own sense of doom. » Continue Reading…

Valentine’s is almost upon us, and here in the nation’s capital, that means hundreds of people running through town in pink underwear. Hats off (pants too, I guess) to the folks behind Cupid’s Undie Run for putting together the city’s best fundraiser, raising money for the Children’s Tumor Foundation.

Here are my favorite photos from the event.

A Unique Tour of the City » Continue Reading…

2012 Cupid’s Undie Run in Washington

After using AJAX to allow the CaBi Mapper app to get fresh data, I wanted a way to visualize the flow and ebb of data. I selected Google Chart Tools as the visual interface for my new CaBi Dashboard app. The app keeps track of the number of bikes and docks for each station with a stepped area chart. You can also view the current status of stations using the gauge visualization.

The stepped area chart resembles a seismograph, recording the number of available bikes and empty docks. The values are stacked on top of each other instead of overlapping, so the total is consistent. The program does not retrieve old historical data; it accumulates data as long as you keep the window open.

The AJAX code enables the charts to be continuously updated, live from Capital Bikeshare‘s XML feed. The frequency is chosen by the user. They can be displayed in any order. The most valuable sort shows the most unbalanced stations on top, those where the number of docks or bikes is closest to zero. The order of the charts is updated as new data arrives that affects the sorting order. » Continue Reading…

I first heard of AJAX years ago, and knew that I’d have to tinker with it soon. Well, I finally found a good opportunity to test it out, using it to let my CaBi Mapper application get fresh data without having the user refresh the browser.

AJAX stands for Asynchronous JavaScript and XML. The “asynchronous” part is key; that means that after calling an external program, the JavaScript program continues onto the next step. When the external program is good and ready with the requested data, the JavaScript program will be interrupted to execute the desired code. If you’ve used the setTimeout() function before, it is also asynchronous.

My goal for the CaBi Mapper app was to let the user decide when to get new data from the server. I added a “refresh” button that initiates the AJAX process. (Hopefully it’s not confusing to have it next to the “recalculate” button, which takes existing data and uses it to redraw the images in the current viewport.) » Continue Reading…

AJAX to the Rescue

To implement the latest feature in my Hangman game, I needed a way to disguise the phrase entered by the person customizing the puzzle. The configuration screen sends the puzzle via the “get” method, which basically means the form’s data get included in the URL. I wanted to use the URL so that people can email their puzzles to each other.

One way the game lets you customize puzzles is by entering phrases directly into the URL, using a parameter I call “phrase”. It then covers its tracks by removing that part from the browser’s address field. But for sharing via email, that URL needs to remain visible. So, I had to find a good encryption method for the puzzles. For the encrypted puzzles I call the parameter “secret”. (See Custom Hangman Puzzles for Valentine’s for examples.)

What I found on the web was too long and complicated. My own requirements were simple enough to allow for a more graceful solution. Phrases needed to hide only alphabetic characters, and furthermore the puzzles always appear in uppercase, so there are only 26 characters we need to encrypt. » Continue Reading…

Super Simple Encryption Algorithm

Just in time for Valentine’s Day, I added a new romantic theme for the JavaScript Hangman game, Cupid’s Hangman, where the puzzles celebrate the holiday. You’ll discover an assortment of quotations appropriate for Saint Valentine. Hint: try guessing the letters L O V E.

At the same time I’m launching a new feature letting you choose your own puzzle. Starting at the About page, you can enter a word or phrase and select the theme to go with it. The theme determines the puzzles that will be played after your custom puzzle, and some themes have their own color scheme (like Metro and Cupid’s).

The puzzle is encrypted into the URL, so you can link to it in an email without giving away the answer. Here are some samples, inspired by the Necco “Sweethearts” candy hearts with messages stamped on them: » Continue Reading…

Here’s my application for discovering Capital Bikeshare (CaBi) locations, and the availability of bikes and empty docks. I was inspired to build CaBi Mapper after the Bike Shops and Beyond project, which was populated with coordinates for a variety of businesses and services, including CaBi locations.

The data came from Capital Bikeshare‘s bikeStations.xml file, which is constantly updated as bikes are checked out and returned. It includes latitude and longitude, so mapping is easy. PHP lets you read in the entire XML file with a single function, simplexml_load_file. I used the Google Maps JavaScript API v3 to draw the map (with help from OpenStreetMap).

Once the data is available, the rest of the project is designing the user interface. I chose to go with pie charts to show the ratio of available bikes to empty dock slots. Red (matching the color of the bicycles) is used to represent available bikes, and dark blue represents free spaces. Hovering over a marker displays the exact number of bikes and slots, as well as the location. Clicking on the marker will zoom in and pan to the center, and display an information window with the location, availability statistics, and the date and time that a change was last reported, meaning the last time a bike was either taken or returned. » Continue Reading…