<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    >

<channel>
    <title>Webmonkey &#187; Adam Duvander</title>
    <atom:link href="http://www.webmonkey.com/author/duvander/feed/" rel="self" type="application/rss+xml" />
    <link>http://www.webmonkey.com</link>
    <description>The Web Developer&#039;s Resource</description>
    <lastBuildDate>Fri, 05 Apr 2013 20:20:46 +0000</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <generator>http://wordpress.org/?v=3.4.2</generator>
    
    <item>
        <title>Multi-map with Mapstraction</title>
        <link>http://www.webmonkey.com/2010/02/multi-map-with-mapstraction/</link>
        <comments>http://www.webmonkey.com/2010/02/multi-map-with-mapstraction/#comments</comments>
        <pubDate>Wed, 03 Feb 2010 05:04:54 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://origin.stag2.webmonkey.com/?p=46138</guid>
        		<category><![CDATA[Location]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wiki]]></category>
        <description><![CDATA[It seems every mapping website has an API these days. Google, Yahoo, Microsoft, Mapquest&#8230; how do you choose? With Mapstraction, you don&#8217;t have to. Mapstraction is an open source abstracted JavaScript mapping library. You can write mapping code once, then switch between map providers by only changing two lines. Mapstraction is maintained by a group [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled -->
<p>It seems every mapping website has an API these days. Google, Yahoo, Microsoft, Mapquest&#8230; how do you choose? With Mapstraction, you don&#8217;t have to.</p>
<p>Mapstraction is an open source abstracted JavaScript mapping library. You can write mapping code once, then switch between map providers by only changing two lines. Mapstraction is maintained by a group of geocode lovers who want to give developers options when creating maps.</p>
<p>To help you on your way to using Mapstraction, we&#8217;ll simply create a map we can display on a web page, and then add a marker to denote a particular location.</p>
<p>
<span id="more-46138"></span>
</p>
<table id="toc" class="toc" summary="Contents">
<tbody>
<tr>
<td>
<div id="toctitle">
<h2>Contents</h2>
</div>
<ol>
<li><a href="#What_You.27ll_Need">What You&#8217;ll Need</a></li>
<li><a href="#How_to_Proceed">How to Proceed</a></li>
<ol>
<li><a href="#Step_1:_Get_started">Step 1: Get started</a></li>
<li><a href="#Step_2:_Adding_in_the_Map">Step 2: Adding in the Map</a></li>
<li><a href="#Step_3:_Adding_Markers">Step 3: Adding Markers</a></li>
<li><a href="#Step_4:_Changing_Map_Providers">Step 4: Changing Map Providers</a></li>
</ol>
</li>
<li><a href="#Where_to_go_from_here">Where to go from here</a></li>
</ol>
</td>
</tr>
</tbody>
</table>
<p><a name="What_You.27ll_Need"></a><br />
<h2> <span class="mw-headline">What You&#8217;ll Need</span></h2>
<ul>
<li> Knowledge of JavaScript, CSS and HTML</li>
<li> Mapstraction JavaScript file</li>
<li> At least one map provider API key (they&#8217;re free). I&#8217;ll be using Google in most examples. <a href="http://code.google.com/apis/maps/signup.html" class="external text" title="http://code.google.com/apis/maps/signup.html" rel="nofollow">Get a Google API key here</a>.</li>
</ul>
<p></p>
<p><a name="How_to_Proceed"></a><br />
<h2> <span class="mw-headline">How to Proceed</span></h2>
</p>
<p><a name="Step_1:_Get_started"></a><br />
<h3> <span class="mw-headline">Step 1: Get started</span></h3>
</p>
<p>Once you have a Google API key, you&#8217;ll need to grab the latest <a href="http://mapstraction.com/svn/source/mapstraction.js" class="external text" title="http://mapstraction.com/svn/source/mapstraction.js" rel="nofollow">Mapstraction JavaScript file</a>. Got it?
</p>
<p>Now create a file in the same directory as mapstraction.js containing the following HTML:
</p>
<pre class="brush: js">

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;

	&lt;head&gt;

&lt;title&gt;My Mapstraction Map&lt;/title&gt;

&lt;script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=YOURAPIKEYHERE" type="text/JavaScript"&gt;&lt;/script&gt;

&lt;script src="mapstraction.js"&gt;&lt;/script&gt;

	&lt;/head&gt;
	&lt;body&gt;

&lt;h1&gt;My Mapstraction Map&lt;/h1&gt;

&lt;div id="mapstraction"&gt;&lt;/div&gt;

	&lt;/body&gt;

&lt;/html&gt;
</pre>
<p>Remember to put your API key in place of <em>YOURAPIKEYHERE</em>. The above code loads the Google API and the Mapstraction library, but we don&#8217;t have a map just yet.
</p>
<p><img alt="Mapstraction is loaded, but we have yet to add the map" src="/mediawiki/images/Mapstraction_1.jpg" class="thumbimage" border="0"></p>
<p>Mapstraction is loaded, but we have yet to add the map</p>
<p><a name="Step_2:_Adding_in_the_Map"></a><br />
<h3> <span class="mw-headline">Step 2: Adding in the Map</span></h3>
<p>To tell Mapstraction how and where to add a map, we need to include some JavaScript between the head tags near the top of our HTML file. Try this function, initialize_mapstraction:
</p>
<pre class="brush: js">

&lt;script type="text/JavaScript"&gt;
var mapstraction;

function initialize_mapstraction()
{
	// Create a map object
	mapstraction = new Mapstraction('mapstraction', 'google');
	// Create a latitude/longitude point
	var ll = new LatLonPoint(37.780764,-122.395592);
	// Display map centered on above point, zoomed to show most of San Francisco
	mapstraction.setCenterAndZoom(ll, 12);
}
&lt;/script&gt;
</pre>
<p>Here, we tell Mapstraction to use the element with the id &#8220;mapstraction&#8221; as our map. In the HTML code we created in step one, we included an empty div with the &#8220;mapstraction&#8221; id. In the second part of the script, we create a latitude/longitude point that represents the Webmonkey offices. Then, we set that point as the center and set a zoom level of 12, which is enough to still see most of San Francisco.</p>
<p>Mapstraction requires us to set the size of our map. We use a little CSS to do this. You can add this to your CSS file, or add this code between your head tags:</p>
<pre class="brush: js">

&lt;style&gt;
#mapstraction
{
	width: 500px;
	height: 300px;
}
&lt;/style&gt;
</pre>
<p>Finally, we need to call the initialize_mapstraction function. To do this, add an onload attribute to the body tag of your HTML document, like so:
</p>
<p></p>
<pre class="brush: js">
	&lt;body onload="initialize_mapstraction()"&gt;

</pre>
</p>
<p>Reload the HTML file and you should see San Francisco. You may notice that your map looks exactly like a Google Map. That&#8217;s the point. Mapstraction doesn&#8217;t have any maps of its own. It merely provides a way to easily switch between map providers. I&#8217;ll show this later in the tutorial and explain why you might want to do this.
</p>
<p><img alt="Mapstraction adds a Google map to the web page" src="/mediawiki/images/Mapstraction_2.jpg" class="thumbimage" border="0"> </p>
<p>Mapstraction adds a Google map to the web page</p>
<p>
</p>
<p><a name="Step_3:_Adding_Markers"></a><br />
<h3> <span class="mw-headline">Step 3: Adding Markers</span></h3>
<p>So far we&#8217;ve created a very simple map. You can click and drag it around to see more of the Bay Area, but for the most part our map is boring. Let&#8217;s spice it up with a map marker.</p>
<p>To place marker on our map, we&#8217;ll need to add some more JavaScript code to the initialize_mapstraction function. Add these lines after the setCenterAndZoom line:
</p>
<pre class="brush: js">

// Create map marker from above point
var marker = new Marker(ll);

// Include text in info bubble shown when marker is clicked
marker.setInfoBubble("&lt;h2&gt;&lt;strong&gt;Wired.com&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Home of Monkeys&lt;/p&gt;");

// Add marker to the map
mapstraction.addMarker(marker);
</pre>
<p>Reload your HTML file and you&#8217;ll see a little red marker in the center of the map. That&#8217;s the Webmonkey offices. Our marker uses the same latitude/longitude point we created in the previous step to center the map.</p>
<p>Now try clicking the marker. Surprise! We also included an interactive message. Mapstraction calls this an info bubble. In the code, you may notice the setInfoBubble line. You can put anything you want between the quotes. Try changing the text&#8211;we don&#8217;t mind!
</p>
<p><img alt="A red marker is added to the map" src="/mediawiki/images/Mapstraction_3.jpg" border="0"></p>
<p>A red marker is added to the map</p>
<p><a name="Step_4:_Changing_Map_Providers"></a><br />
<h3> <span class="mw-headline">Step 4: Changing Map Providers</span></h3>
<p>Now that we have a working Mapstraction example, let&#8217;s use the full power of an abstracted library by switching map providers.</p>
<p>There are many reasons you might decide to change providers down the line:</p>
<ul>
<li> Current provider might change the terms of service
</li>
<li> Your map could become too popular and use up too many map views
</li>
<li> Current provider quality might get worse, or they might put ads on your map
</li>
<li> New provider might have prettier maps
</li>
<li> You might get bored of current provider, or come up with a reason that makes sense to you
</li>
</ul>
<p>The promise of Mapstraction is to only have to change two lines of code. Imagine if you had a large map with many markers and other features. It could take a lot of work to manually convert the map code from one provider to another.
</p>
<p>In this example, we&#8217;ll be switching to Microsoft Virtual Earth, which happens to not even require an API key.
</p>
<p>The first line you need to change is the call to the API JavaScript. Remove the script line that calls to maps.google.com and replace it with this line:
</p>
<p><pre class="brush: js">

&lt;script src="<a href="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6" class="external free" title="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6" rel="nofollow">http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6</a>"&gt;&lt;/script&gt;
</pre>
</p>
<p>Then, inside the initialize_mapstraction function, replace &#8220;google&#8221; with &#8220;microsoft&#8221; where the new map object is created. Here&#8217;s the entire line to include:</p>
<pre class="brush: js">
	mapstraction = new Mapstraction('mapstraction', 'microsoft');
</pre>
</p>
<p>Reload the HTML file and like magic, the same map is now displayed as a Virtual Earth map.
</p>
<p><img alt="A simple edit to the code changes our map provider from Google to Microsoft" src="/mediawiki/images/Mapstraction_4.jpg" class="thumbimage" border="0">
<p>A simple edit to the code changes our map provider from Google to Microsoft</p>
<p><a name="Where_to_go_from_here"></a><br />
<h2> <span class="mw-headline">Where to go from here</span></h2>
<p>Despite showing off Mapstraction&#8217;s provider-switching magic, our map is still fairly simple. Here are a few ways to jazz it up.</p>
<p>Give your users a way to zoom in an out. Mapstraction provides both large and small zoom controls. This line adds the large one:</p>
<pre class="brush: js">
mapstraction.addLargeControls();
</pre>
</p>
<p>And this the small one:</p>
<pre class="brush: js">
mapstraction.addSmallControls();
</pre>
</p>
<p>You can add these, and several other controls, in one line using the <a href="http://www.mapstraction.com/doc/Mapstraction.html#addControls" class="external text" title="http://www.mapstraction.com/doc/Mapstraction.html#addControls" rel="nofollow">addControls function</a></p>
<p>One of my favorite Mapstraction features is automatic centering and zooming. When called on a map with multiple markers, Mapstraction calculates the center point of all markers and the smallest zoom level that will contain all the markers. So much snazziness, in one simple line:</p>
<pre class="brush: js">
mapstraction.autoCenterAndZoom();
</pre>
</p>
<p>Draw lines on a map, automatically filtered out certain markers, and more. The Mapstraction community is continually adding new features. Check out <a href="http://www.mapstraction.com/" class="external text" title="http://www.mapstraction.com/" rel="nofollow">their homepage</a> or their <a href="http://www.mapstraction.com/doc/" class="external text" title="http://www.mapstraction.com/doc/" rel="nofollow">API documentation</a>.</p>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2010/02/multi-map-with-mapstraction/feed/</wfw:commentRss>
        <slash:comments>3</slash:comments>

        
    </item>
    
    <item>
        <title>Mobile Browsers Deserve Location Data</title>
        <link>http://www.webmonkey.com/2008/11/mobile_browsers_deserve_location_data/</link>
        <comments>http://www.webmonkey.com/2008/11/mobile_browsers_deserve_location_data/#comments</comments>
        <pubDate>Tue, 25 Nov 2008 23:06:23 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/mobilebrowsersdeservelocationdata</guid>
        		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Location]]></category>
        <description><![CDATA[How come my desktop browser can get my location, but mobile Safari on my iPhone acts as if it doesn&#8217;t know where I am? I hate to seem impatient, but there is a proposed geolocation standard. Mobile browsers should adopt it swiftly. The mobile web is here. The iPhone and Android are going to duke [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled -->How come my <a href="http://www.webmonkey.com/blog/Geode_Tells_Firefox_Where_You_Are__What_s_Nearby">desktop browser can get my location</a>, but mobile Safari on my iPhone acts as if it doesn&#8217;t know where I am? I hate to seem impatient, but there is a <a href="http://dev.w3.org/geo/api/spec-source.html">proposed geolocation standard</a>. Mobile browsers should adopt it swiftly.</p>
<p>The mobile web is here. The iPhone and Android are going to duke it out, and the end result will be more users. Facebook&#8217;s <a href="http://www.readwriteweb.com/archives/facebook_mobile_sees_3x_growth.php">mobile visitors have tripled</a> in the last year. That&#8217;s a lot of mobile browsing.</p>
<p>If the location-aware services are going to be as disruptive as everyone has said, these devices need to get better at sharing the information available within them. Yes, Android and iPhone both have apps. But we shouldn&#8217;t need to <a href="http://www.webmonkey.com/blog/Make_Your_Site_An_iPhone_App">wrap our web projects in an app</a> just to access the coordinates.</p>
<p>The Geode plugin for Firefox and its presence as a full feature in the browser&#8217;s most recent beta have proven it&#8217;s reasonable to include it even on a non-mobile machine. Despite the flakiness of WiFi-based geolocation, innovative sites have incorporated the technology. You can <a href="http://www.webmonkey.com/blog/Shout_Out_Your_Whereabouts_With_Shizzow">shout your whereabouts</a> or <a href="http://www.webmonkey.com/blog/DropDOTio_Location_Enables_Virtual_Geocaching">tie files to a location</a> all with the help of browser-based geolocation. Of course, we have a <a href="/2010/02/Track_User_Geolocation_With_JavaScript">Geode/Gears geolocation tutorial</a> so you can incorporate it, too.</p>
<p>But we <em>really</em> want it incorporated in mobile devices, so we&#8217;d be able to see some real innovation. Location-based services are at the horse and buggy stage right now. Let&#8217;s give it an engine.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/Why_Location-Based_Apps_Suck">Why Location-Based Apps Suck</a></li>
<li><a href="http://www.webmonkey.com/blog/Make_Your_Site_An_iPhone_App">Make Your Site An iPhone App</a></li>
<li><a href="/2010/02/Track_User_Geolocation_With_JavaScript">Tutorial:  Track User Geolocation With JavaScript</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/mobile_browsers_deserve_location_data/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Mashups Are Dead, But the Web is Alive</title>
        <link>http://www.webmonkey.com/2008/11/mashups_are_dead__but_the_web_is_alive/</link>
        <comments>http://www.webmonkey.com/2008/11/mashups_are_dead__but_the_web_is_alive/#comments</comments>
        <pubDate>Tue, 25 Nov 2008 19:33:53 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/mashupsaredeadbutthewebisalive</guid>
        		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[mashups]]></category>
        <description><![CDATA[Mashups, web apps which merge two or more data sources, essentially arose from the introduction of the Google Maps API in June 2005. APIs for easily accessing data existed before then, but a way to visualize it geographically was a huge tipping point. Due to the popularity of map mashups, ProgrammableWeb&#8217;s mashup directory is over [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Mashup-gmaps.jpg" alt="Photo/Wikipedia mashup" />Mashups, web apps which merge two or more data sources, essentially arose from the introduction of the Google Maps API in June 2005. APIs for easily accessing data existed before then, but a way to visualize it geographically was a huge tipping point.</p>
<p>Due to the popularity of map mashups, ProgrammableWeb&#8217;s <a href="http://www.programmableweb.com/mashups">mashup directory</a> is over a third mapping-related. But something interesting has been happening: other types of mashups are becoming popular. Over the last two weeks, for example, maps mashups are only 20% of the new additions to the directory. Granted, it&#8217;s a small sample and mapping is still tops by far, but other ways of mashing up data are becoming more relevant.</p>
<p>How can mashups be both dead and more relevant? Consider <a href="http://friendfeed.com/">Friendfeed</a>, which aggregates your data using APIs of several social websites, pulling in each item you and your friends post to Twitter, Flickr, Digg, your blogs. It fits the criteria of a mashup perfectly. If Friendfeed was entered into the recent <a href="http://www.mashupcamp.com/wiki/index.php/SpeedGeeking8">MashupCamp contest</a>, it would have come away victorious. Friendfeed is an <em>uber</em>-mashup, though nobody calls it that.</p>
<p>Mashups are dead because the whole web is becoming a collection of APIs. In the future, showing an embedded map of liquor stores near that New Year&#8217;s party won&#8217;t be a snazzy add-on, it will be a necessary feature.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/Google_Maps_Adds_User_Mashups">Google Maps Adds User Mashups</a></li>
<li><a href="http://www.webmonkey.com/blog/New_Digg_API_Means_More_Mashups">New Digg API Means More Mashups</a></li>
<li><a href="http://www.webmonkey.com/blog/Create_Slick_Spreadsheet_Mashups_in_Google_Docs">Create Slick Spreadsheet Mashups in Google Docs</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/mashups_are_dead__but_the_web_is_alive/feed/</wfw:commentRss>
        <slash:comments>1</slash:comments>

        
    </item>
    
    <item>
        <title>New Tools Help You Build Better Maps</title>
        <link>http://www.webmonkey.com/2008/11/new_tools_help_you_build_better_maps/</link>
        <comments>http://www.webmonkey.com/2008/11/new_tools_help_you_build_better_maps/#comments</comments>
        <pubDate>Mon, 24 Nov 2008 23:37:49 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/newtoolshelpyoubuildbettermaps</guid>
        		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[mapstraction]]></category>
        <description><![CDATA[What&#8217;s cooler than Google Maps? Tools built on top of it. Developers from the Netherlands have released some helpful libraries to make more usable, interactive Google Maps. Google hosts an open source utility library with several useful examples. Among them, a drag-to-zoom feature and a way to create dynamic labeled markers. A progress bar is [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Gmaps-progressbar.jpg" alt="Example of progressbarcontrol" class="full" /></p>
<p>What&#8217;s cooler than Google Maps? Tools built on top of it. Developers from the Netherlands have <a href="http://googlegeodevelopers.blogspot.com/2008/11/2-more-libraries-released.html">released some helpful libraries</a> to make more usable, interactive Google Maps.</p>
<p>Google hosts an <a href="http://code.google.com/p/gmaps-utility-library/">open source utility library</a> with several useful examples. Among them, a drag-to-zoom feature and a way to create dynamic labeled markers.</p>
<p>A progress bar is among the new additions to the libraries. When adding more than just a few markers, it can take some time. Rather than make your users sit through the slow-down, this library shows the progress via a popup status bar that fills as it completes.</p>
<p>The other new library, SnapToRoute, allows developers to restrict some actions to just along a polyline. The <a href="http://gmaps-utility-library.googlecode.com/svn/trunk/snaptoroute/1.0/examples/detailzoom.html">example included</a> shows zooming along a specific route.</p>
<p>I love these sorts of libraries that make creating advanced maps easy. Of course, I&#8217;d love to see platform-independent examples, so developers of any map API could benefit. These libraries would be great to see as a part of <a href="http://mapstraction.com/">Mapstraction</a>, the multi-map I <a href="/2010/02/Multi-map_with_Mapstraction">covered in a tutorial</a>.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/OpenStreetMap">OpenStreetMap: Free, Editable Map of the World</a></li>
<li><a href="http://www.webmonkey.com/blog/Take_Your_Geo-Mashups_Beyond_Google_Maps">Take Your Geo-Mashups Beyond Google Maps</a></li>
<li><a href="http://www.webmonkey.com/blog/Pipes_Mashup_Turns_Google_Maps_into_a_Blogging_Tool">Pipes Mashup Turns Google Maps into a Blogging Tool</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/new_tools_help_you_build_better_maps/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Developer Rebuilds Twitter in a Week</title>
        <link>http://www.webmonkey.com/2008/11/developer_rebuilds_twitter_in_a_week/</link>
        <comments>http://www.webmonkey.com/2008/11/developer_rebuilds_twitter_in_a_week/#comments</comments>
        <pubDate>Mon, 24 Nov 2008 20:30:26 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/developerrebuildstwitterinaweek</guid>
        		<category><![CDATA[Software & Tools]]></category>
		<category><![CDATA[Twitter]]></category>
        <description><![CDATA[&#8220;Gentlemen, we can rebuild it. We have the technology. We can make Twitter better than it was before. Better, stronger, faster.&#8221; That&#8217;s the speech I imagine Niall Kennedy giving himself recently when he decided to rewrite Twitter&#8217;s front end using web best practices. The result is a read only Twitter that&#8217;s a little less pretty, [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled -->&#8220;Gentlemen, we can rebuild it. We have the technology. We can make Twitter better than it was before. Better, stronger, faster.&#8221;</p>
<p>That&#8217;s the speech I imagine Niall Kennedy giving himself recently when he decided to <a href="http://www.niallkennedy.com/blog/2008/11/twitter-front-end-rewrite.html">rewrite Twitter&#8217;s front end using web best practices</a>. The result is a <a href="http://www.twitterfe.com/">read only Twitter</a> that&#8217;s a little less pretty, but a whole lot more streamlined.</p>
<p>To start, Kennedy converted Twitter&#8217;s table layout to XHTML/CSS-based design. He also split the page load so that all those little avatar graphics are loaded asynchronously, which makes pages appear faster.</p>
<p>One of the larger undertakings was localizing (or is it localising?) the site. Kennedy had to choose common wording throughout the site and ensure nothing that would ever need translating was hard-coded.</p>
<p>Kennedy claims a 41% decrease in bandwidth and a much faster DOM footprint. It&#8217;s a geeky way of saying that TwitterFE is an improved Twitter.</p>
<p>Of course, the front end has never been Twitter&#8217;s biggest problem. It&#8217;s the back-end, with thousands of messages a second, that prompts the Fail Whale. In all, TwitterFE reminds of <a href="http://www.adamduvander.com/simple/craigslist-redesigns">redesigning Craigslist</a>. It seems like a great idea, but it ends up being a solution searching for a problem.</p>
<p>But as a case study, TwitterFE is extremely useful. Perhaps Kennedy will release his source code, which runs on Google App Engine, and we can all learn from his experience.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/Twitter_Asks_for_Scalability_Help_From_Community">Twitter Asks for Scalability Help From Community</a></li>
<li><a href="http://www.webmonkey.com/blog/Twitter_s_Evan_Williams:_Create_Something_New_By_Taking_Things_Away">Twitter&#8217;s Evan Williams: Create Something New By Taking Things Away</a></li>
<li><a href="http://www.webmonkey.com/blog/Simple_Solutions_to_Help_You_Avoid_the_Google_Fail_Whale">Simple Solutions to Help You Avoid the Google Fail Whale</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/developer_rebuilds_twitter_in_a_week/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Beware of iPhone Clickjacking: Update to 2.2</title>
        <link>http://www.webmonkey.com/2008/11/beware_of_iphone_clickjacking_update_to_2dot2/</link>
        <comments>http://www.webmonkey.com/2008/11/beware_of_iphone_clickjacking_update_to_2dot2/#comments</comments>
        <pubDate>Mon, 24 Nov 2008 19:15:25 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/bewareofiphoneclickjackingupdateto22</guid>
        		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[clickjacking]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[iPhone]]></category>
        <description><![CDATA[An iPhone clickjacking attack was fixed with last week&#8217;s release of the 2.2 software. Prior versions contained a CSS transforms bug that caused iframe content to appear as part of the actual page. It looks like the bug never saw malicious use in the wild, because the developers who noticed it alerted Apple and kept [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Iphone-clickjacking.png" alt="Example password jacking on iPhone" />An <a href="http://ejohn.org/blog/clickjacking-iphone-attack/">iPhone clickjacking attack</a> was fixed with last week&#8217;s release of the 2.2 software. Prior versions contained a <a href="http://webkit.org/blog/130/css-transforms/">CSS transforms</a> bug that caused iframe content to appear as part of the actual page.</p>
<p>It looks like the bug never saw malicious use in the wild, because the developers who noticed it alerted Apple and kept the bug secret while it was fixed. Like other <a href="http://www.webmonkey.com/blog/A_Look_at_the__Clickjacking__Web_Attack_and_Why_You_Should_Worry">clickjacking attacks</a>, the most likely use is to get a user to inadvertently click an ad. Although, an even more dangerous example is shown to harvest passwords.</p>
<p>If the <a href="http://blog.wired.com/gadgets/2008/11/apple-releases.html">StreetView and Maps additions</a> in the latest iPhone software wasn&#8217;t enough to get you to download the free update, let this attack be reason enough.</p>
<p>Though the bug was apparently discovered by developer <a href="http://waynepan.com/">Wayne Pan</a>, it was submitted by jQuery creator John Resig. Resig just keeps showing up for his various work. In addition to jQuery, he&#8217;s <a href="http://www.webmonkey.com/blog/Resig_Brings_Structure_to_Firebug">on the Firebug team at Mozilla</a>, <a href="http://www.webmonkey.com/blog/Chrome_is_Fast__But_Not_That_Fast">performance testing browsers</a> and <a href="http://www.webmonkey.com/blog/New_JavaScript_Library_Creates_Amazing_Animations">creating JavaScript animations</a>.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/A_Look_at_the__Clickjacking__Web_Attack_and_Why_You_Should_Worry">A Look at the &#8216;Clickjacking&#8217; Web Attack and Why You Should Worry</a></li>
<li><a href="http://www.webmonkey.com/blog/Hackers_are_Watching_You:_Flash_Clickjacking_Vulnerability_Exposes_Webcams_and_Mics">Hackers Are Watching You: Flash Clickjacking Vulnerability Exposes Webcams and Mics</a></li>
<li><a href="http://www.webmonkey.com/blog/Flash_Player_10_Solves_Some__but_not_all__Clickjacking__Attacks">Flash Player 10 Solves Some, but not all &#8216;Clickjacking&#8217; Attacks</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/beware_of_iphone_clickjacking_update_to_2dot2/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Your iPhone Idea is Worth Zilch</title>
        <link>http://www.webmonkey.com/2008/11/your_iphone_idea_is_worth_zilch/</link>
        <comments>http://www.webmonkey.com/2008/11/your_iphone_idea_is_worth_zilch/#comments</comments>
        <pubDate>Mon, 24 Nov 2008 18:47:47 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/youriphoneideaisworthzilch</guid>
        		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
        <description><![CDATA[Do you have an idea for an iPhone app? Yeah, me too. And so does the barista at my local coffee shop. Ideas for iPhone apps are as ubiquitous as screenplays in LA. The idea alone isn&#8217;t worth anything, according to iPhone consultant Raven Zachary. There are several factors conspiring against your iPhone idea: There [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Iphone-ideas.png" alt="iPhone ideas" />Do you have an idea for an iPhone app? Yeah, me too. And so does the barista at my local coffee shop. Ideas for iPhone apps are as ubiquitous as screenplays in LA. The <a href="http://blogs.oreilly.com/iphone/2008/11/turning-ideas-into-application.html">idea alone isn&#8217;t worth anything</a>, according to iPhone consultant <a href="http://raven.me/">Raven Zachary</a>.</p>
<p>There are several factors conspiring against your iPhone idea:</p>
<ol>
<li>There are still few people who know how to create iPhone applications</li>
<li>There are plenty of iPhone ideas from people who are willing to pay</li>
<li>The App Store is lucrative enough for developers to create their own apps</li>
</ol>
<p>I could probably add &#8220;you don&#8217;t know Objective-C&#8221; to that list, because if you did, you&#8217;d already be writing iPhone apps. Apple&#8217;s NDA, now lifted, handcuffed many developers eager to share their knowledge, so thorough iPhone how-tos are still hard to come by. Plus, see #3 on the above list. If you know how to create iPhone apps, you&#8217;re probably too busy doing just that.</p>
<p>Like Zachary, I love hearing ideas. Some iPhone ideas may be based on wanting to join the gold rush at the App Store, but I&#8217;d guess most are rooted in passion. It&#8217;s a terrible thing, dousing the fire of your iPhone excitement. But it&#8217;s not just the iPhone: all ideas are essentially worthless, as some commenters mentioned in reactions to Zachary&#8217;s post.</p>
<p><a href="http://www.oreillynet.com/onlamp/blog/2005/08/ideas_are_just_a_multiplier_of.html">Ideas have always been a multiplier of execution</a>. That was the case in 2005 when everybody had great ideas for a lucrative mashup and it&#8217;s the case now with the iPhone. The difference is that now it&#8217;s even harder to execute.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/Make_Your_Site_An_iPhone_App">
<p>Make Your Site An iPhone App</a></li>
<li><a href="http://www.webmonkey.com/blog/Hack_Up_Some_Web_Apps_at_iPhone_Dev_Camp">Hack Up Some Web Apps at iPhone Dev Camp</a></li>
<li><a href="http://www.webmonkey.com/blog/iPhone_App_Store_Exclusivity_Is_a_Big_Drawback">iPhone App Store Exclusivity Is a Big Drawback</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/your_iphone_idea_is_worth_zilch/feed/</wfw:commentRss>
        <slash:comments>2</slash:comments>

        
    </item>
    
    <item>
        <title>Share Your Mundane Details</title>
        <link>http://www.webmonkey.com/2008/11/share_your_mundane_details/</link>
        <comments>http://www.webmonkey.com/2008/11/share_your_mundane_details/#comments</comments>
        <pubDate>Sat, 22 Nov 2008 00:52:48 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/shareyourmundanedetails</guid>
        		<category><![CDATA[Software & Tools]]></category>
		<category><![CDATA[Visual Design]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[datavis]]></category>
        <description><![CDATA[The web has all sorts of data, but it&#8217;s sorely missing yours. If you request an account from Daytum, you can change that. The site lets its users collect data about themselves and share it via beautiful charts. Track your coffee consumption, how often you exercise, or anything else that matters to you. One of [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Daytum-charts.png" alt="Pie chart of ingesting liquid" class="full" /></p>
<p>The web has all sorts of data, but it&#8217;s sorely missing yours. If you request an account from <a href="http://daytum.com/">Daytum</a>, you can change that.</p>
<p>The site lets its users collect data about themselves and share it via beautiful charts. Track your coffee consumption, how often you exercise, or anything else that matters to you.</p>
<p>One of the site&#8217;s creators, <a href="http://feltron.com/">Nicholas Felton</a> creates a personal annual report each year that shows his year in data. Through gorgeous visualizations, Felton shows off the mundane. And now you can, too.</p>
<p>Felton gave a talk about the <a href="http://daytum.wordpress.com/2008/11/05/a-brief-history-of-daytum/">history of Daytum</a> at the Future of Web Design. His slides are embedded below:</p>
<div style="width:425px;text-align:left" id="__ss_724467"><object style="margin:0px" height="355" width="425"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=fowdpresent1g-1225914383127694-8"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=fowdpresent1g-1225914383127694-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img class="blogimg" src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/></a> | <a href="undefined" title="View this slideshow on SlideShare">View</a> | <a href="http://www.slideshare.net/upload">Upload your own</a></div>
</div>
<p>Using the site is super easy. You can drop in, add some data, and drop out. There&#8217;s also a <a href="http://daytum.wordpress.com/2008/11/06/mobile-submissions/">Twitter submission system</a>, for adding your data on the go.</p>
<p>The site is so simple, yet has a number of options for users. There&#8217;s lots of room for improvement, such as an API to allow some automated inclusion of data. Overall, this is a fun, easy-to-use site that&#8217;s worth checking out.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/Google_Data_Visualization_Opens_a_New_Web">Google Data Visualization Opens a New Web</a></li>
<li><a href="http://www.webmonkey.com/blog/Google_Trends_Takes_on_the_Flu">Google Trends Takes on the Flu</a></li>
<li><a href="http://www.webmonkey.com/blog/Google_Spruces_up_Spreadsheets">Google Spruces up Spreadsheets</a></li>
<li><a href="http://www.webmonkey.com/blog/Mint_s_New_Investment_Graphs_Showcase_Personal_Recessions">Mint&#8217;s New Investment Graphs Showcase Personal Recessions</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/share_your_mundane_details/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Go Go Gadget OAuth Support</title>
        <link>http://www.webmonkey.com/2008/11/go_go_gadget_oauth_support/</link>
        <comments>http://www.webmonkey.com/2008/11/go_go_gadget_oauth_support/#comments</comments>
        <pubDate>Fri, 21 Nov 2008 19:02:09 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/gogogadgetoauthsupport</guid>
        		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[igoogle]]></category>
		<category><![CDATA[oauth]]></category>
        <description><![CDATA[Passwords are a little bit more secure now that Google added OAuth support to its iGoogle Gadgets. Developers can now use their gadgets to easily grab data from OAuth-enabled APIs. Using OAuth, users do not have to give their passwords to developers. Instead, if a developer wants data from a service, the user enters the [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled --><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Oauth-icanhasopen.jpg" alt="I Can Has Open" /></p>
<p>Passwords are a little bit more secure now that <a href="http://igoogledeveloper.blogspot.com/2008/11/sign-in-to-myspace-aol-mail-and-google.html">Google added OAuth support to its iGoogle Gadgets</a>. Developers can now use their gadgets to easily grab data from OAuth-enabled APIs. Using OAuth, users do not have to give their passwords to developers. Instead, if a developer wants data from a service, the user enters the password into the service itself, providing the developer permission to access their data.</p>
<p>MySpace updates, AOL Mail and Google Book Search are the first gadgets to use OAuth. Finding the MySpace gadget via the iGoogle search is difficult, as there are pages of results by non-MySpace developers. Some of these ask for your password in an insecure manner, without OAuth. If you have a MySpace account, try adding <a href="http://www.google.com/ig/adde?moduleurl=x.myspacecdn.com/modules/common/static/xml/myspacegadget_01.xml">the official MySpace gadget</a>.</p>
<p><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Igoogle-myspace.jpg" alt="MySpace OAuth experience from Google Gadget" class="full" /></p>
<p>Adding the MySpace gadget gives a good idea of the user experience provided by the OAuth process. Rather than username/password fields within the iGoogle box, there&#8217;s a sign in button. Click it, and an OAuth page pops up providing a MySpace login page. Once you&#8217;ve signed in, the popup disappears and the gadget is populated with your MySpace data: updates, status, bulletins, and inbox.</p>
<p>Behind the scenes there is an exchange of keys that ensures the gadget maker really does have your permission to access the data. Those keys are permanent, so the sign in process is a one time deal for each OAuth gadget, not something you&#8217;ll have to do every time you visit your iGoogle page. For an example of how OAuth works, check out my <a href="/2010/02/Get_Started_with_Fire_Eagle/">FireEagle tutorial</a>.</p>
<p>The update to gadgets is world&#8217;s beyond password-sharing, but there should still be phishing worries. Emulating the popup process would be easy and there&#8217;s nothing to signify that the page I&#8217;m seeing really is MySpace. Luckily, that&#8217;s the same problem that many are already trying to fix. A solution to the problem for banking sites, for example, will probably be the same solution for OAuth.</p>
<p>[Photo by <a href="http://eran.sandler.co.il/">Eran Sandler</a>]</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/New_Foundation_Wants_to_Bridge_the_Gaps_Between_Open_Web_Tools">New Foundation Wants to Bridge the Gaps Between Open Web Tools</a></li>
<li><a href="http://www.webmonkey.com/blog/Thanks_to_OpenID_and_OAuth__the_Open_Social_Web_is_Beginning_to_Emerge">Thanks to OpenID and OAuth, the Open Social Web is Beginning to Emerge</a></li>
<li><a href="http://www.webmonkey.com/blog/Say_Goodbye_to_Comment_Spoofing:_OpenID_Goes_Live_on_Blogger">Say Goodbye to Comment Spoofing: OpenID Goes Live on Blogger</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/go_go_gadget_oauth_support/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    
    <item>
        <title>Yahoo Improves Its OpenID Support</title>
        <link>http://www.webmonkey.com/2008/11/yahoo_improves_its_openid_support/</link>
        <comments>http://www.webmonkey.com/2008/11/yahoo_improves_its_openid_support/#comments</comments>
        <pubDate>Fri, 21 Nov 2008 00:46:20 +0000</pubDate>

                <dc:creator>Adam Duvander</dc:creator>

        <guid isPermaLink="false">http://www.webmonkey.com/blog/yahooimprovesitsopenidsupport</guid>
        		<category><![CDATA[Web Basics]]></category>
		<category><![CDATA[jyte]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[plaxo]]></category>
		<category><![CDATA[Yahoo]]></category>
        <description><![CDATA[Yahoo continues to make strides to improve its OpenID implementation. Thursday it announced limited testing for Simple Registration, which supplies profile data once a user logs in with their Yahoo OpenID. Currently it is only testing Plaxo and Jyte. The experience logging in with Jyte is remarkable. It only takes a few clicks and I&#8217;m [...]]]></description>

            <content:encoded><![CDATA[<p><!-- wpautop enabled -->Yahoo continues to make strides to improve its OpenID implementation. Thursday it announced <a href="http://developer.yahoo.net/blog/archives/2008/11/yahoo_openid_test.html">limited testing for Simple Registration</a>, which supplies profile data once a user logs in with their Yahoo OpenID. Currently it is only testing <a href="http://www.plaxo.com/">Plaxo</a> and <a href="http://jyte.com/">Jyte</a>.</p>
<p><img class="blogimg" src="http://howto.wired.com/mediawiki/images/Jyte-openid.png" alt="OpenID sign in screen at Jyte" class="full" /></p>
<p>The experience logging in with Jyte is remarkable. It only takes a few clicks and I&#8217;m started using the site. It receives my preferred nickname from Yahoo, so I&#8217;m not even asked to fill in anything else.</p>
<p>Plaxo, on the other hand, requires a process that feels like signing up. Requiring info after signing in with OpenID makes moot one of the best things about OpenID for website owners. You can lower the barrier to entry for users by letting them use the site as soon as they arrive from their provider.</p>
<p>To that end, Simple Registration should be able to help solve the double signup issue, assuming sites treat the process like Jyte and not like Plaxo. Other OpenID providers have been sharing user&#8217;s profile information, with permission, for some time.</p>
<p>This part of OpenID is important, and it&#8217;s good to see one of the big boys on board. Still, it&#8217;ll be hard to say OpenID has really made it until I can <a href="http://www.webmonkey.com/blog/Dear_Open_ID:_You_Deserve_Better"><strong>sign on</strong> to Yahoo with any OpenID</a>.</p>
<p><strong>See also:</strong></p>
<ul>
<li><a href="http://www.webmonkey.com/blog/OpenID_Is_HereDOT_Too_Bad_Users_Can_t_Figure_Out_How_It_Works">OpenID Is Here. Too Bad Users Can&#8217;t Figure Out How It Works</a></li>
<li><a href="http://www.webmonkey.com/blog/Yahoo_Users_Befuddled_by_OpenID">Yahoo Users Befuddled by OpenID</a></li>
<li><a href="http://www.webmonkey.com/blog/Yahoo_Users__You_ve_Got_OpenID">Yahoo Users, You&#8217;ve Got OpenID</a></li>
</ul>
<div id='linker_widget' class='contextly-widget'></div>]]></content:encoded>
            <wfw:commentRss>http://www.webmonkey.com/2008/11/yahoo_improves_its_openid_support/feed/</wfw:commentRss>
        <slash:comments>0</slash:comments>

        
    </item>
    </channel>
</rss>