<?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>plebeosaur.us</title>
	<atom:link href="http://plebeosaur.us/feed/" rel="self" type="application/rss+xml" />
	<link>http://plebeosaur.us</link>
	<description>Steve Stedman rambles on</description>
	<lastBuildDate>Tue, 22 Nov 2011 05:18:24 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Here We Are Again</title>
		<link>http://plebeosaur.us/here-we-are-again/</link>
		<comments>http://plebeosaur.us/here-we-are-again/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 22:08:43 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=115</guid>
		<description><![CDATA[Welcome back friends. This is the third season of You Are Here (with Safari on iPhone) and this series doesn&#8217;t look like it&#8217;s letting up any time soon. :)
Since our last installment in February 2010, it seems that the Google Maps API has shifted yet again and bricked our demo. No worries. Thanks to some [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome back friends. This is the third season of <a href="/you-are-here-with-safari-on-iphone/">You Are Here (with Safari on iPhone)</a> and this series doesn&#8217;t look like it&#8217;s letting up any time soon. :)</p>
<p>Since our <a href="/iphone-safari-geolocation-map-update/">last installment in February 2010</a>, it seems that the Google Maps API has shifted yet again and bricked our demo. No worries. Thanks to <a href="/iphone-safari-geolocation-map-update/#comment-540">some great detective work by @Chris</a>, we can get the old code up-and-running again by adding &#8220;optimized:false&#8221; to our Maps API Marker options. This will prevent Google from optimizing (encoding) the Marker image and allow the Marker to be rendered as an image tag as it did in our first demo. Therefore we can revert to our original CSS selector and call it a day.</p>
<p>But why leave it at that? Let&#8217;s take this to the next level and tweak that pulsating marker so it looks even more realistic.</p>
<p><span id="more-115"></span></p>
<h3>Blue dot special</h3>
<p>First off, let&#8217;s start with a fresh new marker&mdash;one that just encompasses that blue aqua icon at the center of the pulsating ring. I basically just recreated the blue iPhone Maps location icon in Fireworks and exported it as a PNG with alpha transparency. After uploading the image to the server, I also updated the Marker options to reflect the new file name and image size (17px square).</p>
<h3>Great rings of Neptune, Batman!</h3>
<p>Next up, the pulsating ring. Back in April 2010, Zachary Johnson posted a piece on <a href="http://www.zachstronaut.com/posts/2010/04/27/pure-css-map-markers.html" title="Pure CSS Map Markers - zachstronaut">Pure CSS Map Markers</a> that inspired me to go 100% CSS on the rings. It just took me this long to get around to it.</p>
<p>To start, we&#8217;ll make a circle out of a square div by adding mega border-radius to it. In our case, we&#8217;ll have a 51px square (three times the blue icon&#8217;s height/width) with border-radius set to 51px as well. Now that we have our circle, let&#8217;s style it to look more like that iPhone Maps ring. Look closely at that ring and notice that its not a blue ring but a white ring with blue blurring the edges. We can achieve that effect by adding a 1px solid white border to our circle and then&mdash;and here&#8217;s the magic&mdash;applying multiple layers of blue inner and outer box-shadows in the same CSS declaration.</p>

<div class="wp_syntax"><div class="code"><pre class="css"><ol><li class="li1"><div class="de1">box-shadow<span class="sy0">:</span></div></li><li class="li2"><div class="de2">  <span class="kw2">inset</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span>,</div></li><li class="li1"><div class="de1">  <span class="kw2">inset</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span>,</div></li><li class="li2"><div class="de2">  <span class="kw2">inset</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span>,</div></li><li class="li1"><div class="de1">  <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span>,</div></li><li class="li2"><div class="de2">  <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span>,</div></li><li class="li1"><div class="de1">  <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re0">#06f</span><span class="sy0">;</span></div></li></ol></pre></div></div>

<p>Who knew you could do such a thing? I didn&#8217;t, until I tried it. The ability to use standard drop shadows and inset shadows in the same declaration is amazing enough, but that you can layer them to achieve deeper color (as you would in Photoshop with multiply layers) is astonishing. And we&#8217;ll need this color depth when we animate our ring. Without this color depth, the blue would appear too faint as its opacity drops to zero.</p>
<p>So, all that remains in our styling exercise is to animate our awesome ring. Going back to our keyframes, let&#8217;s start from an initial scale of 25% and opacity of 100%. Then let&#8217;s progress at the 95% mark to 130% scaling and 0% opacity. And lastly, let&#8217;s return to scale of 25% with the 0% opacity to reset everything for the next iteration. That&#8217;s pretty much it&mdash;aside from some refactoring to take advantage of animation shorthand and the addition of Mozilla&#8217;s CSS prefix,</p>
<p>Okidoki. So we have our new blue icon marker and we have a new pulsating ring, but they&#8217;re not connected. We need to dig into the Google Maps DOM and grab our marker&#8217;s wrapper element to apply the ring styling (so that the ring will pulsate out from the marker image). Fortunately, there&#8217;s a div that surrounds our marker image that meets our needs. Curiously, there are actually two almost identical div/marker-img combos to play with. We can actually sacrifice one for our sneaky purposes. The second combo has a div with the Marker title we added in the options so we can conveniently use that as our ring&#8217;s CSS selector. Yay! But since that div is scaling up and down, the inner bluedot.png img tag scales up and down too, which isn&#8217;t what we want. No problemo! Display:none that image and let the first set&#8217;s bluedot image shine through. </p>
<p>Add a few more margin tweaks for high DPI devices and we&#8217;re done styling our realistic pulsating marker. Check it out on the <a href="/etc/map/">demo page</a>.</p>
<h3>Am I really here?</h3>
<p>Commenter @John also mentioned some <a href="/you-are-here-with-safari-on-iphone/#comment-545">issues with geolocation accuracy</a> thay @Ziyad was <a href="/you-are-here-with-safari-on-iphone/#comment-545">kind enough to address</a>. Since we&#8217;re already under the hood, let&#8217;s roll those modifications into our code as well.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><ol><li class="li1"><div class="de1">navigator.<span class="me1">geolocation</span>.<span class="me1">watchPosition</span><span class="br0">&#40;</span> </div></li><li class="li2"><div class="de2">  displayLocation<span class="sy0">,</span></div></li><li class="li1"><div class="de1">  handleError<span class="sy0">,</span></div></li><li class="li2"><div class="de2">  <span class="br0">&#123;</span> </div></li><li class="li1"><div class="de1">    enableHighAccuracy<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span> </div></li><li class="li2"><div class="de2">    maximumAge<span class="sy0">:</span> <span class="nu0">30000</span><span class="sy0">,</span> </div></li><li class="li1"><div class="de1">    timeout<span class="sy0">:</span> <span class="nu0">27000</span> </div></li><li class="li2"><div class="de2">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div></div>

<h3>Wait, what version is this?</h3>
<p>This demo has had a history of API version issues so it comes as some relief to find Google providing support for versioning. I&#8217;m not sure if this is a recent development, but you can actually <a href="http://code.google.com/apis/maps/documentation/javascript/basics.html#Versioning" title="Google Maps Javascript API V3 Basics">specify the Maps API version</a> that your code works with. So now when our code breaks, just go back and request the API script version that was running back when things were good.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><ol><li class="li1"><div class="de1">http<span class="sy0">:</span><span class="co1">//maps.googleapis.com/maps/api/js?v=3.4&amp;sensor=true_or_false</span></div></li></ol></pre></div></div>

<h4>Git it while it&#8217;s hot!</h4>
<p>Speaking of versioning, the <a href="http://github.com/stedman/GeoLocateMe">code for this demo is now up on GitHub</a>. Go grab it from there, fork it, enjoy.</p>
<p class="summation"><a href="/etc/map/" class="btn big primary">demo</a> <a href="http://github.com/stedman/GeoLocateMe" class="btn big primary">code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/here-we-are-again/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>ExpressionEngine Plugin: PipeBomb</title>
		<link>http://plebeosaur.us/expressionengine-plugin-pipebomb/</link>
		<comments>http://plebeosaur.us/expressionengine-plugin-pipebomb/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 21:15:52 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=102</guid>
		<description><![CDATA[This plugin was a quick response to a need to add multi-language capability to a module that I didn&#8217;t have time nor desire to hack into.
My client&#8217;s site was already using Mark Huot&#8217;s Simple Translator extension to provide multi-language capability so, for every weblog entry, we needed to create a custom field for each language [...]]]></description>
			<content:encoded><![CDATA[<p>This plugin was a quick response to a need to add multi-language capability to a module that I didn&#8217;t have time nor desire to hack into.</p>
<p>My client&#8217;s site was already using Mark Huot&#8217;s <a href="http://expressionengine.com/forums/viewthread/51959/" title="Simple Translator (formerly known as Another Language Switcher)">Simple Translator</a> extension to provide multi-language capability so, for every weblog entry, we needed to create a custom field for each language (with the language&#8217;s suffix appended&mdash;e.g., body, body_es, body_pg). All was fine until I came across an interesting bugaboo presented by the <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-polls/" title="LG Polls - AJAX powered EE user polling">LG Polls</a> module (another beautiful piece of work from Leevi Graham). The module handled multiple custom fields for the poll question just fine, but for the poll details (the answers) there was to be none of that. </p>
<p><span id="more-102"></span></p>
<p>Fortunately, the client agreed to a rather unorthodox solution: rather than creating three custom fields, we&#8217;d use just one custom field with three fields piped inside&mdash;e.g., &#8220;English answer|Spanish answer|Portuguese answer&#8221;. Then in the template, we&#8217;d insert the PipeBomb plugin where we needed to parse those fields. In the following example, we switch between the three language responses based upon a match from EE&#8217;s &#8220;lang&#8221; cookie:</p>

<div class="wp_syntax"><div class="code"><pre><ol><li class="li1"><div class="de1">{poll_answers}</div></li><li class="li2"><div class="de2">&lt;li class='a-{answer_count}'&gt;</div></li><li class="li1"><div class="de1">	&lt;label for=&quot;lg-polls-answer-{answer_id}&quot;&gt;{answer_input} &lt;span class=&quot;answer&quot;&gt;{exp:pipebomb switch=&quot;lang&quot; switch_type=&quot;cookie&quot; cases=&quot;<PIPE>_es<PIPE>_pg&quot; values=&quot;{answer}&quot;}&lt;/span&gt;&lt;/label&gt;</div></li><li class="li2"><div class="de2">&lt;/li&gt;</div></li><li class="li1"><div class="de1">{/poll_answers}</div></li></ol></pre></div></div>

<p>Of course, this plugin has more uses:</p>

<div class="wp_syntax"><div class="code"><pre><ol><li class="li1"><div class="de1">{exp:pipebomb switch=&quot;{dynamic_variable}&quot; cases=&quot;1<PIPE>2<PIPE>3<PIPE>4&quot; values=&quot;Number One<PIPE>Number Two<PIPE>Number Three<PIPE>Number Four&quot;}</div></li></ol></pre></div></div>

<p>And if you want to get really creative, you can loop and pipe a whole HTML fragment between categories tags:</p>

<div class="wp_syntax"><div class="code"><pre><ol><li class="li1"><div class="de1">{exp:pipebomb switch=&quot;{simple_language}&quot; cases=&quot;English<PIPE>Español<PIPE>Português&quot; values=&quot;{categories backspace='1'}&lt;h3&gt;&lt;a href='{path='articles'}'&gt;{category_name}&lt;/a&gt;&lt;/h3&gt;<PIPE>{/categories}&quot;}</div></li></ol></pre></div></div>

<p>For the curious, the PipeBomb name evolved from the way it works under the covers: it basically explodes piped values and plucks those values out of the array for display based upon the switch/case parameters.</p>
<p>NOTE: Just as I went to publish, I noticed that a very similar plugin called <a href="http://expressionengine.com/forums/viewthread/145805/" title="Plugin: Switchee">Switchee</a> was recently released. I believe the two plugins are suitably different to coexist. PipeBomb is a small, crude device meant for quick, dirty jobs whereas Switchee is more of an industrial-strength switch/case utility.</p>
<p><a href="http://expressionengine.com/forums/viewthread/147377/">Download PipeBomb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/expressionengine-plugin-pipebomb/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>iPhone Safari Geolocation Map Update</title>
		<link>http://plebeosaur.us/iphone-safari-geolocation-map-update/</link>
		<comments>http://plebeosaur.us/iphone-safari-geolocation-map-update/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 11:21:26 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=82</guid>
		<description><![CDATA[(original post: You Are Here (with Safari on iPhone))
When Google updated their Maps JavaScript API V3 last summer, they apparently did a bit more than change the way our iPhone map marker image was displayed (now as a background image rather than an image element). When I noticed the API change, I modified the CSS [...]]]></description>
			<content:encoded><![CDATA[<p>(<a href="http://plebeosaur.us/you-are-here-with-safari-on-iphone/">original post: You Are Here (with Safari on iPhone)</a>)</p>
<p>When Google updated their <a href="http://code.google.com/apis/maps/documentation/v3/">Maps JavaScript API V3</a> last summer, they apparently did a bit more than change the way our <a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3">iPhone map</a> marker image was displayed (now as a background image rather than an image element). When I noticed the API change, I modified the CSS selector to hunt down the new marker: <code>#map_canvas div[style*="blue_dot_circle.png"]</code>. This allowed us to apply the CSS animation to the marker easily enough but it created another problem.</p>
<p><span id="more-82"></span></p>
<div class="apps"><a href="http://plebeosaur.us/0/up/2010/02/gmap-markers.png"><img src="http://plebeosaur.us/0/up/2010/02/gmap-markers-300x211.png" alt="Google Maps marker layers" title="Google Maps marker layers in Firefox 3.6" width="300" height="211" /></a></div>
<p>Since Google also inserted a phantom layer for the cursor pointer and title attribute that shares the same image background as our target marker, our new CSS selector actually applies animations to 2 markers; including one not normally seen because its opacity is set to 0.01. Worse yet, the primary marker seems to be shifted off the phantom marker by -10px top and left&mdash;but only on mobile Safari (the markers are centered just fine in Firefox 3.6 as you can see in the Firebug screenshot above). This created the ungainly double pulsing markers that some of you noted in the comments.</p>
<p>To kill the phantom, I tried a few parameter changes in the Maps script but nothing seems to stop the phantom (by the way, it&#8217;s not a shadow&mdash;I already turned those off). So it seems the only recourse is to de-animate the phantom marker layer with another CSS hack. Remember that the phantom layer that had the cursor and title attribute in it? <del datetime="2010-02-25T18:35:19+00:00">We can use one of those attributes in another selector to isolate the phantom and remove the animation: <code>#map_canvas div[title="I might be here"] {-webkit-animation-name: '';}</code> (just make sure you match the title in this selector with the title you provide in the Maps script).</del> <ins datetime="2010-02-25T18:35:19+00:00">We can use that information to enhance our selector to exclude the phantom layer (the one with a title attribute) from the animation with a little negation pseudo-class action: <code>#map_canvas div[style*="blue_dot_circle.png"]:not([title])</code> (for more info on CSS selectors, check out <a href="http://www.smashingmagazine.com/2009/08/17/taming-advanced-css-selectors/" title="Taming Advanced CSS Selectors - Smashing Magazine">Taming Advanced CSS Selectors</a>).</ins></p>
<p>Here&#8217;s the new complete CSS stylesheet for <a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3">our Map app</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="css"><ol><li class="li1"><div class="de1"><span class="co1">@-webkit-keyframes pulse {</span></div></li><li class="li2"><div class="de2">  <span class="re3"><span class="nu0">0</span>%</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    opacity<span class="sy0">:</span> <span class="nu0">1</span><span class="re1">.<span class="nu0">0</span></span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    -webkit-transform<span class="sy0">:</span> scale<span class="br0">&#40;</span><span class="nu0">1</span><span class="re1">.<span class="nu0">05</span></span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">  <span class="re3"><span class="nu0">40</span>%</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    opacity<span class="sy0">:</span> <span class="nu0">0</span><span class="re1">.<span class="nu0">25</span></span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    -webkit-transform<span class="sy0">:</span> scale<span class="br0">&#40;</span><span class="nu0">0</span><span class="re1">.<span class="nu0">85</span></span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">  <span class="re3"><span class="nu0">100</span>%</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    opacity<span class="sy0">:</span> <span class="nu0">1</span><span class="re1">.<span class="nu0">0</span></span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    -webkit-transform<span class="sy0">:</span> scale<span class="br0">&#40;</span><span class="nu0">1</span><span class="re1">.<span class="nu0">05</span></span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="re0">#map_canvas</span> div<span class="br0">&#91;</span>style*=<span class="st0">&quot;blue_dot_circle.png&quot;</span><span class="br0">&#93;</span><span class="re2">:not</span><span class="br0">&#40;</span><span class="br0">&#91;</span>title<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">  -webkit-animation-name<span class="sy0">:</span> pulse<span class="sy0">;</span></div></li><li class="li1"><div class="de1">  -webkit-animation-duration<span class="sy0">:</span> 2s<span class="sy0">;</span></div></li><li class="li2"><div class="de2">  -webkit-animation-iteration-count<span class="sy0">:</span> infinite<span class="sy0">;</span></div></li><li class="li1"><div class="de1">  -webkit-animation-timing-function<span class="sy0">:</span> ease-in-out<span class="sy0">;</span></div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li></ol></pre></div></div>

<p>Note that I also added scaling to our pulse transformations in this round of edits to swell and shrink the circle just as in the native iPhone map app. </p>
<p>As always, thanks for your comments and please let me know if you&#8217;ve found a better way to rid the phantom marker.</p>
<div class="notice">
<h4>Update <small>[April 2, 2010]</small></h4>
<p>Make sure you also download the <a href="http://plebeosaur.us/etc/map/blue_dot_circle.png">blue marker image</a> and place it in the same directory as your map page. Sorry, I should have been more clear about that.</p>
</div>
<div class="notice">
<h4>Update <small>[October 31, 2011]</small></h4>
<p>See <a href="/here-we-are-again/">Here We Are Again</a> for the latest update in this saga!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/iphone-safari-geolocation-map-update/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Austin GeekNite Info</title>
		<link>http://plebeosaur.us/austin-geeknite-info/</link>
		<comments>http://plebeosaur.us/austin-geeknite-info/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 21:40:52 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=65</guid>
		<description><![CDATA[Over the holiday break I finally got around to creating a little something I&#8217;ve been wanting for awhile: a calendar of the web community events in Austin. Check it out at austin.geeknite.info (and then come back for the rest of story if you wish).

Austin GeekNite Info actually started as a simple spreadsheet of the local [...]]]></description>
			<content:encoded><![CDATA[<p>Over the holiday break I finally got around to creating a little something I&#8217;ve been wanting for awhile: a calendar of the web community events in Austin. Check it out at <a href="http://austin.geeknite.info">austin.geeknite.info</a> (and then come back for the rest of story if you wish).</p>
<p><span id="more-65"></span></p>
<p>Austin GeekNite Info actually started as a simple spreadsheet of the local web groups I regularly attended and their typical meeting nights. But since I&#8217;d also like to know what&#8217;s going on in other communities (and my wife would like to know where I think I&#8217;m going) I started looking at ways to automate the process of adding events to a calendar.</p>
<p>As luck would have it, Google Calendar provides the means to add iCal feeds from other sites to your calendar AND share this newly aggregated event calendar with others. Nice. The wife will be happy. By why stop there? Overwhelmed by the spirit of the season, I grabbed the geeknite.info domain and prepared a simple calendar page to share with the rest of Austin.</p>
<div class="apps"><a href="http://austin.geeknite.info"><img src="/0/img/scrn_austin_geeknite.png" alt="screenshot of Austin GeekNite Info" /></a></div>
<h3>Initial release</h3>
<p>Adding and editing iCal feeds in Google Calendar can get a bit unwieldy so this first version of GeekNite applies Tony Hirst&#8217;s <a href="http://ouseful.wordpress.com/2008/12/06/merging-several-calendar-ical-feeds-with-yahoo-pipes/trackback/">Delicious Pipes solution for managing iCal feeds</a>. It&#8217;s a pretty slick fix for getting around Google Calendar&#8217;s limitations.</p>
<p>Basically, we&#8217;re manually <a href="http://delicious.com/geeknite">collecting iCal feeds</a> from around the Austin tech community on Delicious.com. We then massage the <a href="feed://feeds.delicious.com/v2/rss/geeknite/iCal+Austin?count=30">RSS feed from that Delicious list</a> into an <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=30715df53cb2c39990b9ebe2b8a0c190">iCal feed</a> with Yahoo! Pipes. Google Calendar happily chomps on that iCal feed and spits out a pretty calendar that can be embedded in any HTML page with a snippet of iframe code.</p>
<p>We end up with a decent calendar that can be viewed in a few different ways (weekly, monthly, agenda). Clicking on an event brings up a bubble with more details and a link to add the event to your own calendar. Nothing too fancy, but useful.</p>
<h3>Next steps</h3>
<ul>
<li>I had to manually enter some dates (e.g, Ignite Austin). That&#8217;s something that I&#8217;d like to get around in future iterations. It&#8217;s 2010 folks and time for y&#8217;all to add semantic mojo (in the form of iCal or vCalendar microformats) to your sites. Perhaps that&#8217;ll be one of my base requirements: iCal or no-cal.</li>
<li>The whole Delicious Pipes layer is a temporary hack to get this rolling. I&#8217;m guessing there&#8217;s a way to sniff out all the local web event iCal feeds sans spam/noise but I just haven&#8217;t looked into it that much yet.</li>
<li>As long as I&#8217;m at it, I&#8217;d like to break from Google Calendar as well. It&#8217;s a nice starting point and all, but much too limiting. I&#8217;d like to customize the results a bit more to include more information (e.g., group size, number of past meetings) and to format for iPhones and such.</li>
</ul>
<p>So there it is, <a href="http://austin.geeknite.info">Austin.GeekNite.Info</a>. Let me know what you think and how we can improve this little app.</p>
<h3>Update</h3>
<p>Shortly after I wrote this, <a href="http://twitter.com/trif3cta">Judd Lyon</a> told me about a couple of other Austin web tech calendars already out in the wild: <a href="http://austin.garysguide.org/events/business">GarysGuide</a> and <a href="http://door64.com/event">Door64</a> (I really need to check with him before embarking on new projects).</p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/austin-geeknite-info/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Are Here (with Safari on iPhone)</title>
		<link>http://plebeosaur.us/you-are-here-with-safari-on-iphone/</link>
		<comments>http://plebeosaur.us/you-are-here-with-safari-on-iphone/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 19:21:33 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=36</guid>
		<description><![CDATA[
Update [October 31, 2011]
See Here We Are Again for the latest update in this saga!

Since Apple announced the iPhone OS 3.0 update at WWDC a few weeks ago, I&#8217;ve been eagerly anticipating the addition of location services to Safari (Webkit).

Until now, providing an iPhone 3G user with a map and an indicator of their current [...]]]></description>
			<content:encoded><![CDATA[<div class="notice">
<h4>Update <small>[October 31, 2011]</small></h4>
<p>See <a href="/here-we-are-again/">Here We Are Again</a> for the latest update in this saga!</p>
</div>
<p>Since Apple announced the <a href="http://www.apple.com/iphone/softwareupdate/" title="Apple - iPhone - New features in the iPhone 3.0 Software Update.">iPhone OS 3.0 update</a> at WWDC a few weeks ago, I&#8217;ve been eagerly anticipating the addition of location services to Safari (Webkit).</p>
<div class="apps"><img title="Safari on iPhone" src="/0/icn/iSafari.png" alt="Safari on iPhone" /></div>
<p>Until now, providing an iPhone 3G user with a map and an indicator of their current position required building a native iPhone application in Objective-C and getting approval from Apple to distribute said app via the App Store. Not fun.</p>
<p><span id="more-36"></span></p>
<p>Well now that OS 3.0 is out, we can take advantage of Safari&#8217;s newly baked-in geolocation services and some other niceness to do the very same thing. (<a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3">jump to the map</a>)</p>
<h3>Native Geolocation</h3>
<p>Safari now gives us <code>navigator.geolocation</code> from the <a href="http://dev.w3.org/geo/api/spec-source.html" title="Geolocation API Specification">W3C Geolocation API Draft Spec</a> and all the magic that goes with it: getCurrentPosition (one time retrieval of location), watchPosition (continuously updated location), and clearWatch (stop watchPosition). (If you&#8217;re browsing with iPhone, Android, or Firefox 3.5 right now, take a peak at <a href="/etc/map/location.html">your raw geolocation info</a>.)</p>
<p>We want the location marker to follow us around, so we&#8217;ll choose watchPosition. The following provides the basic format we&#8217;ll follow, though the final code will be different as we add the Google Maps juice:</p>

<div class="wp_syntax"><div class="code"><pre><ol><li class="li1"><div class="de1">function displayLocation(position){</div></li><li class="li2"><div class="de2">  var latitude = position.coords.latitude<SEMI></div></li><li class="li1"><div class="de1">  var longitude = position.coords.longitude<SEMI></div></li><li class="li2"><div class="de2">  // do something with this new information</div></li><li class="li1"><div class="de1">}</div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">function handleError(error){</div></li><li class="li2"><div class="de2">  switch (error.code){</div></li><li class="li1"><div class="de1">    case error.PERMISSION_DENIED:</div></li><li class="li2"><div class="de2">      alert('Sorry. Permission to find your location has been denied.')<SEMI></div></li><li class="li1"><div class="de1">      break<SEMI></div></li><li class="li2"><div class="de2">    case error.POSITION_UNAVAILABLE:</div></li><li class="li1"><div class="de1">      alert('Sorry. Position unavailable.')<SEMI></div></li><li class="li2"><div class="de2">      break<SEMI></div></li><li class="li1"><div class="de1">    default:</div></li><li class="li2"><div class="de2">      alert(error.code)<SEMI></div></li><li class="li1"><div class="de1">  }</div></li><li class="li2"><div class="de2">}</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">navigator.geolocation.watchPosition(displayLocation, handleError)<SEMI></div></li></ol></pre></div></div>

<p>When this code is run in an iPhone 3G with OS 3.0, the browser asks for permission to use your location. If permission is granted, the displayLocation function is called; if not, the handleError function is called. Now let&#8217;s do something useful with this location information.</p>
<div class="apps"><img src="/0/img/map-permission.jpg" alt="iPhone location permission" /></div>
<h3>Google Maps</h3>
<p><a href="http://code.google.com/apis/maps/documentation/v3/" title="The Google Maps API V3 - Google Maps JavaScript API V3 - Google Code">Google Maps</a> released a welcome upgrade to their mapping API this past spring. With the still developing API v3, they tossed out the API key, rewrote the code, improved the namespacing, and much more. In the interest of playing with all things new, we&#8217;ll use this version of Google Maps. And in the interesting of keeping the focus on the new geolocation shizzle, we&#8217;ll skip the in-depth Google Maps discussion and just cover some abstract goals.</p>
<p>Initially we&#8217;ll center the map somewhere in downtown Austin, Texas. Then, when our previously mentioned displayLocation function gets called, we&#8217;ll add a marker and re-center the map on that marker&mdash;just like the big kids do with their fancy native apps.</p>
<p>Inside displayLocation, we&#8217;ll create the marker just once and then update its position on subsequent calls. Every time the iPhone changes location, the marker moves to follow. (extra credit: if you want to create a breadcrumb trail, take out the if/else stuff to create a trail of new markers on each iteration)</p>
<p>Lastly, we add an onload attribute to the body element to invoke our geolocation and Google Maps magic after the page loads. We now have a cool mobile map that tracks your position as you&#8217;re moving.</p>
<div class="apps"><a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3"><img src="/0/img/map-location.png" alt="iPhone location marker" /></a></div>
<h3>CSS3 Animation</h3>
<p>We could certainly stop here and pat ourselves on the back, but let&#8217;s apply one last bit of polish. If you look at the native iPhone Map app, you&#8217;ll notice that the blue location icon pulses in and out to keep your attention. Hmmm. Our current location marker is lovely PNG image with alpha transparency that smoothly overlays the background map but it doesn&#8217;t pulse. Unfortunately, we can&#8217;t animate PNGs. We could fade the image in and out with some more JavaScript coding, but let&#8217;s take a look at a better solution, compliments of the new Safari.</p>
<p>When the CSS animation draft was announced, it sounded rather odd to add behaviors (JavaScript&#8217;s fort&eacute;) to a styling spec (CSS). But given our current problem, we start to see the wisdom. We can select and animate the location marker with CSS3.</p>
<p>As demonstrated by <a href="http://webkit.org/blog/324/css-animation-2/" title="Surfin&#8217; Safari - Blog Archive  &raquo; CSS Animation">Surfin Safari</a>, first we describe the effect with <a href="http://developer.apple.com/documentation/appleapplications/Reference/SafariCSSRef/Articles/OtherStandardCSS3Features.html#//apple_ref/doc/uid/TP40007601-SW4" title="Safari CSS Reference: Supported CSS Rules">@-webkit-keyframes</a>, then we select the marker element from the DOM and apply the animation with <a href="http://developer.apple.com/documentation/appleapplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_animation" title="Safari CSS Reference: Supported CSS Properties">-webkit-animation</a>:</p>
<div class="notice">
<h4>Update <small>[July 1, 2009]</small></h4>
<p>Google just changed their API so that our custom marker image (blue_dot_circle.png) is now a background-image for a div rather than a separate image element (img).</p>
<p>Therefore, our CSS selector needs to be modified so that we can pulse the right element. A quick change from <code>#map_canvas img[src="blue_dot_circle.png"]</code> to <code>#map_canvas div[style*="blue_dot_circle.png"]</code> in the code below solves the problem.</p>
</div>

<div class="wp_syntax"><div class="code"><pre class="css"><ol><li class="li1"><div class="de1"><span class="co1">@-webkit-keyframes pulse {</span></div></li><li class="li2"><div class="de2">  <span class="re3"><span class="nu0">0</span>%</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    opacity<span class="sy0">:</span> <span class="nu0">1</span><span class="re1">.<span class="nu0">0</span></span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">  <span class="re3"><span class="nu0">40</span>%</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">    opacity<span class="sy0">:</span> <span class="nu0">0</span><span class="re1">.<span class="nu0">25</span></span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">  <span class="re3"><span class="nu0">100</span>%</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    opacity<span class="sy0">:</span> <span class="nu0">1</span><span class="re1">.<span class="nu0">0</span></span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li2"><div class="de2"><span class="re0">#map_canvas</span> div<span class="br0">&#91;</span>style*=<span class="st0">&quot;blue_dot_circle.png&quot;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">  -webkit-animation-name<span class="sy0">:</span> pulse<span class="sy0">;</span></div></li><li class="li2"><div class="de2">  -webkit-animation-duration<span class="sy0">:</span> 2s<span class="sy0">;</span></div></li><li class="li1"><div class="de1">  -webkit-animation-iteration-count<span class="sy0">:</span> infinite<span class="sy0">;</span></div></li><li class="li2"><div class="de2">  -webkit-animation-timing-function<span class="sy0">:</span> ease-in-out<span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div></div>

<p>It&#8217;s a simple solution that provides the effect we need without the added overhead of JavaScript.</p>
<p>Feel free to <a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3">view this map</a> with your normal browser, you&#8217;ll get a plain old map of Austin&mdash;not much more. For the real show, open it in iPhone 3G and find your current location. Then start moving.</p>
<p>When you get back to the desk, crack open the source code to see how it was all brought together.</p>
<h3>Next</h3>
<p>So there it is: a breezy introduction to what is possible with the iPhone&#8217;s new Safari geolocation powers and Google Maps. We certainly don&#8217;t have to stop here. We haven&#8217;t even mentioned that other mobile devices have or will have these very same powers. That web developers now have direct access to these powers means that we can expect a torrent of location-aware innovation.</p>
<p>See you at the <a href="http://www.youtube.com/watch?v=oBaiKsYUdvg" title="YouTube - Minority Report Mall Scene">mall</a>.</p>
<h3>Reference Links</h3>
<ul>
<li><a href="http://plebeosaur.us/etc/map/" title="Mobile Webkit Geolocation + Google Maps v3">our map</a></li>
<li><a href="http://code.google.com/apis/maps/documentation/v3/">The Google Maps API V3</a></li>
<li><a href="http://dev.w3.org/geo/api/spec-source.html">W3C Geolocation API Specification (Draft)</a></li>
<li><a href="http://developer.apple.com/documentation/appleapplications/Reference/SafariCSSRef/Introduction.html">Safari CSS Reference</a></li>
</ul>
<div class="notice">
<h4>Update <small>[February 24, 2010]</small></h4>
<p>See <a href="http://plebeosaur.us/iphone-safari-geolocation-map-update/">iPhone Safari Geolocation Map Update</a> for a fix for the phantom marker issue noted in the comments.</p>
</div>
<div class="notice">
<h4>Update <small>[April 2, 2010]</small></h4>
<p>Make sure you also download the <a href="http://plebeosaur.us/etc/map/blue_dot_circle.png">blue marker image</a> and place it in the same directory as your map page. Sorry, I should have been more clear about that.</p>
</div>
<div class="notice">
<h4>Update <small>[October 31, 2011]</small></h4>
<p>See <a href="/here-we-are-again/">Here We Are Again</a> for the latest update in this saga!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/you-are-here-with-safari-on-iphone/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>IE Is for Squares</title>
		<link>http://plebeosaur.us/ie-is-for-squares/</link>
		<comments>http://plebeosaur.us/ie-is-for-squares/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 20:48:49 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.us/?p=17</guid>
		<description><![CDATA[After taking a peek beneath the covers of the beautiful WordPress 2.7 admin interface and reading John Allsopp&#8217;s Shiny Happy Buttons article on 24ways.org, it&#8217;s become abundantly clear that the next great web design era isn&#8217;t going to wait around for Internet Explorer. The future is going to be a bit more rounded and IE [...]]]></description>
			<content:encoded><![CDATA[<p>After taking a peek beneath the covers of the beautiful <a href="http://wordpress.org/development/2008/12/coltrane/">WordPress 2.7 admin interface</a> and reading John Allsopp&#8217;s <a href="http://24ways.org/2008/shiny-happy-buttons">Shiny Happy Buttons</a> article on 24ways.org, it&#8217;s become abundantly clear that the next great web design era isn&#8217;t going to wait around for Internet Explorer. The future is going to be a bit more rounded and IE will be, well, <strong>square</strong>.</p>
<p><span id="more-17"></span></p>
<p>For far too long, web designers have had to deal with a lack of real-world design tools in CSS. In their place, we&#8217;ve used kludgy HTML, images, and even JavaScript to accomplish basic visual treatments such as transparency, shadows, gradients, and, yes, rounded corners. Every solution using this old toolset calls for an uneasy compromise of appearance vs. semantic markup vs. development time vs. file count/size.</p>
<p>Why can&#8217;t we just ask the browser to provide a 5px radius in CSS in whatever color/width/shape we want and get on with our day? We can.</p>
<h3>Welcome Border Radius</h3>
<p>Firefox has supported a border radius property for some time now (<code>-moz-border-radius</code>) and Safari recently came out with their own experimental syntax (<code>-webkit-border-radius</code>). Furthermore, the CSS Working Group recently announced some pretty robust <a href="http://www.css3.info/css-wg-publishes-new-working-draft-of-level-3-backgrounds-and-borders/">support for the border-radius property</a> which means the usually standards-leading Opera should be getting around to roundness soon as well.</p>
<p>Using border-radius today provides <a href="http://lensco.be/2008/09/06/border-radius-a-tale-of-two-browsers/">nice, rounded corners</a> and shaves a ton of development time (no more round-trips to the image editor or nesting HTML for flexible dimension boxes).</p>
<p>The problem, of course, is that 70% gorilla in the corner. So, what about IE? The yet-to-be-released IE8 is finally getting things right with CSS2.1 (a good thing) and moving their proprietary properties into <a href="http://blogs.msdn.com/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx">-ms- vendor specific extensions</a> (also a worthy effort). Yet it doesn&#8217;t look as though the IE team will be tackling border-radius until IE9 (2 years?).</p>
<h3>Progressive Visual Enhancement</h3>
<p>So at this point we have two options when it comes to going all CSS on rounded corners: we can whine and cry about how IE sucks (been done already) and wait for IE to get around to border-radius or we can take <a href="http://en.wikipedia.org/wiki/Progressive_enhancement">progressive</a> <a href="http://www.alistapart.com/articles/progressiveenhancementwithcss">enhancement</a> to the next level.</p>
<p>Let&#8217;s take the latter route. Starting today, let&#8217;s throw out all the crappy, nested HTML; the countless, un-scalable images; and the overly-complicated JavaScript work-arounds. Let&#8217;s start fresh&#8230;</p>
<ol>
<li>Lay a foundation of basic borders&mdash;square, un-adorned, solid borders. Every browser shall see squared edges by default. No problemo.</li>
<li>Then throw in some rounded corners for Firefox and Safari and anyone else that&#8217;d like to join the party. Kewl.</li>
<li>Lastly, add a dash of gradient to Safari as prescribed in <a href="http://24ways.org/2008/shiny-happy-buttons">Shiny Happy Buttons</a>. Brilliant!</li>
</ol>
<p>Sweet. No one gets hurt, the cool kids get the nicest looking stuff, and those <strong>squares</strong> that want to join the cool kids just have to download a free browser. What could be better?</p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/ie-is-for-squares/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fix for Disabled Web Developer CSS Shortcut in Firefox 3</title>
		<link>http://plebeosaur.us/fix-for-disabled-web-developer-css-shortcut-in-firefox-3/</link>
		<comments>http://plebeosaur.us/fix-for-disabled-web-developer-css-shortcut-in-firefox-3/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 21:55:06 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.dev/?p=10</guid>
		<description><![CDATA[It&#8217;s been a couple weeks since I traded in Firefox 2 for Firefox 3 and I&#8217;ve rarely glanced back. Most of my critical extensions have been ported and work fabulously. And what few annoyances that did arise were quickly cleared up with a few hacks to trick FF3 into accepting older extensions. Muzzling the AwesomeBar [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a couple weeks since I traded in Firefox 2 for Firefox 3 and I&#8217;ve rarely glanced back. Most of my critical extensions have been ported and work fabulously. And what few annoyances that did arise were quickly cleared up with a <a href="http://lifehacker.com/355973/make-your-extensions-work-with-the-firefox-3-beta">few hacks to trick FF3 into accepting older extensions.</a> Muzzling the AwesomeBar with <a href="https://addons.mozilla.org/en-US/firefox/addon/6227">oldbar</a> also made things more tolerable.</p>
<p>One irritation defied all my attempts to resolve: disabling CSS via the Web Developer Extension&#8217;s long-standing keyboard shortcut CMD-SHIFT-S. Apparently the Mozilla team decided to Shanghai that shortcut for their History Sidebar. Why?</p>
<p>No matter. Today I found my solution in <a href="http://randomfoo.net/blog/id/4128">Keyconfig for Firefox 3</a>. Now I can create, edit, or disable existing any FF3 shortcut I wish. Buhbye, History Sidebar!</p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/fix-for-disabled-web-developer-css-shortcut-in-firefox-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pointing to MAMP from Virtual Windows</title>
		<link>http://plebeosaur.us/pointing-to-mamp-from-virtual-windows/</link>
		<comments>http://plebeosaur.us/pointing-to-mamp-from-virtual-windows/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 15:45:16 +0000</pubDate>
		<dc:creator>Steve Stedman</dc:creator>
		
		<guid isPermaLink="false">http://plebeosaur.dev/?p=5</guid>
		<description><![CDATA[  
Web development on a Mac is pure joy. There are so many tools that just that make building websites simple and even fun. From the dead-simple MAMP web server setup to the deceptively powerful TextMate editor to the game-changing Firefox browser-cum-editor/tester (with the essential Web Developer, FireBug, and ySlow extensions), it&#8217;s all good [...]]]></description>
			<content:encoded><![CDATA[<div class="apps"><a href="http://mamp.info"><img title="MAMP personal web server" src="/0/icn/MAMP.png" alt="MAMP personal web server" /></a> <a href="http://macromates.com"><img title="TextMate editor" src="/0/icn/TextMate.png" alt="TextMate editor" /></a> <a href="http://getfirefox.com"><img title="Firefox browser" src="/0/icn/Firefox.png" alt="Firefox browser" /></a></div>
<p>Web development on a Mac is pure joy. There are so many tools that just that make building websites simple and even fun. From the dead-simple <a href="http://mamp.info">MAMP</a> web server setup to the deceptively powerful <a href="http://macromates.com/">TextMate</a> editor to the game-changing <a href="http://getfirefox.com">Firefox</a> browser-cum-editor/tester (with the essential <a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer</a>, <a href="https://addons.mozilla.org/en-US/firefox/">FireBug</a>, and <a href="http://developer.yahoo.com/yslow/">ySlow</a> extensions), it&#8217;s all good in Mac land.</p>
<p><span id="more-5"></span></p>
<p>And since Mac went Intel, we can develop like crazed bunnies and test our work in each nasty little flavor of Internet Explorer running in separate virtual Windows environments. Granted, it took a bit of Googling on my part to find out how to point Windows browsers to MAMP. But the two primary solutions are fairly straight forward and work <strong>in most cases</strong>:</p>
<ol>
<li>use the Mac&#8217;s <abbr title="Internet Protocol">IP</abbr> address (e.g., <kbd>192.168.2.2:8888</kbd>)</li>
<li>create and use a hostname
<ol>
<li>open the <code>C:\WINDOWS\system32\drivers\etc\hosts</code> file (in Notepad)</li>
<li>add a line to the bottom with the Mac&#8217;s IP address and desired hostname (e.g., <code>192.168.2.2 mamp</code>) and save</li>
<li>use that hostname (e.g., <kbd>http://mamp:8888</kbd>)</li>
</ol>
</li>
</ol>
<p><strong>In most cases?</strong> Yep. Everything runs fine so long as your apps don&#8217;t reference MAMP&#8217;s default webserver name, <code>localhost:8888</code>. Of course, the popular apps such as <a href="http://expressionengine.com">ExpressionEngine</a> and <a class="app web" href="http://wordpress.org">WordPress</a> do need a base URI—and <code>localhost:8888</code> is it.</p>
<p>Bugger. Windows has it&#8217;s own <code>localhost</code> quite separate from Mac&#8217;s and neither the two shall meet. Accessing MAMP&#8217;s <code>localhost</code> just isn&#8217;t going to happen with Windows&#8217; <code>localhost</code> listening in and intercepting. The only solution is to set up a hostname other than <code>localhost</code> on the Mac side and enter that same name in the Windows <code>host</code> config file.</p>
<p>The gritty, command-line way of changing MAMP&#8217;s hostname from <code>localhost</code> is to make some changes to its <code>httpd.conf</code> file and to muck with <code>dscl</code> (Apple&#8217;s NetInfo replacement). Feel free to Google the specifics, but I personally don&#8217;t want to have to fire up Terminal every time I want to change to another site. Thank goodness for VirtualHostX.</p>
<div class="apps"><a href="http://clickontyler.com/virtualhostx/"><img title="VirtualHostX" src="/0/icn/VirtualHostX.png" alt="VirtualHostX" /></a></div>
<p>My new pal, <a href="http://clickontyler.com/virtualhostx/">VirtualHostX</a>, allows me to create different virtual host names for all my projects. So rather than using the <code>localhost</code> URI, I can create meaningful URI&#8217;s such as <code>newproject.dev</code> and <code>anotherproject.dev</code> with impunity (which makes it superior to the <a href="http://headdress.twinsparc.com">Headdress</a> method of merely assigning new port numbers to <code>localhost</code>). VirtualHostX makes all the changes behind the scenes and even backs up the default settings before making those changes. Sweet!</p>
<p>We&#8217;ve almost achieved web developer inner-peace&#8230; but we need to make one more stop. Let&#8217;s remove that crufty port 8888 bizness (e.g., <code>localhost:8888</code>, <code>myproject.dev:8888</code>). By default, MAMP uses port 8888 to avoid conflicts with OS X&#8217;s built-in web server (which listens to the http default port 80). Since I have no immediate intentions of using OS X&#8217;s built-in server, I immediately changed MAMP&#8217;s default port setting to good ole port 80. From here on out, just enter <code>myproject.dev</code> in any Mac browser and go. Yay. Nirvana.</p>
<p>Now, back to the Windows side. After adding <code>myproject.dev</code> to the Windows <code>host</code> file (e.g., <code>192.168.2.2 myproject.dev</code>), fire up your Windows browser of choice, point it to <code>myproject.dev</code>, and Shazam! Everything works.</p>
]]></content:encoded>
			<wfw:commentRss>http://plebeosaur.us/pointing-to-mamp-from-virtual-windows/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
