<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;It's all about the map in this sites header today. The header background shows a dynamically generated map of the coordinates shown in the right top corner, or my last recorded place. I can select my current location (latitude and longitude) and the header background map is updated accordingly. So how exactly does this work?!&lt;/p&gt;

&lt;h3&gt;No Google or Yahoo! maps?&lt;/h3&gt;

&lt;p&gt;I integrated Yahoo! Maps first. The Yahoo! Maps look nice, the API is easy to use and well documented but the problem is that you are only allowed to play with these maps within limits placed on you by the API's terms and conditions. Below are some extracts from the &lt;a href="http://info.yahoo.com/legal/us/yahoo/maps/mapsapi/mapsapi-2141.html" title="Yahoo! Terms Center" class="ext"&gt;Yahoo! Maps API Terms of Use&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;You understand and agree that you must retain the attribution text and links contained within all Yahoo! Maps and Yahoo! Map images without alteration.&lt;/li&gt;
	&lt;li&gt;Your will not store or allow end users to store map imagery, map data or geocoded location information from the Yahoo! Maps APIs for any future use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would break these terms as I convert the original image to a grayscale version and store the map on the server for performance reasons so the Yahoo! Maps are out of the question. Google or Yahoo! Maps are great for out of the box functionalities but if you want more freedom you will probably have to look elsewhere (or pay for licenses if possible).&lt;/p&gt;

&lt;h3&gt;OpenStreetMap&lt;/h3&gt;

&lt;p&gt;Luckily for us there are other solutions out there. Let's take a look at &lt;a href="http://www.openstreetmap.org/" class="ext"&gt;OpenStreetMap&lt;/a&gt; for example. OpenStreetMap is a &amp;lsquo;wiki style&amp;rsquo; editable map, made by people like you and me. The content is available under the Creative Commons Attribution-ShareAlike 2.0 license which means anyone can use (and remix) the data as long as you share it with a similar license.&lt;/p&gt;

&lt;p&gt;This &amp;lsquo;Wikipedia-like&amp;rsquo; approach has some drawbacks as well: the map is incomplete and the data is not 100% reliable. On the other side you can correct or complete the map where needed. This may or may not be important for your project but I only needed a nice background image for this website so a general overview of the area is more than sufficient.&lt;/p&gt;

&lt;p&gt;OpenStreetMap has a RESTfull way to build a map image with a given latitude, longitude, zoom level and image size. Here is how (or see an example for &lt;a href="http://tah.openstreetmap.org/MapOf?lat=50.8668&amp;long=4.69714&amp;z=12&amp;w=200&amp;h=200" title="OpenStreetMap map of my home town" class="ext"&gt;my city&lt;/a&gt;):&lt;/p&gt;

&lt;samp&gt;http://tah.openstreetmap.org/MapOf?lat=&amp;lt;lat&amp;gt;&amp;amp;long=&amp;lt;long&amp;gt;&amp;amp;z=&amp;lt;zoom&amp;gt;&amp;amp;w=&amp;lt;width&amp;gt;&amp;amp;h=&amp;lt;height&amp;gt;&amp;amp;skip_attr=1&lt;/samp&gt;

&lt;p&gt;The &lt;code&gt;skip_attr&lt;/code&gt; defines if you want to include an &lt;abbr title="OpenStreetMap"&gt;OSM&lt;/abbr&gt; attirbution image in your map or not.&lt;/p&gt;

&lt;h3&gt;Start coding&lt;/h3&gt;

&lt;p&gt;The process flow:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;The current location is updated on the website,&lt;/li&gt;
	&lt;li&gt;a map of this new location is downloaded from a map server,&lt;/li&gt;
	&lt;li&gt;the downloaded map image is converted to grayscale and&lt;/li&gt;
	&lt;li&gt;the generated image is saved to disk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p class="center"&gt;&lt;img src="/images/map_flow.gif" alt="Map flow" /&gt;&lt;/p&gt;

&lt;p&gt;We'll use &lt;a href="http://rmagick.rubyforge.org/" title="Graphics Processing for Ruby and Ruby on Rails" class="ext"&gt;RMagick&lt;/a&gt; and Ruby on Rails to convert the downloaded image to something else so make sure you have this installed first.&lt;/p&gt;

&lt;samp&gt;# Writes an image with a map of the location, the zoom ranges from 4 to 17&lt;br /&gt;
def map(latitude, longitude, width = 500, height = 500, zoom = 7)&lt;br /&gt;
   require 'RMagick'&lt;br /&gt;
   require 'open-uri'&lt;br /&gt;
   map_request_url = "http://tah.openstreetmap.org/MapOf?lat=#{latitude}&amp;amp;long=#{longitude}&amp;amp;z=#{zoom}&amp;amp;w=#{width}&amp;amp;h=#{height}"&lt;br /&gt;
   uri = URI.parse(map_request_url)&lt;br /&gt;
   map = Magick::ImageList.new&lt;br /&gt;
   map.from_blob(uri.read)&lt;br /&gt;
   map = map.quantize(256, Magick::GRAYColorspace)&lt;br /&gt;
   map.write(RAILS_ROOT + '/public/images/map.png')&lt;br /&gt;
end&lt;/samp&gt;

&lt;p&gt;That's it, this method downloads and converts the image and saves it in your images folder so from now on you can use this image in your website:&lt;/p&gt;

&lt;samp&gt;&amp;lt;img src="/images/map.png" alt="Map" /&amp;gt;&lt;/samp&gt;

&lt;h3&gt;More resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/takecontrolofyourmaps" title="Take Control of Your Maps" class="ext"&gt;Take Control of Your Maps&lt;/a&gt; explains how to build you own map stack.&lt;/li&gt;
&lt;/ul&gt;</content>
    <created-at type="datetime">2008-04-15T18:14:57+02:00</created-at>
    <id type="integer">24</id>
    <location-id type="integer">1</location-id>
    <permalink>generated-maps</permalink>
    <title>Generated maps with Ruby on Rails</title>
    <updated-at type="datetime">2008-09-19T01:45:44+02:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;I keep the latitude and longitude for each of these blog post (as you can see in the right hand column). My blog's &lt;abbr title="Really Simple Syndication"&gt;RSS&lt;/abbr&gt; feed is generated from my posts table. Until now it was a plain simple RSS feed but why not combine the 2 and enhance my RSS feed with the coordinates? They are there anyway and GeoRSS is widely adopted these days.&lt;/p&gt;

&lt;h3&gt;What is GeoRSS?&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://georss.org" title="Geographically Encoded Objects for RSS feeds" class="ext"&gt;GeoRSS&lt;/a&gt; is a way to encode location information in RSS feeds. This can be as simple as adding one small &lt;abbr title="Extensible Markup Language"&gt;XML&lt;/abbr&gt; element to your existing feed. GeoRSS feeds are designed to be consumed by geographic software such as map generators and by doing so your feed can be used in new and different ways: pinpointing on a may, finding other posts close to this one, etc.&lt;/p&gt;

&lt;h3&gt;What we need&lt;/h3&gt;

&lt;p&gt;Generating the actual RSS feed is not in the scope of this article, we'll only add location awareness to our existing feed. Please head over to &lt;span class="vcard"&gt;&lt;span class="fn"&gt;Larry Myers&lt;/span&gt;&lt;/span&gt;' &lt;a href="http://www.myersds.com/notebook/2006/05/11/how_to_generate_rss_feeds_with_rails" title="How To Generate RSS Feeds with Rails" class="ext"&gt;How To Generate RSS Feeds with Rails&lt;/a&gt; article if you don't generate your feed yet.&lt;/p&gt;

&lt;p&gt;We'll need to add one small XML element to each item in our feed with the latitude and longitude for the post:&lt;/p&gt;

&lt;samp&gt;&amp;lt;georss:point&amp;gt;50.8668 4.69714&amp;lt;/georss:point&amp;gt;&lt;/samp&gt;

&lt;p&gt;In Ruby on Rails this looks like the following (where latitude and longitude are 2 fields in our posts table). The syntax looks a little strange as we need a way to add the &amp;lsquo;georss:point&amp;rsquo; element and Ruby doesn't like the colon in there (it indicates a &lt;a href="http://corelib.rubyonrails.org/classes/Symbol.html" title="Symbol class definition" class="ext"&gt;symbol&lt;/a&gt;).&lt;/p&gt;

&lt;samp&gt;xml.georss :point do&lt;br /&gt;
xml.text! post.latitude.to_s  + ' ' + post.longitude.to_s&lt;br /&gt;
end&lt;/samp&gt;

&lt;p&gt;Great, now we only need to add the GeoRSS namespace at the top of our feed to tell the feed parsers what we mean.&lt;/p&gt;

&lt;samp&gt;xml.rss (:version =&gt; "2.0", "xmlns:georss" =&gt; "http://www.georss.org/georss")&lt;/samp&gt;

&lt;h3&gt;My location aware RSS feed&lt;/h3&gt;

&lt;p&gt;The full view template should now resembles something like this:&lt;/p&gt;

&lt;samp&gt;xml.instruct! :xml, :version=&gt;"2.0"&lt;br /&gt;
xml.rss (:version =&gt; "2.0", &lt;strong&gt;"xmlns:georss" =&gt; "http://www.georss.org/georss"&lt;/strong&gt;) {&lt;br /&gt;
xml.channel {&lt;br /&gt;
xml.title("My GeoRSS feed")&lt;br /&gt;
xml.link("http://www.example.com")&lt;br /&gt;
xml.description("My posts enhanced with location info")&lt;br /&gt;
xml.language('en-us')&lt;br /&gt;
for post in @posts&lt;br /&gt;
xml.item do&lt;br /&gt;
xml.title(post.title)&lt;br /&gt;
xml.description(post.content)&lt;br /&gt;
xml.author("none@none.be (#{post.author})")&lt;br /&gt;
xml.pubDate(post.created_at.strftime("%a, %d %b %Y %H:%M:%S %z"))&lt;br /&gt;
xml.link( post_permalink_url(post.permalink) )&lt;br /&gt;
xml.guid( post_permalink_url(post.permalink) )&lt;br /&gt;
&lt;strong&gt;xml.georss :point do&lt;br /&gt;
xml.text! post.latitude.to_s  + ' ' + post.longitude.to_s&lt;br /&gt;
end&lt;/strong&gt;&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
}&lt;br /&gt;
}&lt;/samp&gt;

&lt;p&gt;That's it. Not too exciting at first but try your RSS feed URL in Google Maps and see how easy it is to pinpoint each location on a map (here is &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=http:%2F%2Fwww.suffix.be%2Ffeeds%2Fblog.xml&amp;amp;safe=on&amp;ie=UTF8" title="My GeoRSS feed in Google Maps" class="ext"&gt;mine&lt;/a&gt;).&lt;/p&gt;</content>
    <created-at type="datetime">2008-05-23T17:00:46+02:00</created-at>
    <id type="integer">25</id>
    <location-id type="integer">3</location-id>
    <permalink>georss-with-ruby-on-rails</permalink>
    <title>GeoRSS with Ruby on Rails</title>
    <updated-at type="datetime">2008-05-23T18:25:04+02:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;h3&gt;The Urban Web&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.stevenberlinjohnson.com/"&gt;Steven Johnson&lt;/a&gt;&lt;/span&gt; opened &lt;a href="http://2008.dconstruct.org/" class="ext" title="dConstruct 2008: Designing the social web"&gt;dConstruct 2008&lt;/a&gt; with the interesting story of Dr. &lt;span class="vcard"&gt;&lt;span class="fn"&gt;John Snow&lt;/span&gt;&lt;/span&gt;. Snow created a map showing the clusters of cholera cases in the &lt;abbr class="geo" title="51.514035;-0.134634"&gt;London&lt;/abbr&gt; epidemic of &lt;abbr title="1854"&gt;1854&lt;/abbr&gt;. By doing so he proved that cholera wasn't spread by smell like people thought but the water from a contaminated pump on Broad Street. Snow showed how data visualization can suddenly reveal useful information that wasn't visible before. Johnson called Snow's map the &amp;lsquo;first mashup&amp;rsquo; which sounded like a nice tribute to what Snow's discovery meant to the world.&lt;/p&gt;

&lt;p&gt;Johnson explained how is trying to map local news from different sources with his &lt;a href="http://outside.in/" title="Tracking news, views, and conversations in towns and neighborhoods"&gt;outside.in&lt;/a&gt; project. While the idea sounds great and the screenshots looked good I'm not really convinced yet. Sure, this may work fine in &lt;abbr class="geo" title="40.728333;-73.994167"&gt;Manhattan&lt;/abbr&gt; or &lt;abbr class="geo" title="37.429167;-122.138056"&gt;Palo Alto&lt;/abbr&gt; but not everyone writes in English. Even when they do you'll still need that &amp;lsquo;critical mass&amp;rsquo; in order to collect something useful. They also did some research to find the &amp;lsquo;blogiest&amp;rsquo; neighborhoods in the &lt;abbr class="geo" title="38.883333;-77.016667"&gt;United States&lt;/abbr&gt;, a great idea which I would like to try in &lt;abbr class="geo" title="50.9;4.533333"&gt;Belgium&lt;/abbr&gt; as well.&lt;/p&gt;

&lt;h3&gt;Playing the Web&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.toastkid.com/"&gt;Aleks Krotoski&lt;/a&gt;&lt;/span&gt; tried to bring the game industry and webdesign world closer together. Aleks has an incredible enthusiasm but for me the topic wasn't that interesting and I felt it missed a story line.&lt;/p&gt;

&lt;h3&gt;Leveraging Cognitive Bias in Social Design&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://bokardo.com/"&gt;Joshua Porter&lt;/a&gt;&lt;/span&gt; went on with social biases and heuristics: how a language can influence decisions or advanced psychology for webdesigners. For example: people tend to be more afraid of loosing something than winning, known as the &amp;lsquo;loss aversion&amp;rsquo; or how people often do and believe things because many other people do, the &amp;lsquo;bandwagon effect&amp;rsquo;. Porter referred to a paper which I'm planning to read at some point: &amp;ldquo;&lt;a href="http://books.google.be/books?id=_0H8gwj4a1MC" class="ext" title="Preview this book in Google Book Search"&gt;Judgement under Uncertainty: Heuristics and Biases&lt;/a&gt;&amp;rdquo;. An interesting topic but it could use some of the enthusiasm Aleks had in her presentation.&lt;/p&gt;

&lt;h3&gt;Designing for Interaction&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.deltatangobravo.com/"&gt;Daniel Burka&lt;/a&gt;&lt;/span&gt;, the creative director at Digg and on of the founders of Pownce, spoke about the &amp;lsquo;cohesive user experience&amp;rsquo; or how Digg tried to allow users to participate on the site without requiring them to follow a lengthy signup process. Nice to have a little insight in the development process behind a huge site like Digg.&lt;/p&gt;

&lt;h3&gt;Social Network Portability&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.tantek.com/"&gt;Tantek &amp;Ccedil;elik&lt;/a&gt;&lt;/span&gt; followed with his &lt;a href="http://microformats.org/" title="The official microformats wiki" class="ext"&gt;microformats&lt;/a&gt; presentation. I expected a great deal from his presentation, maybe a little too much. It was a little too advanced for those who have never heard of microformats before and not advanced enough for the others. Maybe I shouldn't have bought that &lt;a href="http://suffix.be/blog/microformats-book" title="My review for Allsopp's microformats book"&gt;microformats book&lt;/a&gt; on last year's edition. ;)&lt;/p&gt;

&lt;h3&gt;Designing for the Coral Reef&lt;/h3&gt;

&lt;p&gt;Next up: &lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.blackbeltjones.com/"&gt;Matt Jones&lt;/a&gt;&lt;/span&gt; and &lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.hackdiary.com/"&gt;Matt Biddulph&lt;/a&gt;&lt;/span&gt;. My opinion? Splendid! Those two &lt;a href="http://www.dopplr.com/" title="Dopplr, an online tool for frequent business travellers" class="ext"&gt;Dopplr&lt;/a&gt; guys gave the most hectic presentation of the day and I loved it. They talked about how Dopplr could be as little intrusive as possible, a connector between different social networks and passing on the data to the next (web)app. They explained how they preferred to grow slowly, trying to build up trust first as they seem to understand where you are at a given point is sensitive data for most people. My Dopplr &amp;lsquo;friends&amp;rsquo; (a word they specifically refuse to use) tripled in a single day which shows how everyone gave Dopplr a second look after their presentation, nicely done Matt &amp;amp; Matt.&lt;/p&gt;

&lt;h3&gt;The System of the World&lt;/h3&gt;

&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.adactio.com/"&gt;Jeremy Keith&lt;/a&gt;&lt;/span&gt; closed with a science fiction story which I didn't really understand in the beginning. He tried to prove that the success of social webapps are unpredictable, even though we are likely to think we can. It was an unusual presentation that felt confusing at the start but became better and better towards the end. His point on the strength of weak ties was something completely new to me. Another &lt;a href="http://www.si.umich.edu/~rfrost/courses/SI110/readings/In_Out_and_Beyond/Granovetter.pdf" title="The strength of weak ties: a network theory revisited by Mark Granovetter (PDF)" class="ext"&gt;book&lt;/a&gt; to read.&lt;/p&gt;

&lt;h3&gt;More resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;My dConstruct &lt;a href="http://flickr.com/photos/schoeters/sets/72157607274925615/" title="dConstruct photo set on Flickr" class="ext"&gt;Flickr&lt;/a&gt; photos.&lt;/li&gt;
&lt;li&gt;Burka's presentation &amp;ldquo;&lt;a href="http://www.slideshare.net/dburka/designing-for-interaction-presentation/" title="Designing for Interaction on slideshare" class="ext"&gt;Designing for Interaction&lt;/a&gt;&amp;rdquo; on slideshare.&lt;/li&gt;
&lt;li&gt;&amp;Ccedil;elik's presentation &amp;ldquo;&lt;a href="http://tantek.com/presentations/2008/09/social-network-portability/" title="Social Network Portability" class="ext"&gt;Social Network Portability&lt;/a&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Keith's presentation &amp;ldquo;&lt;a href="http://www.slideshare.net/adactio/the-system-of-the-world-presentation/" title="The System of the World on slideshare" class="ext"&gt;The System of the World&lt;/a&gt;&amp;rdquo; on slideshare.&lt;/li&gt;
&lt;/ul&gt;</content>
    <created-at type="datetime">2008-09-12T18:37:57+02:00</created-at>
    <id type="integer">34</id>
    <location-id type="integer">2</location-id>
    <permalink>dconstruct2008</permalink>
    <title>dConstruct 2008 roundup</title>
    <updated-at type="datetime">2008-09-19T11:51:39+02:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;Today &lt;a href="http://labs.mozilla.com/" title="Mozilla Labs" class="ext"&gt;Mozilla Labs&lt;/a&gt; announced &lt;a href="http://labs.mozilla.com/2008/10/introducing-geode/" title="Introducing Geode @ Mozilla Labs" class="ext"&gt;Geode&lt;/a&gt;. Mozilla plans to add it in a future version of Firefox but today it's already available as an add-on. It adds the ability for a website to request your location. You can than optionally choose to send your exact location, neighborhood or city to that site.&lt;/p&gt;

&lt;img src="/images/geode.png" alt="Geode screenshot" /&gt;
	
&lt;p&gt;I have been waiting for this to come out, especially after &lt;span class="vcard"&gt;&lt;span class="fn"&gt;Aza Raskin&lt;/span&gt;&lt;/span&gt;'s &lt;a href="http://www.azarask.in/blog/post/firefox-geolocation-js-library/" title="Geolocation Redux and a JS Library @ Aza's Thoughts" class="ext"&gt;conceptual post&lt;/a&gt;. The interface is intuitive (although I preferred Aza's somewhat more graphical version).&lt;/p&gt;

&lt;p&gt;I tried the plugin on the Geode &lt;a href="http://labs.mozilla.com/geode_welcome/" title="Geode sample page" class="ext"&gt;sample page&lt;/a&gt; and it does what it should do. Well - that's to say - it showed my location exactly as promised, the same way my iPhone does. Geode probably uses the &lt;a href="http://www.skyhookwireless.com/" class="ext"&gt;Skyhook&lt;/a&gt; database (like the iPhone) to determine the location based on the &lt;abbr title="Wireless Fidelity"&gt;Wi-Fi&lt;/abbr&gt; access points it can &amp;lsquo;see&amp;rsquo;. This is a bit of a problem as the Skyhook coverage in Europe is bad and as such not very useful (yet). Skyhook is extending its coverage in Europe and Mozilla is looking for other providers as well so it may get better over time.&lt;/p&gt;
	
&lt;blockquote cite="http://labs.mozilla.com/2008/10/introducing-geode/"&gt;We're still working out the specifics, but we're hoping that location will be provided by one or more user selectable service providers and methods, e.g. GPS-based, WiFi-based, manual entry, etc.&lt;/blockquote&gt;
	
&lt;p&gt;Why would you need this? Mozilla gives the same old example of finding a restaurant near your location by &amp;lsquo;pulling out you laptop&amp;rsquo;. I don't think people &amp;lsquo;pull&amp;lsquo; out their laptops that easily (that's up the the iPhones and BlackBerrys) but I can see the movie theatre showing the schedule for the nearest complex at the top of the list or Google giving a higher score to search results nearby. I suppose we'll even see location aware ads with the promotions of the closest supermarket.&lt;/p&gt;</content>
    <created-at type="datetime">2008-10-08T00:23:59+02:00</created-at>
    <id type="integer">37</id>
    <location-id type="integer">8</location-id>
    <permalink>welcome-geode</permalink>
    <title>Welcome Geode</title>
    <updated-at type="datetime">2008-10-08T00:25:53+02:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;In one of my &lt;a href="/blog/generated-maps" title="Generated maps with Ruby on Rails"&gt;previous posts&lt;/a&gt; I showed how to dynamically generate a map from a set of coordinates in Ruby on Rails (like the map on top of this page). This is nice but still required me to manually update my location each time... not very useable. I have a &lt;a href="http://www.dopplr.com/" title="An online tool for frequent business travellers" class="ext"&gt;Dopplr&lt;/a&gt; account where I enter all my future trips so it feels stupid to enter the same information again on my own website. We can do better than that!&lt;/p&gt;

&lt;p&gt;Here is the idea: a script that checks my travel plans on Dopplr for to following day and creates a new map of that location if needed. Also: a perfect excuse to have a look at the Rake build language which I had never used.&lt;/p&gt;

&lt;h3&gt;Dopplr &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;&lt;/h3&gt;

&lt;p&gt;The &lt;a href="http://dopplr.pbwiki.com/" title="Dopplr Developer Wiki" class="ext"&gt;Dopplr &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;&lt;/a&gt; includes a Ruby client which makes our life easier, download the &amp;lsquo;Improved Ruby Client&amp;rsquo; in your &lt;samp&gt;&amp;lt;yourapp&amp;gt;/lib&lt;/samp&gt; folder so we can use it later on.&lt;/p&gt;

&lt;h3&gt;Tokens and sessions&lt;/h3&gt;

&lt;p&gt;You will need a session key to use the Dopplr &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;, this key replaces your username and password (read &amp;lsquo;&lt;a href="http://adactio.com/journal/1357" class="ext" title="The password anti-pattern @ Adactio"&gt;The password anti-pattern&lt;/a&gt;&amp;rsquo; if you want to know why). Here is how to get one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;samp&gt;https://www.dopplr.com/api/AuthSubRequest?scope=http://www.dopplr.com&amp;amp;next=&lt;strong&gt;&amp;lt;your_url&amp;gt;&lt;/strong&gt;&amp;amp;session=1&lt;/samp&gt;. Replace &lt;samp&gt;&amp;lt;your_url&amp;gt;&lt;/samp&gt; with your website's URL.&lt;/li&gt;
&lt;li&gt;Once approved you will be redirected to your URL with a &lt;samp&gt;token=&amp;lt;token_hash&amp;gt;&lt;/samp&gt; parameter, copy the token value.&lt;/li&gt;
&lt;li&gt;Start your Rails development console to convert the token to a session hash with &lt;samp&gt;./script/console&lt;/samp&gt;.&lt;/li&gt;
&lt;li&gt;Upgrade the token to a session:&lt;br/&gt;
&lt;samp&gt;&amp;gt;&amp;gt; d = Dopplr.new&lt;br/&gt;
&amp;gt;&amp;gt; d.set_token("&lt;strong&gt;&amp;lt;token_hash&amp;gt;&lt;/strong&gt;")&lt;br/&gt;
&amp;gt;&amp;gt; d.upgrade_to_session&lt;/samp&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Copy the result - this is your session key - and keep it somewhere safe.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Rake task&lt;/h3&gt;

&lt;p&gt;I wanted something outside this website that could run automatically, even when the website wasn't opened. Rake offers you a way to do this: you can build and run scripts independently from the rest of the application while using the same environment as the application.&lt;/p&gt;

&lt;p&gt;Here is a simplified version of the task I created. Copy this and save it in your &lt;samp&gt;&amp;lt;yourapp&amp;gt;/lib/tasks&lt;/samp&gt; folder as &lt;samp&gt;map.rake&lt;/samp&gt;.&lt;/p&gt;

&lt;p&gt;&lt;samp&gt;namespace :map do&lt;br /&gt;&lt;br /&gt;
desc "Overwrites the map with my Dopplr location on a given date"&lt;br /&gt;
task :date =&gt; :environment do&lt;br /&gt;
c = define_coordinates(ENV['date'])&lt;br /&gt;
create_map(c['lat'], c['long'], 1200, 100, 0.3, 8)&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;
desc "Updates the map.png with a map of my current Dopplr location"&lt;br /&gt;
task :update =&gt; :environment do&lt;br /&gt;
today = Time.now&lt;br /&gt;
c = define_coordinates(today.strftime("%Y%m%d"))&lt;br /&gt;
create_map(c['lat'], c['long'], 1200, 100, 0.3, 8)&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;
# Extract the coordinates from the Dopplr API&lt;br /&gt;
def define_coordinates(date)&lt;br /&gt;
d = Dopplr.new&lt;br /&gt;
d.set_token(&lt;strong&gt;&amp;lt;session_key&amp;gt;&lt;/strong&gt;)&lt;br /&gt;
loc = d.location_on_date(:date =&gt; date)['location']&lt;br /&gt;
if loc.has_key?('trip')&lt;br /&gt;
{"lat" =&gt; loc['trip']['city']['latitude'], "long" =&gt; loc['trip']['city']['longitude']}&lt;br /&gt;
else&lt;br /&gt;
{"lat" =&gt; loc['home']['latitude'], "long" =&gt; loc['home']['longitude']}&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;
# Create a new OpenStreetMap with the given coordinates&lt;br /&gt;
def create_map(latitude, longitude, width = 500, height = 500, opacity = 1, zoom = 7)&lt;br /&gt;
[...] see the &lt;a href="/blog/generated-maps" title="Generated maps with Ruby on Rails"&gt;other&lt;/a&gt; post [...]&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;
end&lt;/samp&gt;&lt;/p&gt;

&lt;p&gt;Now, check your taks with &lt;samp&gt;rake -T&lt;/samp&gt;. You'll get an overview of all the Rake tasks for your app and there should be a &amp;lsquo;map:date&amp;rsquo; and &amp;lsquo;map:update&amp;rsquo; one. This means you can run these scripts interactively now:&lt;/p&gt;

&lt;dl&gt;
	&lt;dt&gt;&lt;samp&gt;rake map:date date=20080101&lt;/samp&gt;&lt;/dt&gt;
	&lt;dd&gt;Will create/overwrite the map.png file in the /public/image folder with a map of you Dopplr location on January 1&lt;sup&gt;st&lt;/sup&gt;, 2008.&lt;/dd&gt;
	&lt;dt&gt;&lt;samp&gt;rake map:update&lt;/samp&gt;&lt;/dt&gt;
	&lt;dd&gt;Will also create a map but with your current Dopplr location.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Cron&lt;/h3&gt;

&lt;p&gt;Almost done. We can now create a new map whenever we want on any given date. Let's run this script each night at 4 in the morning. Add the following line to your crontab:&lt;/p&gt;

&lt;p&gt;&lt;samp&gt;0 4 * * * cd &lt;strong&gt;&amp;lt;app_path&amp;gt;&lt;/strong&gt; &amp;amp;&amp;amp; /usr/local/bin/rake map:update RAILS_ENV=production&lt;/samp&gt;&lt;/p&gt;

&lt;p&gt;That's it. The script will now look for your current location in your Dopplr account and create a map based on that location.&lt;/p&gt;</content>
    <created-at type="datetime">2008-10-28T18:06:58+01:00</created-at>
    <id type="integer">40</id>
    <location-id type="integer">8</location-id>
    <permalink>dopplr-to-openstreetmap</permalink>
    <title>From Dopplr to OpenStreetMap</title>
    <updated-at type="datetime">2008-10-28T18:13:36+01:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;This weekend &lt;a href="http://barcampgent2.wikispaces.com/" tile="BarCamp Gent wiki" class="ext"&gt;BarCamp Gent&lt;/a&gt; took place. A BarCamp is an unconference organized by the participants (check &lt;a href="http://en.wikipedia.org/wiki/BarCamp" title="BarCamp article @ Wikipedia" class="ext"&gt;Wikipedia&lt;/a&gt; for more). A little more then 100 people showed up and there were 45 presentations, a nice overall score. It always impresses me how you can create a professional event like this, solely based on the goodwill of the participants. If you give up your Saturday for a geeky conference you need to have at least some passion for what you are doing and that's exactly what makes BarCamps great: people speaking about what they are passionate about.&lt;/p&gt;

&lt;h3&gt;OpenStreetMap&lt;/h3&gt;
&lt;p&gt;I forced myself to present as well this time. Being a sidekick during the previous 2 BarCamps I decided is was about time to present something. I tried to give a short overview of &lt;a href="http://www.slideshare.net/s1emon/open-street-map-presentation" rel="me" class="ext" title="My OpenStreetMap presentation of BarCamp Gent on Slideshare"&gt;OpenStreetMap&lt;/a&gt;. What it is, why we need it and how to contribute.&lt;/p&gt;

&lt;h3&gt;Craftsmanship&lt;/h3&gt;
&lt;p&gt;I liked &lt;span class="vcard"&gt;&lt;span class="fn"&gt;Bernard Grymonpon&lt;/span&gt;&lt;/span&gt;'s presentation about &lt;a href="http://www.slideshare.net/wonko/craftmanship-presentation" title="Craftsmanship presentation on Slideshare"&gt;Craftsmanship&lt;/a&gt; (in Dutch). He stated that talent in the &lt;abbr title="Information Technology"&gt;IT&lt;/abbr&gt; sector is undervalued. How can we explain to the client that there is a difference between someone who &amp;lsquo;makes websites&amp;rsquo; and a professional webdeveloper? The discussion was just starting when the 20 minutes passed which is a pity, could have taken a little longer. It was nice to hear lots of people struggle with this idea.&lt;/p&gt;

&lt;h3&gt;Photography&lt;/h3&gt;
&lt;p&gt;&lt;span class="vcard"&gt;&lt;a href="http://www.pitslamp.be" class="url fn ext" title="PitsLamp photography (in Dutch)"&gt;Filip Bunkens&lt;/a&gt;&lt;/span&gt; (in Dutch) gave a double session starting with the theoretical strobist part (taking photos with off camera flashes) and a hands-on follow up. By the end of the day we had a chance to play with the professional lighting setup. Others were queuing to get their new Facebook profile pictures taken. ;) Nice to have a separate photo track at BarCamp. I missed &lt;span class="vcard"&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Stijn&lt;/span&gt; &lt;span class="family-name"&gt;De Meyere&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;'s presentation about &lt;a class="fn n url ext" href="http://sken.be/blog/2008/11/30/over-concertfotografie" title="Concertfotografie presentation on Slideshare (in Dutch)"&gt;concert photography&lt;/a&gt; (in Dutch) and need to start following this guy, his photos look awesome. Let's hope for some more photography related sessions next time.&lt;/p&gt;

&lt;h3&gt;Self-help group for geeks&lt;/h3&gt;
&lt;p&gt;&lt;span class="vcard"&gt;&lt;span class="fn"&gt;Dorien Aerts&lt;/span&gt;&lt;/span&gt; presented her &lt;a href="http://theicecreamdebate.wordpress.com/2008/12/01/how-to-get-your-girl-to-be-more-of-a-geek/" title="How to get your girl to be more of a geek @ theicecreamdebate" class="ext"&gt;10 tips&lt;/a&gt; to turn your girl- or boyfriend into a geek, hilarious. It felt like a self-help group for geeks, and I mean that in the positive way. Dorien's poll showed most people joined Facebook because of their friends and because they felt they were &amp;lsquo;missing something&amp;rsquo; by not joining (their friends holiday pictures for example). Someone explained how he got his wife to use Twitter and got a big applaud from the group.&lt;/p&gt;

&lt;h3&gt;Burning 4 million&lt;/h3&gt;
&lt;p&gt;I heard &lt;span class="vcard"&gt;&lt;span class="fn"&gt;Toon Vanagt&lt;/span&gt; earlier at the &lt;a href="/blog/techcrunch-belgium-meetup" title="My review of the Belgian TechCrunch meetup earlier this year"&gt;TechCrunch meetup&lt;/a&gt;. Apart from his helmet his presentation didn't really interest me that much. Well, this time it did. Rarely have I heard such an honest talk about lessons in life. Toon started &lt;span class="org"&gt;Casius&lt;/span&gt;&lt;/span&gt; and explained what went wrong and how he learned from this in his presentation with a catchy title: &amp;ldquo;What I learned after burning &amp;euro;4,000,000&amp;rdquo;.&lt;/p&gt;

&lt;h3&gt;Dutch or English?&lt;/h3&gt;
&lt;p&gt;This BarCamp was in Dutch, previous Belgian BarCamps have always been a mixture of languages with presentations being mainly in English (as far as I know). Some people said that being able to present in you mother tongue raised the level resulting in better quality presentations. This is very well possible but for me it feels too &amp;ldquo;restricted&amp;rdquo;. It may lower the barrier for native Dutch speakers but raises it for the rest. In my opinion BarCamps are about openness: sharing knowledge and experiences, bringing innovative people together, without language restrictions.&lt;/p&gt;
&lt;p&gt;Just for the record: everyone could present in English if they wanted off course, only no one did (myself included). Everyone spoke Dutch so the presentations were in Dutch. Next time a non-Dutch speaker may not be interested because &amp;ldquo;it's in Dutch&amp;rdquo; confirming the idea of the people who do participate that there is no need to present in English.&lt;/p&gt;

&lt;h3&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;A list with the &lt;a href="http://www.slideshare.net/event/barcampghent2008" title="BarCamp Gent 2 group on Slideshare" class="ext"&gt;presentations&lt;/a&gt; on Slideshare.&lt;/li&gt;
	&lt;li&gt;The Flickr group with loads of &lt;a href="http://flickr.com/groups/barcampgent2/" title="BarCamp Gent 2 group on Flickr" class="ext"&gt;photos&lt;/a&gt; from the event.&lt;/li&gt;
	&lt;li&gt;I have a feeling the &lt;a href="http://www.vimeo.com/2385348" title="BarCamp Gent stopmotion movie on Vimeo" class="ext"&gt;stop motion&lt;/a&gt; movie of the day will be a new BarCamp tradition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Big thanks to &lt;span class="vcard"&gt;&lt;a class="url fn ext" href="http://www.wolfslittlestore.be/" title="Wolf's Little Store"&gt;Johan Ronse&lt;/a&gt;&lt;/span&gt; for initiating the event, the &lt;a href="http://www.ibbt.be" class="ext"&gt;&lt;abbr title="Instituut voor Breedbandtechnologie"&gt;IBBT&lt;/abbr&gt;&lt;/a&gt; for the location, &lt;a href="http://www.one-agency.be" class="ext"&gt;One Agency&lt;/a&gt; for sponsoring the event and &lt;a href="http://www.netlash.com" class="ext"&gt;Netlash&lt;/a&gt; (in Dutch) for the pizza! I met some interesting people, heard some good presentations and went home with a new project idea. Exactly what I expect from a BarCamp I would say.&lt;/p&gt;
</content>
    <created-at type="datetime">2008-12-01T18:14:47+01:00</created-at>
    <id type="integer">46</id>
    <location-id type="integer">9</location-id>
    <permalink>barcamp-gent-2</permalink>
    <title>BarCamp Gent</title>
    <updated-at type="datetime">2008-12-01T19:37:59+01:00</updated-at>
  </post>
  <post>
    <author>Simon Schoeters</author>
    <content>&lt;p&gt;Second BarCamp in Antwerp in two months, called ZooCamp this time: a BarCamp in the Antwerp Zoo (as you could probably tell). It has to be the most beautiful location for a BarCamp I've ever been to. There were around 50 or 60 people this time so it was a rather small event which was nice as I had a chance to talk to people I had never met.&lt;/p&gt;

&lt;h3&gt;Geomajas&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.geomajas.org" class="ext"&gt;Geomajas&lt;/a&gt; is a open source, web based &lt;abbr title="Geographic Information System"&gt;GIS&lt;/abbr&gt; framework I had never heard of. Look at it as something you can use on top of a map (like OpenStreetMap) to present georeferenced data. For me it looks just like OpenStreetMap but with a way to use your own database which may be useful for companies (e.g. public utilities). This company can now share their data if they want or import third party databases. The idea looks promising but to me the installation procedure and user interface is a bit to cumbersome to get started with.&lt;/p&gt;

&lt;h3&gt;What I learned from organizing a conference&lt;/h3&gt;

&lt;p&gt;I gave a small presentation on the things I learned from organizing &lt;a href="http://www.twiist.be" title="An affordable one-day conference in Leuven, Belgium" class="ext"&gt;twiist.be&lt;/a&gt;, the conference we organized last week. The presentation sums up 18 points I have to keep in mind if we do it the next time and hopefully some of the ZooCamp attendees had a little help with these tips. You can find my presentation on &lt;a href="http://www.slideshare.net/s1emon/what-i-learned-from-organizing-a-conference" class="ext" title="What I learned from organizing a conference (slides)"&gt;SlideShare&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;How to tame an RFID rabbit&lt;/h3&gt;

&lt;p&gt;&lt;span id="gil" class="vcard"&gt;&lt;span class="fn"&gt;Gil Plaquet&lt;/span&gt;&lt;/span&gt; demoed his Violet mir:ror, an &lt;abbr title="Radio-Frequency IDentification"&gt;RFID&lt;/abbr&gt; reader I was planning to buy. It's a fun little device to play with, nothing more, nothing less. Gil showed the perfect use case for this thing: when one of the children comes home he puts the little rabbit (an RFID tag) on the mir:ror which sends an e-mail to his mom. For me it's not geeky enough and the tags are way too expensive.  One day I'll make my own RFID reader which I can hack together as someone in the audience convinced me.&lt;/p&gt;

&lt;h3&gt;ZooCamp&lt;/h3&gt;

&lt;p&gt;The zoo is a great place for an event and the sunny weather made it even better. Big thanks to &lt;span id="filip" class="vcard"&gt;&lt;a class="url fn ext" href="http://www.borloo.org/" title="Personal website of Filip Borloo"&gt;Filip Borloo&lt;/a&gt;&lt;/span&gt; for pulling this off!&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;You can find some more ZooCamp presentations on &lt;a href="http://www.slideshare.net/search/slideshow?q=zoocamp" class="ext"&gt;SlideShare&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
    <created-at type="datetime">2009-05-26T16:27:52+02:00</created-at>
    <id type="integer">55</id>
    <location-id type="integer">15</location-id>
    <permalink>zoocamp-antwerp</permalink>
    <title>ZooCamp Antwerp</title>
    <updated-at type="datetime">2009-06-04T17:47:43+02:00</updated-at>
  </post>
</posts>
