Status
someone checked in 4.2GB of data files in my subversion repo. makes a global checkout "unfun"
Location
Alexandria, VA
Subscribe to GeoRSS Subscribe to KML


Project

GeoPress

Published in GeoPress, GeoRSS, Maps, Project



O’Reilly Radar was the first to announce the release of GeoPress, a WordPress blog engine plugin that allows you to easily add location to blog posts, embed dynamic maps, and add GeoRSS encoding to your RSS output.

There have been other geo plugins before. However, they usually required you to make your own modifications to your template and provided a fairly arcane interface. The goal of GeoPress was to make adding location as simple as possible. Once you install GeoPress (copy and unzip to a wp-content/plugins/geopress directory on your WordPress site), and activate it (on the plugins panel), your configuration is done. Then go to write a blog post and you’ll see a new area with a map and boxes underneath the post.

You can enter an address, or a city, or just a country, or even click on the map to set the location. You can then add a name which will be saved and can later be used for quick reuse. If you want to insert a map into your post, just type INSERT_.MAP somewhere in your post. You can also use INSERT_.ADDRESS and INSERT_.COORDS, which will insert the address and coordinates, in appropriate adr and geo Microformats. Since GeoPress uses Mapstraction, you can switch between displaying Yahoo, Google, or Microsoft maps with just a quick select in your settings.

There are also some PHP functions for modifying your template to embed maps or post locations. Using geopress_map() you can embed a map of all your locations. the_address() can be used in your post metadata to always automatically output something like “this post was written by Bob from Waikiki, Hawaii”.

Lastly, the part that will be most useful in the future, is that the locations your write about will be embedded as GeoRSS in your RSS feeds. Aggregators like Mapufacture or FoFRedux will now be able to aggregate your geographic data and allow others to easily find interesting places, and build mashups.

Please let me know what you think!


AJAX your House

Published in Home Automation, Project


Indigo 2.0 beta screenshotYou should check out Indigo 2.0, and the new, schnazzy, web interface.

I got to be a part of the development of the new web interface. It is leveraging Ajax to allow a user to easily, and dynamically, control their location (not just for your house) automation system through a web browser. Built on open-source technologies such as CherryPy, Python, Cheetah, Prototype, and Scriptaculous, the new interface shows you that you can do more with websites and Ajax than keep a calendar.

You setup “Control Pages”, which are generic blank sheets for you to layout devices, applicances, controls, sensors, text, etc. You can place a background image, of say, a building floorplan, picture of your stereo, schematic of your security system. You then add the buttons for turning things on and off (lamp, coffee maker, TV, sprinklers), and sensors displays (temperature, weather, iTunes song listing). Controls and information are updated dynamically on the page. You can then link to other “Control Pages” to build up areas of a building, or subsystems, and so on.

For example, you may have a control page for the lighting and appliance in your house. Click on your TV and it may open another control page that shows an image of your stereo system with buttons for turning parts on and off, or starting up iTunes over an Airport Express. You can then go back and pull up your security or watering system. See what the weather prediction is for tomorrow, and so on. When you click on a lamp, a popup dialog (javascript, not *real* popup) with a slider and On/Off buttons let you quickly set the lamp brightness.

You can now also get an RSS feed of automation devices and sensor states to feed into your favorite RSS reader and get updates on your house/office/garage/shed/treehouse.

See also Gordon Meyer’s article, Indigo gets webified.


Mapufacture

Published in Rails, mapufacture


I’ve gotten more involved with the GeoRSS efforts and various tools to use GeoRSS for aggregating geodata. After Where2.0, I started working on a project with Mikel Maron for consuming and mapping GeoRSS feeds.

The project is Mapufacture. You can subscribe to feeds, create maps as collections of feeds, and share maps with other users. It’s still in very active development (one could call it beta, but I won’t), but is usable. Guilhem Vellut is the person responsible for the very nice mapping via YM4R_Mapstraction library. If you’d like to give it a try and give feedback that would be great.

Here are some examples of useful maps created with Mapufacture:


scrAPI - Microformat Parsing in Ruby

Published in Programming, Project, Ruby


I was looking for some nice Ruby utility to help in parsing out Microformats from webpages. There are 3 projects currently on RubyForge:

Talking on #microformats I was pointed to LabNotes newer incarnation of a parser: scrAPI. It’s a much more generic HTML parser/scraper, that can handle getting data from HTML by structure, class, or id. Here is Assaf’s presentation at Mashup Camp II where he gives some good tutorials and discussion about the API.

Down and dirty with the code

To illustrate scrAPI, I’ll show you the code needed to parse geo location data from a webpage.

First we just do bring in the necessary libraries, and get an example HTML page:


require 'scrapi/lib/scrapi'
require "net/http"

h = Net::HTTP.new("code.highearthorbit.com", 80)
resp, data = h.get("/greaseroute/index.php")

Then we define our scrapers. The geo microformat looks like:
<div class=”geo”>
<span class=”latitude”>35.126</span>,
<span class=”longitude”>-80.764</span>
</div>

The process method of the Geo class can take a HTML structure path, CSS class or id, and then the attribute to store. Also, our general Location scraper will look for all geo class tags in the HTML, and fill out the geos array using the Geo class Scraper.


class Geo < Scraper::Base
  process ".latitude", :latitude => :text
  process ".longitude", :longitude => :text
end

class Location < Scraper::Base
  array :geos
  process ".geo", :geos => Geo
  result :geos
end

Finally, now that we’ve built up our “tools”, we can scrape the data, and output all the found locations.


locations = Location.scrape(data)

locations.each {|loc| puts "[#{loc.latitude} x #{loc.longitude}]" }

That was really easy, and effective. Additionally, due to the Microformats standards, we can feel pretty confident on changes to the original site’s markup to not mess up our parsing.


Open-SESSAME at SMC-IT

Published in Article, Conference, Engineering, Project, Simulation, Space


I have a poster at the Space Mission Challenges in IT conference hosted by NASA JPL. Unfortunately, I was unable to make it to the 4-day conference, despite it being an incredibly large number of amazing projects.

In my place, Katie Betchold has done a great job getting my rather large 3′x4′ poster out there, hung up, and my in fact be presenting it today for the 2-minute poster precis. She is totally awesome!

If you don’t, in fact, find yourself in Pasadena, California at the conference, then you can virtually check out my poster (1.8 MB pdf). The accompyaning paper should be in a future IEEE publication available at local newstands everywhere.

The title of the paper is: “The Development and Use of Open-source Spacecraft Simulation and Control Software for Education and Research”, and primarily covers the experiences of developing Open-SESSAME spacecraft modeling and simulation framework, its use at the Space Systems Simulation Laboratory at Virginia Tech, and by various researchers around the world.

Open-SESSAME 3'x4' poster for SMC-IT