<?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"
	>

<channel>
	<title>Boathouse Gym</title>
	<atom:link href="http://gym.boathouseinc.com/entry/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://gym.boathouseinc.com/entry</link>
	<description>The Boathouse Gym, where we study, cultivate, and break-in emerging digital technologies and platforms.</description>
	<pubDate>Thu, 13 Aug 2009 20:59:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>google maps, ebubbles, and links</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2009/08/google-maps-ebubbles-and-links/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2009/08/google-maps-ebubbles-and-links/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 20:50:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/?p=17</guid>
		<description><![CDATA[we at boathouse like the google maps plugin 
ebubbles.  it&#8217;s a great little plugin that allows us to create custom info bubbles for our custom map mashups.
the only problem we were having was that they&#8217;re created in such a way that any links created on the bubbles don&#8217;t work, because the whole bubble is [...]]]></description>
			<content:encoded><![CDATA[<p>we at boathouse like the google maps plugin 
<a  href="http://econym.org.uk/gmap/ebubble.htm" onclick="javascript:pageTracker._trackPageview('/external/econym.org.uk/gmap/ebubble.htm');" >ebubbles</a>.  it&#8217;s a great little plugin that allows us to create custom info bubbles for our custom map mashups.</p>
<p>the only problem we were having was that they&#8217;re created in such a way that any links created on the bubbles don&#8217;t work, because the whole bubble is controlled by a close function.  according to the documentation, </p>
<blockquote><p>In order to minimise strange click-through behaviour, by default the EBubble closes when clicked.</p></blockquote>
<p>this doesn&#8217;t cut it for us.</p>
<p>we needed a solution for this, and a little bit of engineering got us underway.</p>
<p>starting at line 59 in the ebubbles js code, we found this line:</p>
<p><code style="color:#0f0;">GEvent.addDomListener(this.div1,"mousedown", function() {<br />
		  if (!that.noCloseOnClick) that.hide();<br />
          GEvent.trigger(that,"click");<br />
        });</code></p>
<p>after a little bit of playing (firebug&#8217;s 
<a  href="http://getfirebug.com/console.html" onclick="javascript:pageTracker._trackPageview('/external/getfirebug.com/console.html');" >console api</a> is easier than writing alerts), we were able to figure out that if we did a function(e), when we clicked the link the event target would end up being a url.  so we could change our code to this:</p>
<p><code style="color:#0f0;">GEvent.addDomListener(this.div1,"mousedown", function(e) {<br />
		  var firstFour = e.target.toString().substring(0,4);<br />
		  if(firstFour == "http") return;<br />
		  if (!that.noCloseOnClick) that.hide();<br />
          GEvent.trigger(that,"click");<br />
        });</code></p>
<p>adding the<br />
<code style="color:#0f0;">var firstFour = e.target.toString().substring(0,4);<br />
if(firstFour == "http") return;</code></p>
<p>just makes sure that the link actually gets through as a link by checking to see if it&#8217;s a URL.  if it is, we return out of the function without going into the bubble.hide() function.</p>
<p>and the good thing — relative path or no, the target will always return a full path, so the substring of the first 4 characters should always return &#8220;http&#8221;, unless you&#8217;re dealing with some other protocol (but then you can always rewrite the if/then statement to include whatever protocols you want it to).</p>
<p>NOTE:  the mousedown functions grabs this before the click function.  we don&#8217;t need to attach this same check on the click function, but you can always put it in there if it makes you feel safer.</p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2009/08/google-maps-ebubbles-and-links/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jquery, expression engine and google maps</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2009/08/jquery-expression-engine-and-google-maps/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2009/08/jquery-expression-engine-and-google-maps/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 19:23:34 +0000</pubDate>
		<dc:creator>bob budd</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/?p=12</guid>
		<description><![CDATA[Based on a comment i made on a few 
blog posts on the always interesting 
viget, i was asked to relate how i might populate a google map with information from expression engine using jquery.
Expression Engine is great in its ability to dynamically generate xml the same way it generates any other page - you [...]]]></description>
			<content:encoded><![CDATA[<p>Based on a comment i made on a few 
<a  href="http://www.viget.com/inspire/google-maps-jquery-plugin-and-expressionengine/" onclick="javascript:pageTracker._trackPageview('/external/www.viget.com/inspire/google-maps-jquery-plugin-and-expressionengine/');" >blog posts</a> on the always interesting 
<a  href="http://www.viget.com/" onclick="javascript:pageTracker._trackPageview('/external/www.viget.com/');" >viget</a>, i was asked to relate how i might populate a google map with information from expression engine using jquery.</p>
<p>Expression Engine is great in its ability to dynamically generate xml the same way it generates any other page - you call for it, and it generates it. When you create a new template the template type dropdown gives you the option of xml. The code for generating that page uses the same syntax as generating any other page:</p>
<p><code style="color:#0f0;"><br />
&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;network&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{exp:weblog:entries weblog="my_weblog" sort="asc"}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if place_lat &#038;&#038; place_long }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;place&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;home&gt;{is_home}&lt;/home&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;latitude&gt;{place_lat}&lt;/latitude&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;longitude&gt;{place_long}&lt;/longitude&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;place_loc&gt;{place_city}&lt;/place_loc&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;place_name&gt;{place_title}&lt;/place_name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/place&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{/if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{/exp:weblog:entries}<br />
&lt;/network&gt;<br />
</code></p>
<p>Basically, what this is doing is making sure that the latitude and longitude are set (we have entries for the coordinates in the form field with the location of a good address geocoder in the caption, so the client does not need to wonder how to get those), then filling in all the other information as it&#8217;s needed using the regular EE syntax.</p>
<p>We could be using the GClientGeocoder option baked into google maps, but it&#8217;s a little fussy sometimes and we&#8217;re looking for the best solution. </p>
<p>So now that EE is giving us a dynamically generated XML file, we&#8217;re moving on to our google maps with jquery. I&#8217;m assuming we all know how to call the google maps api and jquery into our page, so i&#8217;ll skip over that.</p>
<p>Just as a warning, i&#8217;m a big fan of namespacing my scripts. This (obviously) doesn&#8217;t need to be done, but it helps me keep my functions distinct and use variables throughout that might interfere with other scripts. I haven&#8217;t detailed how i set it up, but Dustin Diaz has a 
<a  href="http://www.dustindiaz.com/namespace-your-javascript/" onclick="javascript:pageTracker._trackPageview('/external/www.dustindiaz.com/namespace-your-javascript/');" >great tutorial</a> if you really want to know.</p>
<p>The first part is the easy part - setting up the maps API.</p>
<p><code style="color:#0f0;"><br />
BH.maps.load = function () {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map = new GMap2(document.getElementById("map"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setCenter(new GLatLng(0,0),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var bounds = new GLatLngBounds( );<br />
</code></p>
<p>This is the obvious stuff, i would think. the setting a center just allows the map to work. Don&#8217;t worry, we&#8217;ll recenter soon (hence the GLatLngBounds)</p>
<p>Now we can go ahead and create different icons for different uses. If you look back, the first item in
<place> is <is_home>. Ours is a simple boolean set through a dropdown in the form field, though it can be used multiple ways to generate as many types of icons as are needed.</p>
<p><code style="color:#0f0;"><br />
var greenIcon = new GIcon(G_DEFAULT_ICON);<br />
greenIcon.image = "/EE_Global/img/icons/green_tack.png";<br />
greenIcon.iconSize = new GSize(17,46);<br />
greenIcon.shadow = "/EE_Global/img/icons/tack_shadow.png";<br />
greenIcon.shadowSize = new GSize(0,0);<br />
greenIcon.iconAnchor = new GPoint(3,42);<br />
</code><code style="color:#0f0;"><br />
var redIcon = new GIcon(G_DEFAULT_ICON);<br />
redIcon.image = "/EE_Global/img/icons/red_tack.png";<br />
redIcon.iconSize = new GSize(27,44);<br />
redIcon.shadow = "/EE_Global/img/icons/tack_shadow.png";<br />
redIcon.shadowSize = new GSize(0,0);<br />
redIcon.iconAnchor = new GPoint(4,38);<br />
</code></p>
<p>Now here&#8217;s where the jquery comes in. Getting through this is a breeze. We use a get function, then look through the XML which we happened to define in a variable for reuse of this function in other pages using different XML, but which could be called explicitly here.</p>
<p><code style="color:#0f0;"><br />
$.get(mapXML, {}, function(xml){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$('place', xml).each(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($(this).find("home").text() == "true") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:redIcon };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:greenIcon };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</code><code style="color:#0f0;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var newLat	= parseFloat($(this).find("latitude").text());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var newLong	= parseFloat($(this).find("longitude").text());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var new_point	= new GLatLng(newLat,newLong);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLa	= $(this).find("place_name").text();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLb	= $(this).find("place_loc").text();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLall = theHTMLa + "&lt;br&gt;" + theHTMLb;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var marker = BH.maps.createMarker(new_point,markerOptions,theHTMLall);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.addOverlay(marker);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bounds.extend(new_point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setCenter(bounds.getCenter());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setZoom(map.getBoundsZoomLevel(bounds));<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
});<br />
</code></p>
<p>So we&#8217;re ripping through the XML, finding the tags we need to populate different variables, then popping those into our createMarker function. going through it a few lines at a time:</p>
<p><code style="color:#0f0;"><br />
$.get(mapXML, {}, function(xml){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$('place', xml).each(function(){<br />
</code></p>
<p>We get the xml, and each &#8220;place&#8221; tag gets a function.</p>
<p><code style="color:#0f0;"><br />
if ($(this).find("home").text() == "true") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:redIcon };<br />
} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:greenIcon };<br />
}<br />
</code></p>
<p>We find our boolean to determine which marker we&#8217;re using. Again, this could be done with something other than a boolean, if you wanted to use 3 or more markers.</p>
<p><code style="color:#0f0;"><br />
var newLat	        = parseFloat($(this).find("latitude").text());<br />
var newLong	= parseFloat($(this).find("longitude").text());<br />
var new_point	= new GLatLng(newLat,newLong);<br />
</code></p>
<p>We read our latitude and longitude, then put them into a GLatLng point.</p>
<p><code style="color:#0f0;"><br />
var theHTMLa	= $(this).find("place_name").text();<br />
var theHTMLb	= $(this).find("place_loc").text();<br />
var theHTMLall = theHTMLa + "&lt;br&gt;" + theHTMLb;<br />
</code></p>
<p>Read a few pieces of info and concatenate them into one string. This could be done in the xml generator, but we chose to do it in the JS.</p>
<p><code style="color:#0f0;"><br />
var marker = BH.maps.createMarker(new_point,markerOptions,theHTMLall);<br />
</code></p>
<p>Then we go to our marker creation function and hand it the GLatLng point, the color of the marker it should be using, and the html to put in the info bubble.</p>
<p><code style="color:#0f0;"><br />
bounds.extend(new_point);<br />
map.setCenter(bounds.getCenter());<br />
map.setZoom(map.getBoundsZoomLevel(bounds));<br />
</code></p>
<p>Changing the bounds by adding the new point, then setting the zoom level and center based on that new addition. Yes, it does go through each point and make the change, but A) it happens so quickly you&#8217;re not seeing it redraw each time, and B) we found this way gives us less hassle in different browsers than trying to add them one at a time and then redrawing when all points are added.</p>
<p>The createMarker function is pretty bog standard:</p>
<p><code style="color:#0f0;"><br />
BH.maps.createMarker = function (point,markerOptions,code) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var marker = new GMarker(point,markerOptions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;GEvent.addListener(marker, "click", function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;marker.openInfoWindowHtml(code);<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;gmarkers.push(marker);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return marker;<br />
};<br />
</code></p>
<p>We&#8217;re not pushing the marker to any separate arrays for different marker icons, because we don&#8217;t need it. But you totally could.</p>
<p>So the code, all in one chunk:</p>
<p><code style="color:#0f0;"><br />
BH.maps.load = function () {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map = new &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GMap2(document.getElementById("map"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setCenter(new GLatLng(0,0),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var bounds = new GLatLngBounds( );<br />
</code><code style="color:#0f0;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var greenIcon = new GIcon(G_DEFAULT_ICON);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenIcon.image = "/EE_Global/img/icons/green_tack.png";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenIcon.iconSize = new GSize(17,46);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenIcon.shadow = "/EE_Global/img/icons/tack_shadow.png";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenIcon.shadowSize = new GSize(0,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenIcon.iconAnchor = new GPoint(3,42);<br />
</code><code style="color:#0f0;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var redIcon = new GIcon(G_DEFAULT_ICON);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redIcon.image = "/EE_Global/img/icons/red_tack.png";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redIcon.iconSize = new GSize(27,44);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redIcon.shadow = "/EE_Global/img/icons/tack_shadow.png";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redIcon.shadowSize = new GSize(0,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redIcon.iconAnchor = new GPoint(4,38);<br />
</code><code style="color:#0f0;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.get(mapXML, {}, function(xml){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('school', xml).each(function(i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($(this).find("home").text() == "true") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:redIcon };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;markerOptions = { icon:greenIcon };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var newLat	= parseFloat($(this).find("latitude").text());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var newLong	= parseFloat($(this).find("longitude").text());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var new_point	= new GLatLng(newLat,newLong);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLa	= $(this).find("place_name").text();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLb	= $(this).find("place_loc").text();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theHTMLall = theHTMLa + "&lt;br&gt;" + theHTMLb;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var marker = BH.maps.createMarker(new_point,markerOptions,theHTMLall);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.addOverlay(marker);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bounds.extend(new_point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setCenter(bounds.getCenter());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setZoom(map.getBoundsZoomLevel(bounds));});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</code><code style="color:#0f0;"><br />
BH.maps.createMarker = function (point,markerOptions,code) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var marker = new GMarker(point,markerOptions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;GEvent.addListener(marker, "click", function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;marker.openInfoWindowHtml(code);<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;gmarkers.push(marker);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return marker;<br />
};<br />
</code></p>
<p>I may edit this as time goes by to respond to any questions (i&#8217;m a coder, not a writer), but there it is in a nutshell. As soon as the site we did this work on is up, we can post a link!</p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2009/08/jquery-expression-engine-and-google-maps/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NSTAR Green Calculator</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/10/nstar-green-calculator/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/10/nstar-green-calculator/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 21:10:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/10/nstar-green-calculator/</guid>
		<description><![CDATA[Using 
Eyewonder and 
Gigya, we have launched a rich media banner campaign focused on a green energy calculator related to the new wind power options from 
NSTAR.

]]></description>
			<content:encoded><![CDATA[<p>Using 
<a  href="http://www.eyewonder.com" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.eyewonder.com');" >Eyewonder</a> and 
<a  href="http://www.gigya.com" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.gigya.com');" >Gigya</a>, we have launched a rich media banner campaign focused on a green energy calculator related to the new wind power options from 
<a  href="http://www.nstar.com" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.nstar.com');" >NSTAR</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="NSTARWidget" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="http://www.nstarwidgets.com/widgets/wind/01/app.swf?percVar=1&#038;checkNum=0" /><param name="quality" value="high" /><embed src="http://www.nstarwidgets.com/widgets/wind/01/app.swf?percVar=1&#038;checkNum=0" quality="high" width="400" height="300" name="NSTARWidget" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"  FlashVars="gig_lt=1222980984942&#038;gig_pt=1222981648848&#038;gig_g=2"/><param name="FlashVars" value="gig_lt=1222980984942&#038;gig_pt=1222981648848&#038;gig_g=2" /></object><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjI5ODA5ODQ5NDImcHQ9MTIyMjk4MTY*ODg*OCZwPTMzODE*MSZkPSZuPSZnPTImdD*mbz*xZTAxMjE4OWJjYTk*ODE1YTVhZDM*N2M1OThhMWU4OQ==.gif" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/10/nstar-green-calculator/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Powered by WordPress</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/02/powered-by-wordpress/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/02/powered-by-wordpress/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 14:18:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Platforms]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[mySQL]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[shotcode]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[yadis]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/02/powered-by-wordpress/</guid>
		<description><![CDATA[
This website is now powered by the self-hosted version of 
WordPress.


We have used only a few basic plugins:


Local Analytics for 
Google Analytics (including local, 24-hour browser caching of Google&#8217;s tracking JavaScript)

WP-OpenID to allow visitors to use their 
OpenID accounts to logon and post comments

WP-Yadis to allow us to set this website URL as our single [...]]]></description>
			<content:encoded><![CDATA[<p>
This website is now powered by the self-hosted version of 
<a  href="http://wordpress.org/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/wordpress.org/');" >WordPress</a>.
</p>
<p>
We have used only a few basic plugins:</p>
<ul>
<li><strong>
<a  href="http://www.joycebabu.com/downloads/local-analytics/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.joycebabu.com/downloads/local-analytics/');" >Local Analytics</a></strong> for 
<a  href="http://analytics.google.com" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/analytics.google.com');" >Google Analytics</a> (including local, 24-hour browser caching of Google&#8217;s tracking JavaScript)</li>
<li><strong>
<a  href="http://wordpress.org/extend/plugins/openid/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/wordpress.org/extend/plugins/openid/');" >WP-OpenID</a></strong> to allow visitors to use their 
<a  href="http://www.openid.net" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.openid.net');" >OpenID</a> accounts to logon and post comments</li>
<li><strong>
<a  href="http://wordpress.org/extend/plugins/yadis/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/wordpress.org/extend/plugins/yadis/');" >WP-Yadis</a></strong> to allow us to set this website URL as our single identifier for our multiple OpenID accounts (
<a  href="http://www.yadis.org" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.yadis.org');" >Yadis</a>)</li>
<li><strong>
<a  href="http://www.shotcode.org/wordpress" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.shotcode.org/wordpress');" >ShotCode</a></strong> to create 2D bar codes for mobile phone bookmarking</li>
<li><strong>
<a  href="http://www.addthis.com/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.addthis.com/');" >AddThis</a></strong> to allow users to easily bookmark individual entries on this site (and allows us to see reports on this activity)</li>
</ul>
<p>
We did come across a few problems with the installation - most of them revolving our our use of Microsoft IIS as a server. The biggest problem was our inability to make &#8220;pretty&#8221; permalinks to each post. Additional information about this problem (and work arounds) is 
<a  href="http://codex.wordpress.org/User:ringmaster/IIS#Alternate_Rewrite_Methods" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/codex.wordpress.org/User:ringmaster/IIS?Alternate_Rewrite_Methods');" >found here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/02/powered-by-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OpenID and phpMyID</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/02/openid-and-phpmyid/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/02/openid-and-phpmyid/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 21:00:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Platforms]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[yadis]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/02/openid-and-phpmyid/</guid>
		<description><![CDATA[
We have been exploring the use of OpenID as both a provider (so our employees could potentially use one logon for multiple websites) and to integrate with the sites we produce (e.g., allowing easy logon for visitors to our clients&#8217; sites).


From the 
OpenID website:
OpenID eliminates the need for multiple usernames across different websites, simplifying your [...]]]></description>
			<content:encoded><![CDATA[<p>
We have been exploring the use of OpenID as both a provider (so our employees could potentially use one logon for multiple websites) and to integrate with the sites we produce (e.g., allowing easy logon for visitors to our clients&#8217; sites).
</p>
<p>
From the 
<a  href="http://www.openid.net" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.openid.net');" >OpenID website</a>:</p>
<blockquote><p>OpenID eliminates the need for multiple usernames across different websites, simplifying your online experience.</p></blockquote>
<p>
We wanted to explore the creation of a single logon for our development resources. A simple solution for this is 
<a  href="http://siege.org/projects/phpMyID/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/siege.org/projects/phpMyID/');" >phpMyID</a>.
</p>
<p>
From the 
<a  href="http://siege.org/projects/phpMyID/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/siege.org/projects/phpMyID/');" >phpMyID website</a>:</p>
<blockquote><p>phpMyID is a single user (though, if you were so inclined, you could easily turn it into a multi-user setup) IdP, or &#8220;Identity Provider&#8221; for the OpenID framework.</p></blockquote>
<p>
You can view our sample logon page here:<br />

<a  href="http://gym.boathouseinc.com/openid/" target="_blank">http://gym.boathouseinc.com/openid/</a>
</p>
<p>
Next up: Using 
<a  href="http://yadis.org/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/yadis.org/');" >Yadis</a> to allow a single person to use multiple open authentication services (including setting your own website or blog name as your OpenID).
</p></p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/02/openid-and-phpmyid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apple Touch Icons</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/02/apple-touch-icons/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/02/apple-touch-icons/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 14:00:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Platforms]]></category>

		<category><![CDATA[apple touch]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/02/apple-touch-icons/</guid>
		<description><![CDATA[
            The recent changes to the iPod Touch and iPhone operating system (&#8221;Apple Touch&#8221;) allow for users to create custom icons on their (aka &#8220;Web Clips&#8221;) on the Apple Touch Home Screen.
            

 [...]]]></description>
			<content:encoded><![CDATA[<p>
            The recent changes to the iPod Touch and iPhone operating system (&#8221;Apple Touch&#8221;) allow for users to create custom icons on their (aka &#8220;Web Clips&#8221;) on the Apple Touch Home Screen.
            </p>
<p>
            While the 
<a  href="http://developer.apple.com/documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/chapter_3_section_4.html#/apple_ref/doc/uid/TP40006517-DontLinkElementID_30" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/developer.apple.com/documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/chapter_3_section_4.html?/apple_ref/doc/uid/TP40006517-DontLinkElementID_30');" >documentation in the Apple Developer Connection</a> was helpful, we found that the 
<a  href="http://developer.apple.com/documentation/iPhone/Conceptual/iPhoneHIG/MetricsLayout/chapter_5_section_2.html#//apple_ref/doc/uid/TP40006596-CH6-SW31" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/developer.apple.com/documentation/iPhone/Conceptual/iPhoneHIG/MetricsLayout/chapter_5_section_2.html?//apple_ref/doc/uid/TP40006596-CH6-SW31');" >recommended size of 57&#215;57 pixels</a> does not allow for the best looking icons. In fact, Apple does not even follow this recommendation for their own icon:<br/><br />
            
<a  href="http://www.apple.com/apple-touch-icon.png" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.apple.com/apple-touch-icon.png');" >http://www.apple.com/apple-touch-icon.png</a>
            </p>
<p>
            After some research (
<a  href="http://allinthehead.com/retro/319/how-to-set-an-apple-touch-icon-for-any-site" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/allinthehead.com/retro/319/how-to-set-an-apple-touch-icon-for-any-site');" >here</a> and 
<a  href="http://simplepixels.com/tag/apple-touch-icon/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/simplepixels.com/tag/apple-touch-icon/');" >here</a>) and experimenting, we discovered the following settings provide the best results:<br/><br />
            129 x 129 at 163dpi
            </p>
<p>
            The new Boathouse icons are now part of all of our sites:<br/><br />
            
<a  href="http://www.boathouseinc.com/global/img/apple-touch-icon.png" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.boathouseinc.com/global/img/apple-touch-icon.png');" >Black-on-White (apple-touch-icon.png)</a><br/><br />
            
<a  href="http://www.boathouseinc.com/global/img/apple-touch-icon-black.png" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.boathouseinc.com/global/img/apple-touch-icon-black.png');" >White-on-Black (apple-touch-icon-black.png)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/02/apple-touch-icons/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Surveys: LimeSurvey</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/02/web-surveys-limesurvey/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/02/web-surveys-limesurvey/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 18:00:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[jpgraph]]></category>

		<category><![CDATA[ldap]]></category>

		<category><![CDATA[mySQL]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/02/web-surveys-limesurvey/</guid>
		<description><![CDATA[
            In an effort to explore alternatives to 
SurveyMonkey and other similar web-based survey tools we have been exploring open-source solutions. Our goal was to find a solution powerful enough to be used for the quick creation of low-end to mid-range surveys, while providing [...]]]></description>
			<content:encoded><![CDATA[<p>
            In an effort to explore alternatives to 
<a  href="http://www.surveymonkey.com/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.surveymonkey.com/');" >SurveyMonkey</a> and other similar web-based survey tools we have been exploring open-source solutions. Our goal was to find a solution powerful enough to be used for the quick creation of low-end to mid-range surveys, while providing a customizable platform. During our research we came across and are now evaluating the 
<a  href="http://www.limesurvey.org/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.limesurvey.org/');" >LimeSurvey</a> solution.
            </p>
<p>
			<strong>LimeSurvey Highlights</strong></p>
<ul>
<li>Open-source platform: PHP and mySQL</li>
<li>Advanced reporting through integration of 
<a  href="http://www.aditus.nu/jpgraph/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.aditus.nu/jpgraph/');" >JpGraph</a> (open-source) and exports to SPSS.</li>
<li>Integration with company directory servers (LDAP)</li>
</ul>
<p>
	        Our initial implementations are set to private/internal-only. As soon as we create a few public examples, we will post them here.
            </p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/02/web-surveys-limesurvey/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducing The Boathouse Gym</title>
		<link>http://gym.boathouseinc.com/entry/index.php/2008/01/introducing-the-boathouse-gym/</link>
		<comments>http://gym.boathouseinc.com/entry/index.php/2008/01/introducing-the-boathouse-gym/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 17:00:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://gym.boathouseinc.com/entry/index.php/2008/01/introducing-the-boathouse-gym/</guid>
		<description><![CDATA[
            Welcome to our new website! Starting in 2008, the Boathouse digital team will be using this site to publish some of our internal work within the constantly evolving digital landscape.
            

  [...]]]></description>
			<content:encoded><![CDATA[<p>
            Welcome to our new website! Starting in 2008, the Boathouse digital team will be using this site to publish some of our internal work within the constantly evolving digital landscape.
            </p>
<p>
            Our digital strategists, designers, developers, and architects will be using the Gym for three primary purposes: </p>
<ul>
<li><strong>Study</strong> - Researching and building a shared understanding of new technologies as they are released (and sometimes before)</li>
<li><strong>Cultivate</strong> - Defining the scaffolding, framework, templates, etc. on which the new technologies will be produced</li>
<li><strong>Break-in</strong> - Learning how we can best apply the new technologies for clients by applying them to test examples</li>
</ul>
<p>
            Please check back again in throughout the year as we publish our examples and learnings.
            </p>
]]></content:encoded>
			<wfw:commentRss>http://gym.boathouseinc.com/entry/index.php/2008/01/introducing-the-boathouse-gym/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
