<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: brighton</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/brighton.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2012-06-24T14:02:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>Where is the best place to go for dinner in Brighton?</title><link href="https://simonwillison.net/2012/Jun/24/where-is-the-best/#atom-tag" rel="alternate"/><published>2012-06-24T14:02:00+00:00</published><updated>2012-06-24T14:02:00+00:00</updated><id>https://simonwillison.net/2012/Jun/24/where-is-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Where-is-the-best-place-to-go-for-dinner-in-Brighton/answer/Simon-Willison"&gt;Where is the best place to go for dinner in Brighton?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Terre a Terre is excellent - it's vegetarian but don't let that put you off, it just means they go the extra mile to impress. A tad pricey but great for a special occasion.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="brighton"/><category term="quora"/></entry><entry><title>What should I do with a week in Brighton, UK?</title><link href="https://simonwillison.net/2012/Jun/24/what-should-i-do/#atom-tag" rel="alternate"/><published>2012-06-24T11:34:00+00:00</published><updated>2012-06-24T11:34:00+00:00</updated><id>https://simonwillison.net/2012/Jun/24/what-should-i-do/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-should-I-do-with-a-week-in-Brighton-UK/answer/Simon-Willison"&gt;What should I do with a week in Brighton, UK?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Make sure you go inside the Pavilion - it's marvellous. The outside imitates an Indian temple, but the inside (for some reason) is entirely inspired by China. Both aspects were constructed by British workmen who had never been to either, so it's a fabulous over-the-top representation of 18th century stereotypes of those countries.&lt;/p&gt;

&lt;p&gt;It's also full of dragons, including an 8ft high one holding up a chandelier.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uk"&gt;uk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/europe"&gt;europe&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="brighton"/><category term="uk"/><category term="quora"/><category term="europe"/></entry><entry><title>Getting married and going travelling</title><link href="https://simonwillison.net/2010/Jun/21/married/#atom-tag" rel="alternate"/><published>2010-06-21T23:01:00+00:00</published><updated>2010-06-21T23:01:00+00:00</updated><id>https://simonwillison.net/2010/Jun/21/married/#atom-tag</id><summary type="html">
    &lt;p&gt;It’s been a busy month. On Saturday the 5th of June I married the wonderful &lt;a href="http://natbat.net/"&gt;Natalie Downe&lt;/a&gt; in a beautiful ceremony at Roedean School in Brighton. The reception had &lt;a href="http://www.flickr.com/search/groups/?q=owl&amp;amp;m=pool&amp;amp;w=1445512%40N23&amp;amp;s=int"&gt;owls&lt;/a&gt;, &lt;a href="http://www.flickr.com/search/groups/?q=cheese&amp;amp;m=pool&amp;amp;w=1445512%40N23&amp;amp;s=int"&gt;cheese&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/tags/pugwashtheferret/"&gt;a ferret&lt;/a&gt;, &lt;a href="http://www.flickr.com/search/groups/?q=eagle&amp;amp;m=pool&amp;amp;w=1445512%40N23&amp;amp;s=int"&gt;a golden eagle&lt;/a&gt;, amazing Turkish food, &lt;a href="http://www.flickr.com/photos/ianlloyd/4676083928/"&gt;Jewish chair dancing&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/drewm/4675203480/" title="The big group photo"&gt;lovely guests&lt;/a&gt;. It was the happiest day of my life.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/sebleedelisle/4673804871/"&gt;&lt;img alt="Natalie, Me and a Golden Eagle" height="281" src="http://simonwillison.net/static/2010/me-nat-eagle.jpg" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.flickr.com/photos/drewm/collections/72157624091523559/" title="Collection: Natalie &amp;amp; Simon's Wedding"&gt;official wedding photos&lt;/a&gt; were taken by &lt;a href="http://allinthehead.com/"&gt;Drew McLellan&lt;/a&gt;, and there’s &lt;a href="http://www.flickr.com/groups/natalie-simon-wedding/pool/"&gt;a Flickr group pool&lt;/a&gt; as well. The day after the wedding Natalie’s sister Louise took &lt;a href="http://www.flickr.com/photos/simon/sets/72157624107650141/"&gt;some fun photos&lt;/a&gt; of us running around Brighton in our wedding clothes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/simon/4682807900/"&gt;&lt;img alt="Bride and Groom on the Carousel" height="300" src="http://simonwillison.net/static/2010/me-nat-carousel.jpg" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to everyone who helped out with the preparations, and also to everyone who came along to share the special day with us. And a big thanks to Tom Coates, my best man.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/drewm/4674731543/"&gt;&lt;img alt="Best man and Groom" height="300" src="http://simonwillison.net/static/2010/bestman.jpg" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yesterday afternoon, we set out on our honeymoon. I’m writing this from the beach in Nice, on the south coast of France. Tomorrow we take the ferry to Corsica for a week in relative luxury. After that, we’re backpacking around Europe, then Africa, then the rest of the world. We’ve given up our flat and put our stuff in to storage, and the plan is to keep on travelling until we get fed up or run out of money. We expect to be gone for at least 18 months.&lt;/p&gt;
&lt;p&gt;Since we’re both web developers, we’re lucky to be able to take some of our work with us. I’ll still be doing some work for the Guardian and Natalie is available for freelance work. If you have something you think we can help you with, &lt;a href="mailto:contact@natimon.com"&gt;drop us a line&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Naturally we’ll be blogging, tweeting and &lt;a href="http://www.flickr.com/groups/sparkabout/pool/"&gt;Flickring&lt;/a&gt; our adventures. You can follow our updates at &lt;a href="http://sparkabout.net/"&gt;http://sparkabout.net/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/drewm/4675496221/"&gt;&lt;img alt="Photobomb!" height="545" src="http://simonwillison.net/static/2010/photobomb.jpg" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cheese"&gt;cheese&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/natalie-downe"&gt;natalie-downe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tom-coates"&gt;tom-coates&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/travel"&gt;travel&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/natbat"&gt;natbat&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sparkabout"&gt;sparkabout&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wedding"&gt;wedding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/personal-news"&gt;personal-news&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="brighton"/><category term="cheese"/><category term="natalie-downe"/><category term="tom-coates"/><category term="travel"/><category term="recovered"/><category term="natbat"/><category term="sparkabout"/><category term="wedding"/><category term="personal-news"/></entry><entry><title>Showstopper! The Improvised Musical</title><link href="https://simonwillison.net/2009/Dec/31/showstopper/#atom-tag" rel="alternate"/><published>2009-12-31T09:36:37+00:00</published><updated>2009-12-31T09:36:37+00:00</updated><id>https://simonwillison.net/2009/Dec/31/showstopper/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.showstopperthemusical.com/"&gt;Showstopper! The Improvised Musical&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Went to see this last night with some friends—they really do improvise an entire musical (a surprisingly good one, with catchy new songs and three part harmonies) based entirely on user suggestions. They have shows coming up in Brighton and Bath, thoroughly recommended.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bath"&gt;bath&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/events"&gt;events&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/musicals"&gt;musicals&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recommendations"&gt;recommendations&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/theatre"&gt;theatre&lt;/a&gt;&lt;/p&gt;



</summary><category term="bath"/><category term="brighton"/><category term="events"/><category term="musicals"/><category term="recommendations"/><category term="theatre"/></entry><entry><title>Automating web site deployment at Barcamp Brighton</title><link href="https://simonwillison.net/2009/Sep/6/automating/#atom-tag" rel="alternate"/><published>2009-09-06T14:16:30+00:00</published><updated>2009-09-06T14:16:30+00:00</updated><id>https://simonwillison.net/2009/Sep/6/automating/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://morethanseven.net/2009/09/06/automating-web-site-deployment-barcamp-brighton/"&gt;Automating web site deployment at Barcamp Brighton&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’m determined to start using Fabric and proper deployment scripts for my personal projects.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/barcamp"&gt;barcamp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/barcampbrighton"&gt;barcampbrighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fabric"&gt;fabric&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gareth-rushgrove"&gt;gareth-rushgrove&lt;/a&gt;&lt;/p&gt;



</summary><category term="barcamp"/><category term="barcampbrighton"/><category term="brighton"/><category term="deployment"/><category term="fabric"/><category term="gareth-rushgrove"/></entry><entry><title>Skillswap goes Portable</title><link href="https://simonwillison.net/2008/Nov/21/skillswap/#atom-tag" rel="alternate"/><published>2008-11-21T10:25:56+00:00</published><updated>2008-11-21T10:25:56+00:00</updated><id>https://simonwillison.net/2008/Nov/21/skillswap/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://icanhaz.com/skillswapgoesportable"&gt;Skillswap goes Portable&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Skillswap Brighton will be addressing OAuth and Data Portability on Wednesday. I’m annoyed to be missing it.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/data-portability"&gt;data-portability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/events"&gt;events&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/oauth"&gt;oauth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/skillswap"&gt;skillswap&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="data-portability"/><category term="events"/><category term="oauth"/><category term="skillswap"/></entry><entry><title>The Tea Cosy</title><link href="https://simonwillison.net/2008/Nov/8/tea/#atom-tag" rel="alternate"/><published>2008-11-08T17:14:27+00:00</published><updated>2008-11-08T17:14:27+00:00</updated><id>https://simonwillison.net/2008/Nov/8/tea/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.theteacosy.co.uk/"&gt;The Tea Cosy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Our favourite Brighton tea room has redesigned their site—truly classy. Don’t forget to memorise the etiquette rules.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/etiquette"&gt;etiquette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tea"&gt;tea&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tearoom"&gt;tearoom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/the-tea-cosy"&gt;the-tea-cosy&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="etiquette"/><category term="tea"/><category term="tearoom"/><category term="the-tea-cosy"/></entry><entry><title>Zeppelin 101 in 5 mins</title><link href="https://simonwillison.net/2008/Oct/30/zeppelin/#atom-tag" rel="alternate"/><published>2008-10-30T17:05:16+00:00</published><updated>2008-10-30T17:05:16+00:00</updated><id>https://simonwillison.net/2008/Oct/30/zeppelin/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://simonwillison.net/2008/talks/onspeed-zeppelins/"&gt;Zeppelin 101 in 5 mins&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ribot videoed my five minute lightning talk on Zeppelins at last night’s Skillswap Brighton.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://skillswap-brighton.org/2008/10/29/skillswap-on-speed/"&gt;SkillSwap Brighton&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lightning-talks"&gt;lightning-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ribot"&gt;ribot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/skillswap"&gt;skillswap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/video"&gt;video&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vimeo"&gt;vimeo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zeppelins"&gt;zeppelins&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="lightning-talks"/><category term="ribot"/><category term="skillswap"/><category term="speaking"/><category term="my-talks"/><category term="video"/><category term="vimeo"/><category term="zeppelins"/></entry><entry><title>SecondLife rolls out Mono-powered servers</title><link href="https://simonwillison.net/2008/Aug/21/secondlife/#atom-tag" rel="alternate"/><published>2008-08-21T09:45:13+00:00</published><updated>2008-08-21T09:45:13+00:00</updated><id>https://simonwillison.net/2008/Aug/21/secondlife/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://tirania.org/blog/archive/2008/Aug-20-2.html"&gt;SecondLife rolls out Mono-powered servers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Most of the work on this was done in Linden Lab’s Brighton UK office. If you’re interested in Mono and want to live in Brighton, they’re hiring!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jimpurbrick"&gt;jimpurbrick&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lindenlab"&gt;lindenlab&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/miguel-de-icaza"&gt;miguel-de-icaza&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mono"&gt;mono&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/secondlife"&gt;secondlife&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="jimpurbrick"/><category term="lindenlab"/><category term="miguel-de-icaza"/><category term="mono"/><category term="secondlife"/></entry><entry><title>Saturday Mornings: Going Live!</title><link href="https://simonwillison.net/2008/Jun/12/saturday/#atom-tag" rel="alternate"/><published>2008-06-12T00:14:27+00:00</published><updated>2008-06-12T00:14:27+00:00</updated><id>https://simonwillison.net/2008/Jun/12/saturday/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.saturdaymornings.co.uk/goinglive/"&gt;Saturday Mornings: Going Live!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Some 1980s/1990s British nostalgia. I pinched a video of the theme tune from here for my talk on Comet at Brighton SkillSwap.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/goinglive"&gt;goinglive&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nostalgia"&gt;nostalgia&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="comet"/><category term="goinglive"/><category term="nostalgia"/></entry><entry><title>Timber hazard after ship wrecked</title><link href="https://simonwillison.net/2008/Jan/20/timber/#atom-tag" rel="alternate"/><published>2008-01-20T18:08:56+00:00</published><updated>2008-01-20T18:08:56+00:00</updated><id>https://simonwillison.net/2008/Jan/20/timber/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://news.bbc.co.uk/1/hi/england/7191061.stm"&gt;Timber hazard after ship wrecked&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A ship went down off the Dorset coast, but its cargo of timber has been washing up all the way along Brighton beach.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shipwreck"&gt;shipwreck&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/timber"&gt;timber&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="shipwreck"/><category term="timber"/></entry><entry><title>Unobtrusively Mapping Microformats with jQuery</title><link href="https://simonwillison.net/2007/Dec/12/unobtrusively-mapping-microformats-jquery/#atom-tag" rel="alternate"/><published>2007-12-12T04:05:45+00:00</published><updated>2007-12-12T04:05:45+00:00</updated><id>https://simonwillison.net/2007/Dec/12/unobtrusively-mapping-microformats-jquery/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;a href="http://microformats.org/"&gt;Microformats&lt;/a&gt; are everywhere. You can&amp;#8217;t shake an electronic stick these days without accidentally poking a microformat-enabled site, and many developers use microformats as a matter of course. And why not? After all, why invent your own class names when you can re-use pre-defined ones that give your site extra functionality for free?&lt;/p&gt;

&lt;p&gt;Nevertheless, while it&amp;#8217;s good to know that users of tools such as &lt;a href="http://blog.codeeg.com/tails-firefox-extension-03/"&gt;Tails&lt;/a&gt; and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4106"&gt;Operator&lt;/a&gt; will derive added value from your shiny semantics, it&amp;#8217;s nice to be able to reuse that effort in your own code.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re going to build a map of some of my favourite restaurants in Brighton. Fitting with the principles of &lt;a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript"&gt;unobtrusive JavaScript&lt;/a&gt;, we&amp;#8217;ll start with a semantically marked up list of restaurants, then use JavaScript to add the map, look up the restaurant locations and plot them as markers.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll be using a couple of powerful tools. The first is &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, a JavaScript library that is ideally suited for unobtrusive scripting. jQuery allows us to manipulate elements on the page based on their &lt;span class="caps"&gt;CSS&lt;/span&gt; selector, which makes it easy to extract information from microformats.&lt;/p&gt;

&lt;p&gt;The second is &lt;a href="http://mapstraction.com/"&gt;Mapstraction&lt;/a&gt;, introduced here by Andrew Turner &lt;a href="https://24ways.org/2007/get-to-grips-with-slippy-maps"&gt;a few days ago&lt;/a&gt;. We&amp;#8217;ll be using &lt;a href="http://code.google.com/apis/maps/" title="The Google Maps API"&gt;Google Maps&lt;/a&gt; in the background, but Mapstraction makes it easy to change to a different provider if we want to later.&lt;/p&gt;

&lt;h3&gt;Getting Started&lt;/h3&gt;

&lt;p&gt;We&amp;#8217;ll start off with a simple collection of microformatted restaurant details, representing my seven favourite restaurants in Brighton. The full, unstyled list can be seen in &lt;a href="https://24ways.org/examples/unobtrusively-mapping-microformats-with-jquery/restaurants-plain.html"&gt;restaurants-plain.html&lt;/a&gt;. Each restaurant listing looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li class=&amp;quot;vcard&amp;quot;&amp;gt;
	&amp;lt;h3&amp;gt;&amp;lt;a class=&amp;quot;fn org url&amp;quot; href=&amp;quot;http://www.riddleandfinns.co.uk/&amp;quot;&amp;gt;Riddle &amp;amp; Finns&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
	&amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;
		&amp;lt;p class=&amp;quot;street-address&amp;quot;&amp;gt;12b Meeting House Lane&amp;lt;/p&amp;gt;
		&amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;Brighton&amp;lt;/span&amp;gt;, &amp;lt;abbr class=&amp;quot;country-name&amp;quot; title=&amp;quot;United Kingdom&amp;quot;&amp;gt;UK&amp;lt;/abbr&amp;gt;&amp;lt;/p&amp;gt;
		&amp;lt;p class=&amp;quot;postal-code&amp;quot;&amp;gt;BN1 1HB&amp;lt;/p&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;p&amp;gt;Telephone: &amp;lt;span class=&amp;quot;tel&amp;quot;&amp;gt;+44 (0)1273 323 008&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
	&amp;lt;p&amp;gt;E-mail: &amp;lt;a href=&amp;quot;mailto:info@riddleandfinns.co.uk&amp;quot; class=&amp;quot;email&amp;quot;&amp;gt;info@riddleandfinns.co.uk&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Since we&amp;#8217;re dealing with a list of restaurants, each hCard is marked up inside a list item. Each restaurant is an organisation; we signify this by placing the classes &lt;code&gt;fn&lt;/code&gt; and &lt;code&gt;org&lt;/code&gt; on the element surrounding the restaurant&amp;#8217;s name (according to the hCard spec, setting both &lt;code&gt;fn&lt;/code&gt; and &lt;code&gt;org&lt;/code&gt; to the same value signifies that the hCard represents an organisation rather than a person).&lt;/p&gt;

&lt;p&gt;The address information itself is contained within a &lt;code&gt;div&lt;/code&gt; of class &lt;code&gt;adr&lt;/code&gt;. Note that the &lt;span class="caps"&gt;HTML&lt;/span&gt; &lt;code&gt;&amp;lt;address&amp;gt;&lt;/code&gt; element is not suitable here for two reasons: firstly, it is intended to mark up contact details for the current document rather than generic addresses; secondly, address is an inline element and as such cannot contain the paragraphs elements used here for the address information.&lt;/p&gt;

&lt;p&gt;A nice thing about microformats is that they provide us with automatic hooks for our styling. For the moment we&amp;#8217;ll just tidy up the whitespace a bit; for more advanced style tips consult &lt;a href="https://24ways.org/2006/styling-hcards-with-css" title="Styling hCards with CSS"&gt;John Allsop&amp;#8217;s guide&lt;/a&gt; from 24 ways 2006.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.vcard p {
	margin: 0;
}
.adr {
	margin-bottom: 0.5em;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To plot the restaurants on a map we&amp;#8217;ll need latitude and longitude for each one. We can find this out from their address using &lt;em&gt;geocoding&lt;/em&gt;. Most mapping &lt;span class="caps"&gt;API&lt;/span&gt;s include support for geocoding, which means we can pass the &lt;span class="caps"&gt;API&lt;/span&gt; an address and get back a latitude/longitude point. Mapstraction provides an abstraction layer around these &lt;span class="caps"&gt;API&lt;/span&gt;s which can be included using the following script tag:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://mapstraction.com/src/mapstraction-geocode.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;While we&amp;#8217;re at it, let&amp;#8217;s pull in the other external scripts we&amp;#8217;ll be using:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery-1.2.1.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=YOUR_KEY&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://mapstraction.com/src/mapstraction.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://mapstraction.com/src/mapstraction-geocode.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s everything set up: let&amp;#8217;s write some JavaScript!&lt;/p&gt;

&lt;p&gt;In jQuery, almost every operation starts with a call to the jQuery function. The function simulates &lt;a href="http://en.wikipedia.org/wiki/Method_overloading"&gt;method overloading&lt;/a&gt; to behave in different ways depending on the arguments passed to it. When writing unobtrusive JavaScript it&amp;#8217;s important to set up code to execute when the page has loaded to the point that the &lt;span class="caps"&gt;DOM&lt;/span&gt; is available to be manipulated. To do this with jQuery, pass a callback function to the jQuery function itself:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(function() {
	// This code will be executed when the DOM is ready
});&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Initialising the map&lt;/h3&gt;

&lt;p&gt;The first thing we need to do is initialise our map. Mapstraction needs a div with an explicit width, height and ID to show it where to put the map. Our document doesn&amp;#8217;t currently include this markup, but we can insert it with a single line of jQuery code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(function() {
	// First create a div to host the map
	var themap = jQuery(&amp;#039;&amp;lt;div id=&amp;quot;themap&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).css({
		&amp;#039;width&amp;#039;: &amp;#039;90%&amp;#039;,
		&amp;#039;height&amp;#039;: &amp;#039;400px&amp;#039;
	}).insertBefore(&amp;#039;ul.restaurants&amp;#039;);
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;While this is technically just a single line of JavaScript (with line-breaks added for readability) it&amp;#8217;s actually doing quite a lot of work. Let&amp;#8217;s break it down in to steps:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var themap = jQuery(&amp;#039;&amp;lt;div id=&amp;quot;themap&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here&amp;#8217;s jQuery&amp;#8217;s method overloading in action: if you pass it a string that starts with a &lt;code&gt;&amp;lt;&lt;/code&gt; it assumes that you wish to create a new &lt;span class="caps"&gt;HTML&lt;/span&gt; element. This provides us with a handy shortcut for the more verbose &lt;span class="caps"&gt;DOM&lt;/span&gt; equivalent:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var themap = document.createElement(&amp;#039;div&amp;#039;);
themap.id = &amp;#039;themap&amp;#039;;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next we want to apply some &lt;span class="caps"&gt;CSS&lt;/span&gt; rules to the element. jQuery supports chaining, which means we can continue to call methods on the object returned by jQuery or any of its methods:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var themap = jQuery(&amp;#039;&amp;lt;div id=&amp;quot;themap&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).css({
	&amp;#039;width&amp;#039;: &amp;#039;90%&amp;#039;,
	&amp;#039;height&amp;#039;: &amp;#039;400px&amp;#039;
})&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Finally, we need to insert our new &lt;span class="caps"&gt;HTML&lt;/span&gt; element in to the page. jQuery provides a number of methods for element insertion, but in this case we want to position it directly before the &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; we are using to contain our restaurants. jQuery&amp;#8217;s &lt;code&gt;insertBefore()&lt;/code&gt; method takes a &lt;span class="caps"&gt;CSS&lt;/span&gt; selector indicating an element already on the page and places the current jQuery selection directly before that element in the &lt;span class="caps"&gt;DOM&lt;/span&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var themap = jQuery(&amp;#039;&amp;lt;div id=&amp;quot;themap&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).css({
	&amp;#039;width&amp;#039;: &amp;#039;90%&amp;#039;,
	&amp;#039;height&amp;#039;: &amp;#039;400px&amp;#039;
}).insertBefore(&amp;#039;ul.restaurants&amp;#039;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Finally, we need to initialise the map itself using Mapstraction. The Mapstraction constructor takes two arguments: the first is the ID of the element used to position the map; the second is the mapping provider to use (in this case &lt;code&gt;google&lt;/code&gt; ):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Initialise the map
var mapstraction = new Mapstraction(&amp;#039;themap&amp;#039;,&amp;#039;google&amp;#039;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We want the map to appear centred on Brighton, so we&amp;#8217;ll need to know the correct co-ordinates. We can use &lt;a href="http://www.getlatlon.com/"&gt;www.getlatlon.com&lt;/a&gt; to find both the co-ordinates and the initial map zoom level.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Show map centred on Brighton
mapstraction.setCenterAndZoom(
	new LatLonPoint(50.82423734980143, -0.14007568359375),
	15 // Zoom level appropriate for Brighton city centre
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We also want controls on the map to allow the user to zoom in and out and toggle between map and satellite view.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mapstraction.addControls({
	zoom: &amp;#039;large&amp;#039;,
	map_type: true
});&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Adding the markers&lt;/h3&gt;

&lt;p&gt;It&amp;#8217;s finally time to parse some microformats. Since we&amp;#8217;re using hCard, the information we want is wrapped in elements with the class &lt;code&gt;vcard&lt;/code&gt;. We can use jQuery&amp;#8217;s &lt;span class="caps"&gt;CSS&lt;/span&gt; selector support to find them:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var vcards = jQuery(&amp;#039;.vcard&amp;#039;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now that we&amp;#8217;ve found them, we need to create a marker for each one in turn. Rather than using a regular JavaScript for loop, we can instead use jQuery&amp;#8217;s &lt;code&gt;each()&lt;/code&gt; method to execute a function against each of the hCards.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(&amp;#039;.vcard&amp;#039;).each(function() {
	// Do something with the hCard
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Within the callback function, &lt;code&gt;this&lt;/code&gt; is set to the current &lt;span class="caps"&gt;DOM&lt;/span&gt; element (in our case, the list item). If we want to call the magic jQuery methods on it we&amp;#8217;ll need to wrap it in another call to jQuery:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(&amp;#039;.vcard&amp;#039;).each(function() {
	var hcard = jQuery(this);
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The Google maps geocoder seems to work best if you pass it the street address and a postcode. We can extract these using &lt;span class="caps"&gt;CSS&lt;/span&gt; selectors: this time, we&amp;#8217;ll use jQuery&amp;#8217;s &lt;code&gt;find()&lt;/code&gt; method which searches within the current jQuery selection:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var streetaddress = hcard.find(&amp;#039;.street-address&amp;#039;).text();
var postcode = hcard.find(&amp;#039;.postal-code&amp;#039;).text();&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;text()&lt;/code&gt; method extracts the text contents of the selected node, minus any &lt;span class="caps"&gt;HTML&lt;/span&gt; markup.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ve got the address; now we need to geocode it. Mapstraction&amp;#8217;s geocoding &lt;span class="caps"&gt;API&lt;/span&gt; requires us to first construct a &lt;code&gt;MapstractionGeocoder&lt;/code&gt;, then use the &lt;code&gt;geocode()&lt;/code&gt; method to pass it an address. Here&amp;#8217;s the code outline:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var geocoder = new MapstractionGeocoder(onComplete, &amp;#039;google&amp;#039;);
geocoder.geocode({&amp;#039;address&amp;#039;: &amp;#039;the address goes here&amp;#039;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;onComplete&lt;/code&gt; function is executed when the geocoding operation has been completed, and will be passed an object with the resulting point on the map. We just want to create a marker for the point:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var geocoder = new MapstractionGeocoder(function(result) {
	var marker = new Marker(result.point);
	mapstraction.addMarker(marker);
}, &amp;#039;google&amp;#039;);   &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For our purposes, joining the street address and postcode with a comma to create the address should suffice:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;geocoder.geocode({&amp;#039;address&amp;#039;: streetaddress + &amp;#039;, &amp;#039; + postcode});   &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There&amp;#8217;s one last step: when the marker is clicked, we want to display details of the restaurant. We can do this with an info bubble, which can be configured by passing in a string of &lt;span class="caps"&gt;HTML&lt;/span&gt;. We&amp;#8217;ll construct that &lt;span class="caps"&gt;HTML&lt;/span&gt; using jQuery&amp;#8217;s &lt;code&gt;html()&lt;/code&gt; method on our &lt;code&gt;hcard&lt;/code&gt; object, which extracts the &lt;span class="caps"&gt;HTML&lt;/span&gt; contained within that &lt;span class="caps"&gt;DOM&lt;/span&gt; node as a string.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var marker = new Marker(result.point);
marker.setInfoBubble(
	&amp;#039;&amp;lt;div class=&amp;quot;bubble&amp;quot;&amp;gt;&amp;#039; + hcard.html() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;
);
mapstraction.addMarker(marker);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We&amp;#8217;ve wrapped the bubble in a div with class &lt;code&gt;bubble&lt;/code&gt; to make it easier to style. Google Maps can behave strangely if you don&amp;#8217;t provide an explicit width for your info bubbles, so we&amp;#8217;ll add that to our &lt;span class="caps"&gt;CSS&lt;/span&gt; now:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.bubble {
	width: 300px;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s everything we need: let&amp;#8217;s combine our code together:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(function() {
	// First create a div to host the map
	var themap = jQuery(&amp;#039;&amp;lt;div id=&amp;quot;themap&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).css({
		&amp;#039;width&amp;#039;: &amp;#039;90%&amp;#039;,
		&amp;#039;height&amp;#039;: &amp;#039;400px&amp;#039;
	}).insertBefore(&amp;#039;ul.restaurants&amp;#039;);
	// Now initialise the map
	var mapstraction = new Mapstraction(&amp;#039;themap&amp;#039;,&amp;#039;google&amp;#039;);
	mapstraction.addControls({
		zoom: &amp;#039;large&amp;#039;,
		map_type: true
	});
	// Show map centred on Brighton
	mapstraction.setCenterAndZoom(
		new LatLonPoint(50.82423734980143, -0.14007568359375),
		15 // Zoom level appropriate for Brighton city centre
	);
	// Geocode each hcard and add a marker
	jQuery(&amp;#039;.vcard&amp;#039;).each(function() {
		var hcard = jQuery(this);
		var streetaddress = hcard.find(&amp;#039;.street-address&amp;#039;).text();
		var postcode = hcard.find(&amp;#039;.postal-code&amp;#039;).text();
		var geocoder = new MapstractionGeocoder(function(result) {
			var marker = new Marker(result.point);
			marker.setInfoBubble(
				&amp;#039;&amp;lt;div class=&amp;quot;bubble&amp;quot;&amp;gt;&amp;#039; + hcard.html() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;
			);
			mapstraction.addMarker(marker);
		}, &amp;#039;google&amp;#039;);	 
		geocoder.geocode({&amp;#039;address&amp;#039;: streetaddress + &amp;#039;, &amp;#039; + postcode});
	});
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here&amp;#8217;s the &lt;a href="https://24ways.org/examples/unobtrusively-mapping-microformats-with-jquery/restaurants.html"&gt;finished code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s one last shortcut we can add: jQuery provides the &lt;code&gt;$&lt;/code&gt; symbol as an alias for jQuery. We could just go through our code and replace every call to &lt;code&gt;jQuery()&lt;/code&gt; with a call to &lt;code&gt;$()&lt;/code&gt;, but this would cause incompatibilities if we ever attempted to use our script on a page that also includes the Prototype library. A more robust approach is to start our code with the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(function($) {
	// Within this function, $ now refers to jQuery
	// ...
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;jQuery cleverly passes itself as the first argument to any function registered to the &lt;span class="caps"&gt;DOM&lt;/span&gt; ready event, which means we can assign a local &lt;code&gt;$&lt;/code&gt; variable shortcut without affecting the &lt;code&gt;$&lt;/code&gt; symbol in the global scope. This makes it easy to &lt;a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries"&gt;use jQuery with other libraries&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Limitations of Geocoding&lt;/h3&gt;

&lt;p&gt;You may have noticed a discrepancy creep in to the last example: whereas my original list included seven restaurants, the geocoding example only shows five. This is because the Google Maps geocoder incorporates a rate limit: more than five lookups in a second and it starts returning error messages instead of regular results.&lt;/p&gt;

&lt;p&gt;In addition to this problem, geocoding itself is an inexact science: while UK postcodes generally get you down to the correct street, figuring out the exact point on the street from the provided address usually isn&amp;#8217;t too accurate (although Google do a pretty good job).&lt;/p&gt;

&lt;p&gt;Finally, there&amp;#8217;s the performance overhead. We&amp;#8217;re making five geocoding requests to Google for every page served, even though the restaurants themselves aren&amp;#8217;t likely to change location any time soon. Surely there&amp;#8217;s a better way of doing this?&lt;/p&gt;

&lt;p&gt;Microformats to the rescue (again)! The &lt;a href="http://microformats.org/wiki/geo"&gt;geo microformat&lt;/a&gt; suggests simple classes for including latitude and longitude information in a page. We can add specific points for each restaurant using the following markup:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li class=&amp;quot;vcard&amp;quot;&amp;gt;
	&amp;lt;h3 class=&amp;quot;fn org&amp;quot;&amp;gt;E-Kagen&amp;lt;/h3&amp;gt;
	&amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;
		&amp;lt;p class=&amp;quot;street-address&amp;quot;&amp;gt;22-23 Sydney Street&amp;lt;/p&amp;gt;
		&amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;Brighton&amp;lt;/span&amp;gt;, &amp;lt;abbr class=&amp;quot;country-name&amp;quot; title=&amp;quot;United Kingdom&amp;quot;&amp;gt;UK&amp;lt;/abbr&amp;gt;&amp;lt;/p&amp;gt;
		&amp;lt;p class=&amp;quot;postal-code&amp;quot;&amp;gt;BN1 4EN&amp;lt;/p&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;p&amp;gt;Telephone: &amp;lt;span class=&amp;quot;tel&amp;quot;&amp;gt;+44 (0)1273 687 068&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
	&amp;lt;p class=&amp;quot;geo&amp;quot;&amp;gt;Lat/Lon: 
		&amp;lt;span class=&amp;quot;latitude&amp;quot;&amp;gt;50.827917&amp;lt;/span&amp;gt;, 
		&amp;lt;span class=&amp;quot;longitude&amp;quot;&amp;gt;-0.137764&amp;lt;/span&amp;gt;
	&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As before, I used &lt;a href="http://www.getlatlon.com/"&gt;www.getlatlon.com&lt;/a&gt; to find the exact locations &amp;#8211; I find satellite view is particularly useful for locating individual buildings.&lt;/p&gt;

&lt;p&gt;Latitudes and longitudes are great for machines but not so useful for human beings. We could hide them entirely with &lt;code&gt;display: none&lt;/code&gt;, but I prefer to merely de-emphasise them (someone might want them for their &lt;span class="caps"&gt;GPS&lt;/span&gt; unit):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.vcard .geo {
	margin-top: 0.5em;
	font-size: 0.85em;
	color: #ccc;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It&amp;#8217;s probably a good idea to hide them completely when they&amp;#8217;re displayed inside an info bubble:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.bubble .geo {
	display: none;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can extract the co-ordinates in the same way we extracted the address. Since we&amp;#8217;re no longer geocoding anything our code becomes a lot simpler:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(&amp;#039;.vcard&amp;#039;).each(function() {
	var hcard = $(this);
	var latitude = hcard.find(&amp;#039;.geo .latitude&amp;#039;).text();
	var longitude = hcard.find(&amp;#039;.geo .longitude&amp;#039;).text();
	var marker = new Marker(new LatLonPoint(latitude, longitude));
	marker.setInfoBubble(
		&amp;#039;&amp;lt;div class=&amp;quot;bubble&amp;quot;&amp;gt;&amp;#039; + hcard.html() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;
	);
	mapstraction.addMarker(marker);
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And here&amp;#8217;s the &lt;a href="https://24ways.org/examples/unobtrusively-mapping-microformats-with-jquery/restaurants-geo.html"&gt;finished geo example&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Further reading&lt;/h3&gt;

&lt;p&gt;We&amp;#8217;ve only scratched the surface of what&amp;#8217;s possible with microformats, jQuery (or just regular JavaScript) and a bit of imagination. If this example has piqued your interest, the following links should give you some more food for thought.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://microformats.org/wiki/hcard"&gt;The hCard specification&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://microformats.org/wiki/hcard-parsing"&gt;Notes on parsing hCards&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://simonwillison.net/2007/Aug/15/jquery/"&gt;jQuery for JavaScript programmers&lt;/a&gt; &amp;#8211; my extended tutorial on jQuery.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript"&gt;Dann Webb&amp;#8217;s Sumo&lt;/a&gt; &amp;#8211; a full JavaScript library for parsing microformats, based around some clever metaprogramming techniques.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://austin.adactio.com/"&gt;Jeremy Keith&amp;#8217;s Adactio Austin&lt;/a&gt; &amp;#8211; the first place I saw using microformats to unobtrusively plot locations on a map. Makes clever use of hEvent as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This article &lt;a href="https://24ways.org/2007/unobtrusively-mapping-microformats-with-jquery/"&gt;originally appeared on 24ways&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/24-ways"&gt;24-ways&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jquery"&gt;jquery&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mapping"&gt;mapping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microformats"&gt;microformats&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unobtrusive-javascript"&gt;unobtrusive-javascript&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="24-ways"/><category term="brighton"/><category term="jquery"/><category term="mapping"/><category term="microformats"/><category term="unobtrusive-javascript"/></entry><entry><title>Photos taken in Brighton on Flickr!</title><link href="https://simonwillison.net/2007/Nov/21/places/#atom-tag" rel="alternate"/><published>2007-11-21T08:28:38+00:00</published><updated>2007-11-21T08:28:38+00:00</updated><id>https://simonwillison.net/2007/Nov/21/places/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.flickr.com/places/United Kingdom/England/Brighton"&gt;Photos taken in Brighton on Flickr!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new Flickr Places feature has finally launched, and it’s absolutely beautiful.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.flickr.com/places"&gt;Flickr: Places&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flickr"&gt;flickr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/photos"&gt;photos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/places"&gt;places&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="flickr"/><category term="photos"/><category term="places"/></entry><entry><title>£5 app</title><link href="https://simonwillison.net/2007/Sep/12/app/#atom-tag" rel="alternate"/><published>2007-09-12T12:12:39+00:00</published><updated>2007-09-12T12:12:39+00:00</updated><id>https://simonwillison.net/2007/Sep/12/app/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://fivepoundapp.com/"&gt;£5 app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Monthly Brighton meetup for people interested in building (and maybe selling) lightweight software with 1-2 man teams. Nat and I went along last night and really enjoyed it.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/events"&gt;events&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fivepoundapp"&gt;fivepoundapp&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="events"/><category term="fivepoundapp"/></entry><entry><title>Brighton geek venues</title><link href="https://simonwillison.net/2007/Aug/16/brighton/#atom-tag" rel="alternate"/><published>2007-08-16T01:38:29+00:00</published><updated>2007-08-16T01:38:29+00:00</updated><id>https://simonwillison.net/2007/Aug/16/brighton/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://brighton.geekvenues.com/"&gt;Brighton geek venues&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nat’s latest project: a neat Google Maps mashup listing venues for geek events in Brighton, managed using Google MyMaps to edit a KML file.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geek"&gt;geek&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-maps"&gt;google-maps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/googlemymaps"&gt;googlemymaps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/kml"&gt;kml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mashup"&gt;mashup&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mymaps"&gt;mymaps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/natalie-downe"&gt;natalie-downe&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="geek"/><category term="google"/><category term="google-maps"/><category term="googlemymaps"/><category term="kml"/><category term="mashup"/><category term="mymaps"/><category term="natalie-downe"/></entry><entry><title>The World Beard and Moustache Championships 2007</title><link href="https://simonwillison.net/2007/Aug/15/beard/#atom-tag" rel="alternate"/><published>2007-08-15T19:11:26+00:00</published><updated>2007-08-15T19:11:26+00:00</updated><id>https://simonwillison.net/2007/Aug/15/beard/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.handlebarclub.co.uk/wbmcticketsalef.shtml"&gt;The World Beard and Moustache Championships 2007&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
In Brighton on the 1st of September, tickets are a fiver. Unfortunately we’re moving that day so we probably can’t make it.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/beard"&gt;beard&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/funny"&gt;funny&lt;/a&gt;&lt;/p&gt;



</summary><category term="beard"/><category term="brighton"/><category term="funny"/></entry><entry><title>Twitter / Natalie: Its announced and official...</title><link href="https://simonwillison.net/2007/Jul/26/twitter/#atom-tag" rel="alternate"/><published>2007-07-26T17:22:23+00:00</published><updated>2007-07-26T17:22:23+00:00</updated><id>https://simonwillison.net/2007/Jul/26/twitter/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://twitter.com/Natbat/statuses/167741332"&gt;Twitter / Natalie: Its announced and official...&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
We’re both moving to Brighton in September.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/moving"&gt;moving&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/natalie-downe"&gt;natalie-downe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/personal-news"&gt;personal-news&lt;/a&gt;&lt;/p&gt;



</summary><category term="brighton"/><category term="moving"/><category term="natalie-downe"/><category term="twitter"/><category term="personal-news"/></entry><entry><title>Skill Swap</title><link href="https://simonwillison.net/2003/Apr/29/skillSwap/#atom-tag" rel="alternate"/><published>2003-04-29T23:30:14+00:00</published><updated>2003-04-29T23:30:14+00:00</updated><id>https://simonwillison.net/2003/Apr/29/skillSwap/#atom-tag</id><summary type="html">
    &lt;p&gt;Via &lt;a href="http://www.zeldman.com/daily/0403b.shtml#conferences" title="No end of free"&gt;Zeldman&lt;/a&gt;, &lt;a href="http://skillswap.brightonnewmedia.org/"&gt;Skill Swap&lt;/a&gt; is a community based new mania free training scheme based in Brighton:&lt;/p&gt;

&lt;blockquote cite="http://skillswap.brightonnewmedia.org/"&gt;
&lt;p&gt;SkillSwap is a voluntary group set up by members of the local web design community and specifically members of the Brighton New Media mailing list.&lt;/p&gt;

&lt;p&gt;The idea is that on a semi-regular basis, people from the local new media community volunteer to give up some of their free time to train a small group of their peers in a subject that interests them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It piqued my interest because it seems to be similar to the model we're hoping to achieve with our student computer society, &lt;a href="http://www.bcss.info/"&gt;BCSS&lt;/a&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brighton"&gt;brighton&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="brighton"/></entry></feed>