<?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>sometimes infinity is a loop</title>
	<atom:link href="http://fisherwebdev.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://fisherwebdev.com/wordpress</link>
	<description>howling screaming chanting</description>
	<lastBuildDate>Tue, 25 Jan 2011 08:10:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>CSS3 @font-face at Font Squirrel</title>
		<link>http://fisherwebdev.com/wordpress/2011/01/25/css3-font-face-at-font-squirrel/</link>
		<comments>http://fisherwebdev.com/wordpress/2011/01/25/css3-font-face-at-font-squirrel/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 08:10:54 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=204</guid>
		<description><![CDATA[Font Squirrel provides free fonts, cross-browser @font-face kits, and an @font-face generator where you can use your own fonts.  The @font-face kits and @font-face generator output the various different file types you need to guarantee cross-browser font rendering. Font Squirrel &#8230; <a href="http://fisherwebdev.com/wordpress/2011/01/25/css3-font-face-at-font-squirrel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Font Squirrel provides free fonts, cross-browser @font-face kits, and an @font-face generator where you can use your own fonts.  The @font-face kits and @font-face generator output the various different file types you need to guarantee cross-browser font rendering.</p>
<p><a href="http://www.fontsquirrel.com/">Font Squirrel | Handpicked free fonts for graphic designers with commercial-use licenses.</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2011/01/25/css3-font-face-at-font-squirrel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Cross browser Polyfills &#8211; GitHub</title>
		<link>http://fisherwebdev.com/wordpress/2011/01/24/html5-cross-browser-polyfills-github/</link>
		<comments>http://fisherwebdev.com/wordpress/2011/01/24/html5-cross-browser-polyfills-github/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 13:32:00 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=202</guid>
		<description><![CDATA[HTML5 shims (and CSS3 et al).  No excuses now.  Here are a bunch of scripts to bring older browsers up to date with the new standards, or to reconcile differences in implementations. HTML5 Cross browser Polyfills &#8211; GitHub.]]></description>
			<content:encoded><![CDATA[<p>HTML5 shims (and CSS3 et al).  No excuses now.  Here are a bunch of scripts to bring older browsers up to date with the new standards, or to reconcile differences in implementations.</p>
<p><a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills">HTML5 Cross browser Polyfills &#8211; GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2011/01/24/html5-cross-browser-polyfills-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring the Unofficial Google Reader API</title>
		<link>http://fisherwebdev.com/wordpress/2010/12/01/exploring-the-unofficial-google-reader-api/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/12/01/exploring-the-unofficial-google-reader-api/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 21:24:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google APIs]]></category>
		<category><![CDATA[Information Flow]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[lifestreaming]]></category>
		<category><![CDATA[Google Reader]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=193</guid>
		<description><![CDATA[Google Reader has no official API.  However, folks have figured out ways of using the existing API even though Google has not officially published any documentation. There is a Google Group: Friends of the Unofficial Google Reader API &#124; Google Groups. &#8230; <a href="http://fisherwebdev.com/wordpress/2010/12/01/exploring-the-unofficial-google-reader-api/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Google Reader has no official API.  However, folks have figured out ways of using the existing API even though Google has not officially published any documentation.</p>
<p>There is a Google Group: <a href="http://groups.google.com/group/fougrapi">Friends of the Unofficial Google Reader API | Google Groups</a>.</p>
<p>And there is a Python library where you can find lots of good API information: <a href="http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI">GoogleReaderAPI &#8211; pyrfeed</a></p>
<p>There is also a small PHP library: <a href="http://code.google.com/p/greader-library/">greader-library</a>:</p>
<blockquote><p>PHP class library for providing access to the Google Reader API. Enables authentication and provides public methods for general Google Reader actions.</p></blockquote>
<p>I don&#8217;t think greader-library supports OAuth as of this writing, but this may change in the future.</p>
<p>Know of any other good resources for the Google Reader API?  Let me know!</p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/12/01/exploring-the-unofficial-google-reader-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create new commands for your Unix-based command line</title>
		<link>http://fisherwebdev.com/wordpress/2010/10/14/create-new-commands-for-your-unix-based-command-line/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/10/14/create-new-commands-for-your-unix-based-command-line/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 19:21:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=188</guid>
		<description><![CDATA[Do you ever wish you had a shortcut to save yourself from typing the same things into the command line repeatedly? This tutorial will show you how to create a new command for your Unix-based command line (Linux, OS X, &#8230; <a href="http://fisherwebdev.com/wordpress/2010/10/14/create-new-commands-for-your-unix-based-command-line/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Do you ever wish you had a shortcut to save yourself from typing the same things into the command line repeatedly?  This tutorial will show you how to create a new command for your Unix-based command line (Linux, OS X, etc.).</p>
<p>Here is our scenario:</p>
<p>We are developing code for a client and managing it with some branches on GitHub.  The code lives on our local machine in /Users/myUserName/clients/myClient/code.  We have Git branches for development and production, and another, local branch where we write experimental code.  We are on version 4.5 of this project.  So we find ourselves typing the following commands into the command line <strong>A LOT</strong>:</p>
<p><code>$ git checkout myClient_4.5_development<br />
$ git checkout myClient_4.5_production<br />
$ git checkout myClient_4.5_local</code></p>
<p>&#8230;but we would much rather simply type&#8230;</p>
<p><code>$ dev<br />
$ prod<br />
$ loc</code></p>
<p>&#8230;to achieve the same thing.<span id="more-188"></span></p>
<p>To do this, we need to create some scripts that will contain the git commands, make sure they are executable, and then add the directory where they live to the $PATH variable.</p>
<p>1. Navigate to the directory where we keep everything related to our client.</p>
<p><code>$ cd ~/clients/myClient</code></p>
<p>That &#8220;~&#8221;, just in case you don&#8217;t know, is a shortcut to our home directory located at /Users/myUserName</p>
<p>2. Add a directory for the shell scripts and navigate into it.</p>
<p><code>$ mkdir scripts<br />
$ cd scripts</code></p>
<p>3. Create the files for our scripts.</p>
<p><code>$ touch dev<br />
$ touch prod<br />
$ touch loc</code></p>
<p>4. Make the scripts executable&#8230;</p>
<p><code>$ chmod 700 dev</code></p>
<p>&#8230;and repeat, as in step 3, for prod and loc.</p>
<p>5. Edit the shell script with whatever text editor you are comfortable with.  People like vim, pico, nano, emacs&#8230; or you can go the long way around and use TextEdit or some other, more GUI-oriented editor.  So I might normally use vim, but it can be a little bit difficult for those unfamiliar with it, so let&#8217;s use nano instead.</p>
<p><code>$ nano dev</code></p>
<p>Whatever text editor you choose, we want the following in our scripts&#8230;</p>
<p><code>#!/bin/sh<br />
git checkout myClient_4.5_development</code></p>
<p>&#8230;and we would change &#8220;development&#8221; to production or local for the prod and loc scripts.<br />
That first line is the shebang, which tells the command line what program to use to interpret our file.  In this case, we want the shell script interpreter (sh), and we typically find that within the root bin file (/bin).</p>
<p>6. Now we simply need to add our scripts directory to the $PATH variable, so the command line will know where to search for dev, prod and loc.  To do this, we need to edit our profile file.  This might be called .profile on your system, or it might be called .bash_profile, or something similar.  You will find it in your home directory.</p>
<p><code>$ nano ~/.bash_profile</code></p>
<p>We need to add the following line to our profile.</p>
<p><code>export PATH=/Users/myUserName/Clients/myClient/scripts:$PATH</code></p>
<p>We&#8217;re done!  Now we can open a new terminal window, navigate to our code directory and type our new commands to switch between Git branches.  When our version number changes, we simply edit our scripts accordingly.</p>
<p>I&#8217;m not the Unix master I would like to be, so if anyone sees a way to improve this, please let me know in the comments and I will update this post.  Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/10/14/create-new-commands-for-your-unix-based-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undefined Arguments in JavaScript</title>
		<link>http://fisherwebdev.com/wordpress/2010/06/22/undefined-arguments-in-javascript/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/06/22/undefined-arguments-in-javascript/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 06:22:59 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[arguments]]></category>
		<category><![CDATA[bullet-proof]]></category>
		<category><![CDATA[crockford]]></category>
		<category><![CDATA[empty string]]></category>
		<category><![CDATA[false]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js bin]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[undefined]]></category>
		<category><![CDATA[zero]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=165</guid>
		<description><![CDATA[Sometimes it&#8217;s the most basic things that make me wonder. In this case, I was trying to figure out the best way to determine that an argument had not been passed to a function. That is, we have a function &#8230; <a href="http://fisherwebdev.com/wordpress/2010/06/22/undefined-arguments-in-javascript/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes it&#8217;s the most basic things that make me wonder.  In this case, I was trying to figure out the best way to determine that an argument had <em>not</em> been passed to a function.  That is, we have a function that expects function(one, two), but someone might invoke it with function(one).  And we&#8217;d like to know that fact within the function, perhaps to set some default values.<span id="more-165"></span></p>
<p>(I feel that I should have this stuff under my belt, but I often have to remind myself of the weird rules of JavaScript.  I should probably be studying <a href="http://www.crockford.com/">the writings of Doug Crockford</a> more.)</p>
<div style="background:#ffffcc; padding:20px 20px 10px 20px; margin-bottom:30px;">
EDIT: Since writing this post, I realized that <strong>undefined</strong> is not a keyword, but rather a variable name, which is usually not defined by programmers&#8211;but it could be. So if you are testing whether an argument has been defined, you should probably use the typeof operator.  However, there is another alternative: void(0).  This always returns as undefined, so one can compare against that.  So you could write something like this:</p>
<pre><code>if(myVariable === void(0){
    //do amazing things
}</code></pre>
<p>I have changed the code below accordingly.</p>
<p>I read about this in a thread about <a href="http://stackoverflow.com/questions/1995113/strangest-language-feature/2008728#2008728">programming language oddities</a> on Stack Overflow.
</div>
<p>So I start to wonder about this sort of thing, and I turn to the awesome <a href="http://jsbin.com/">JS Bin</a>.  I set up a test there, and I can provide you with a <a href="http://jsbin.com/isiwu3/28">link to the test</a>&#8230; I love that.</p>
<p>But JS Bin is rather impermanent, and just in case that&#8217;s not working out, here is the original test and the results.</p>
<h2>code</h2>
<pre><code>
/* check for an absent argument to a function */

var testIt = function(one, two){
  gnomeSane = '';
  if(two === void(0)){
    gnomeSane += "two is undefined. (two === void(0))&lt;br /&gt;";
  }
  if(two === null){
    gnomeSane += "two is null. (two === null)&lt;br /&gt;";
  }
  if(two === false){
    gnomeSane += "two is false. (two === false)&lt;br /&gt;";
  }
  if(two === ''){
    gnomeSane += "two is an empty string. (two === '')&lt;br /&gt;";
  }
  if(two === 0){
    gnomeSane += "two is zero. (two === 0)&lt;br /&gt;";
  }

  if(two == void(0)){
    gnomeSane += "two is equivalent to undefined. (two == void(0))&lt;br /&gt;";
  }
  if(two == null){
    gnomeSane += "two is equivalent to null. (two == null)&lt;br /&gt;";
  }
  if(two == false){
    gnomeSane += "two is equivalent to false. (two == false)&lt;br /&gt;";
  }
  if(two == ''){
    gnomeSane += "two is equivalent to an empty string. (two == '')&lt;br /&gt;";
  }
  if(two == 0){
    gnomeSane += "two is equivalent to zero. (two == 0)&lt;br /&gt;";
  }

  if(typeof two == "undefined"){
    gnomeSane += "type of two is 'undefined'. (typeof two == 'undefined')&lt;br /&gt;";
  }

  if(!two){
    gnomeSane += "not two is true. (!two)&lt;br /&gt;";
  }

  gnomeSane = gnomeSane == '' ? 'two is '+two : gnomeSane;
  document.write('&lt;p&gt;'+one+'&lt;br /&gt;'+gnomeSane+'&lt;/p&gt;');
}

testIt('&lt;b&gt;The second argument is not being passed to the function.&lt;/b&gt;');
testIt('&lt;b&gt;Now the second argument is null.&lt;/b&gt;', null);
testIt('&lt;b&gt;Now the second argument is false.&lt;/b&gt;', false);
testIt('&lt;b&gt;Now the second argument is an empty string.&lt;/b&gt;', '');
testIt('&lt;b&gt;Now the second argument is zero.&lt;/b&gt;', 0);
​</code></pre>
<h2>results</h2>
<pre>The second argument is not being passed to the function.
two is undefined. (two === void(0))
two is equivalent to undefined. (two == void(0))
two is equivalent to null. (two == null)
type of two is 'undefined'. (typeof two == 'undefined')
not two is true. (!two)

Now the second argument is null.
two is null. (two === null)
two is equivalent to undefined. (two == void(0))
two is equivalent to null. (two == null)
not two is true. (!two)

Now the second argument is false.
two is false. (two === false)
two is equivalent to false. (two == false)
two is equivalent to an empty string. (two == '')
two is equivalent to zero. (two == 0)
not two is true. (!two)

Now the second argument is an empty string.
two is an empty string. (two === '')
two is equivalent to false. (two == false)
two is equivalent to an empty string. (two == '')
two is equivalent to zero. (two == 0)
not two is true. (!two)

Now the second argument is zero.
two is zero. (two === 0)
two is equivalent to false. (two == false)
two is equivalent to an empty string. (two == '')
two is equivalent to zero. (two == 0)
not two is true. (!two)</pre>
<h2>conclusions</h2>
<p>If you want to really just test for an undefined argument use:</p>
<pre>two === void(0)</pre>
<p>or</p>
<pre>typeof two == 'undefined'</pre>
<p>I prefer the clarity of the latter.  But we will need to be careful if we do that, because typeof null is equivalent to &#8216;object&#8217;.</p>
<p>If you want to test for both undefined <em>or</em> null use either:</p>
<pre>two == void(0)</pre>
<p>or</p>
<pre>two == null</pre>
<p>Using both might make the code more clear, but it is not strictly necessary.</p>
<p>If you want to test for all &#8220;off values&#8221; (undefined, null, false, empty string, zero), then use:</p>
<pre>!two</pre>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/06/22/undefined-arguments-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This post was sent via Posterous</title>
		<link>http://fisherwebdev.com/wordpress/2010/06/20/this-post-was-sent-via-posterous/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/06/20/this-post-was-sent-via-posterous/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 15:12:56 +0000</pubDate>
		<dc:creator>Bill via Posterous</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/2010/06/20/this-post-was-sent-via-posterous/</guid>
		<description><![CDATA[This is another test to see how easy I can make it for a client to post to their blog. But maybe my real problem is all the bugs on my computer. Posted via email from Bill&#8217;s posterous]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'><a href='http://posterous.com/getfile/files.posterous.com/fisherwebdev/n6T7HukJ2uKFq16eFsM1VCUxYrZlLUyRLR7o5VNvpM3loCvMio8DfdTuQrY3/2010-05-26_07.39.21.jpg.scaled.1000.jpg'><img src="http://posterous.com/getfile/files.posterous.com/fisherwebdev/DF4qoIhTxgOvcBtYdFrdP7LOR1RcBZFAtw9TWeuuOHE4nStIo3D9AcvM6v9L/2010-05-26_07.39.21.jpg.scaled.500.jpg" width="500" height="375" /></a>
</p>
<p>This is another test to see how easy I can make it for a client to post to their blog. But maybe my real problem is all the bugs on my computer. </p>
<p style="font-size: 10px">  <a href="http://posterous.com">Posted via email</a>   from <a href="http://fisherwebdev.posterous.com/this-post-was-sent-via-posterous">Bill&#8217;s posterous</a>  </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/06/20/this-post-was-sent-via-posterous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This post came from my Android</title>
		<link>http://fisherwebdev.com/wordpress/2010/06/19/this-post-came-from-my-android/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/06/19/this-post-came-from-my-android/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 21:12:30 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[Tests]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress android iphone posterous]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/2010/06/19/this-post-came-from-my-android/</guid>
		<description><![CDATA[I&#8217;m using the WordPress app for Android. The purpose of this post is simply to test this out. I have a client that would like to photo-blog from his iPhone, so I thought. I might check out the possibilities. I &#8230; <a href="http://fisherwebdev.com/wordpress/2010/06/19/this-post-came-from-my-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m using the WordPress app for Android. The purpose of this post is simply to test this out. I have a client that would like to photo-blog from his iPhone, so I thought. I might check out the possibilities. I might instead rig something up with <a href="http://posterous.com">Posterous</a>.  </p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/06/19/this-post-came-from-my-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Styles for Google Maps</title>
		<link>http://fisherwebdev.com/wordpress/2010/05/22/custom-styles-for-google-maps/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/05/22/custom-styles-for-google-maps/#comments</comments>
		<pubDate>Sat, 22 May 2010 11:09:15 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[Google APIs]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=154</guid>
		<description><![CDATA[I attended Google I/O 2010 this past week, and they announced that that the Google Maps API v3 is now able to be styled. Check out the announcement on the Google Blog. Here is my first experiment with it. Before &#8230; <a href="http://fisherwebdev.com/wordpress/2010/05/22/custom-styles-for-google-maps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I attended <a href="http://code.google.com/events/io/2010/">Google I/O 2010</a> this past week, and they announced that that the <a href="http://code.google.com/apis/maps/documentation/javascript/">Google Maps API v3</a> is now able to be styled.  Check out the <a href="http://googlegeodevelopers.blogspot.com/2010/05/add-touch-of-style-to-your-maps.html">announcement on the Google Blog</a>.  Here is my first <a href="http://fisherwebdev.com/mapcolors">experiment</a> with it.</p>
<p><span id="more-154"></span></p>
<p>Before now, this was something only possible with tools like <a href="http://mapnik.org/">Mapnik</a>, <a href="http://teczno.com/cascadenik/doc/">Cascadenik</a> and <a href="http://www.openstreetmap.org/">OpenStreetMap</a>.  And for white-label maps or extremely customized maps, those tools are still quite relevant.</p>
<h2>Resources</h2>
<ul>
<li><a href="http://code.google.com/apis/maps/documentation/javascript/">Google Maps API</a></li>
<li><a href="http://code.google.com/apis/maps/documentation/javascript/overlays.html#StyledMaps">Google Styled Maps Documentation</a></li>
<li><a href="http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html">Google Styled Maps Wizard</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/05/22/custom-styles-for-google-maps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vCards as QR Codes with Google Chart API</title>
		<link>http://fisherwebdev.com/wordpress/2010/05/21/vcards-as-qr-codes-with-google-image-chart-api/</link>
		<comments>http://fisherwebdev.com/wordpress/2010/05/21/vcards-as-qr-codes-with-google-image-chart-api/#comments</comments>
		<pubDate>Fri, 21 May 2010 23:53:16 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
				<category><![CDATA[Google APIs]]></category>
		<category><![CDATA[Information Flow]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[QR Codes]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=140</guid>
		<description><![CDATA[Here is an example of a vCard turned into a UTF-8 encoded URL string. Once we encode it in this fashion, we can put it in a URL formatted for the Google Chart API that will generate a QR Code &#8230; <a href="http://fisherwebdev.com/wordpress/2010/05/21/vcards-as-qr-codes-with-google-image-chart-api/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here is an example of a <a href="http://en.wikipedia.org/wiki/VCard">vCard</a> turned into a UTF-8 encoded URL string.  Once we encode it in this fashion, we can put it in a URL formatted for the <a href="http://code.google.com/apis/chart/docs/making_charts.html">Google Chart API</a> that will generate a <a href="http://en.wikipedia.org/wiki/QR_Code">QR Code</a> of the vCard data.<span id="more-140"></span></p>
<h2>Original vCard</h2>
<pre><code>
BEGIN:VCARD
VERSION:3.0
N:Gump;Forrest
FN:Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America
LABEL;TYPE=WORK:100 Waters Edge\nBaytown, LA 30314\nUnited States of America
ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
LABEL;TYPE=HOME:42 Plantation St.\nBaytown, LA 30314\nUnited States of America
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
REV:20080424T195243Z
END:VCARD
</code></pre>
<h2>vCard Encoded for a URL</h2>
<pre><code>
BEGIN%3AVCARD%0AVERSION%3A3.0%0AN%3AGump%3BForrest%0AFN%3AForrest%20Gump%0AORG%3ABubba%20Gump%20Shrimp%20Co.%0ATITLE%3AShrimp%20Man%0ATEL%3BTYPE%3DWORK%2CVOICE%3A%28111%29%20555-1212%0ATEL%3BTYPE%3DHOME%2CVOICE%3A%28404%29%20555-1212%0AADR%3BTYPE%3DWORK%3A%3B%3B100%20Waters%20Edge%3BBaytown%3BLA%3B30314%3BUnited%20States%20of%20America%0ALABEL%3BTYPE%3DWORK%3A100%20Waters%20Edge%5CnBaytown%2C%20LA%2030314%5CnUnited%20States%20of%20America%0AADR%3BTYPE%3DHOME%3A%3B%3B42%20Plantation%20St.%3BBaytown%3BLA%3B30314%3BUnited%20States%20of%20America%0ALABEL%3BTYPE%3DHOME%3A42%20Plantation%20St.%5CnBaytown%2C%20LA%2030314%5CnUnited%20States%20of%20America%0AEMAIL%3BTYPE%3DPREF%2CINTERNET%3Aforrestgump%40example.com%0AREV%3A20080424T195243Z%0AEND%3AVCARD
</code></pre>
<h2>Encoded, but perhaps easier to read</h2>
<pre><code>
BEGIN%3AVCARD%0A
VERSION%3A3.0%0A
N%3AGump%3BForrest%0A
FN%3AForrest%20Gump%0A
ORG%3ABubba%20Gump%20Shrimp%20Co.%0A
TITLE%3AShrimp%20Man%0A
TEL%3BTYPE%3DWORK%2CVOICE%3A%28111%29%20555-1212%0A
TEL%3BTYPE%3DHOME%2CVOICE%3A%28404%29%20555-1212%0A
ADR%3BTYPE%3DWORK%3A%3B%3B100%20Waters%20Edge%3BBaytown%3BLA%3B30314%3BUnited%20States%20of%20America%0A
LABEL%3BTYPE%3DWORK%3A100%20Waters%20Edge%5CnBaytown%2C%20LA%2030314%5CnUnited%20States%20of%20America%0A
ADR%3BTYPE%3DHOME%3A%3B%3B42%20Plantation%20St.%3BBaytown%3BLA%3B30314%3BUnited%20States%20of%20America%0A
LABEL%3BTYPE%3DHOME%3A42%20Plantation%20St.%5CnBaytown%2C%20LA%2030314%5CnUnited%20States%20of%20America%0A
EMAIL%3BTYPE%3DPREF%2CINTERNET%3Aforrestgump%40example.com%0A
REV%3A20080424T195243Z%0A
END%3AVCARD
</code></pre>
<h2>Submit to Google</h2>
<p>This can now be submitted to Google&#8217;s Chart API as a URL:</p>
<pre><code>

http://chart.apis.google.com/chart?cht=qr&#038;chs=400x400&#038;chl=BEGIN:VCARD%0AVERSION:3.0%0AN:Gump;Forrest%0AFN:Forrest%20Gump%0AORG:Bubba%20Gump%20Shrimp%20Co.%0ATITLE:Shrimp%20Man%0ATEL;TYPE%3DWORK,VOICE:(111)%20555-1212%0ATEL;TYPE%3DHOME,VOICE:(404)%20555-1212%0AADR;TYPE%3DWORK:;;100%20Waters%20Edge;Baytown;LA;30314;United%20States%20of%20America%0ALABEL;TYPE%3DWORK:100%20Waters%20Edge\nBaytown,%20LA%2030314\nUnited%20States%20of%20America%0AADR;TYPE%3DHOME:;;42%20Plantation%20St.;Baytown;LA;30314;United%20States%20of%20America%0ALABEL;TYPE%3DHOME:42%20Plantation%20St.\nBaytown,%20LA%2030314\nUnited%20States%20of%20America%0AEMAIL;TYPE%3DPREF,INTERNET:forrestgump%40example.com%0AREV:20080424T195243Z%0AEND:VCARD&#038;chld=L

</code></pre>
<h2>The Result</h2>
<p>The image below is coming from the Google Chart API, not an image file on my server.<br />
<img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=400x400&#038;chl=BEGIN:VCARD%0AVERSION:3.0%0AN:Gump;Forrest%0AFN:Forrest%20Gump%0AORG:Bubba%20Gump%20Shrimp%20Co.%0ATITLE:Shrimp%20Man%0ATEL;TYPE%3DWORK,VOICE:(111)%20555-1212%0ATEL;TYPE%3DHOME,VOICE:(404)%20555-1212%0AADR;TYPE%3DWORK:;;100%20Waters%20Edge;Baytown;LA;30314;United%20States%20of%20America%0ALABEL;TYPE%3DWORK:100%20Waters%20Edge\nBaytown,%20LA%2030314\nUnited%20States%20of%20America%0AADR;TYPE%3DHOME:;;42%20Plantation%20St.;Baytown;LA;30314;United%20States%20of%20America%0ALABEL;TYPE%3DHOME:42%20Plantation%20St.\nBaytown,%20LA%2030314\nUnited%20States%20of%20America%0AEMAIL;TYPE%3DPREF,INTERNET:forrestgump%40example.com%0AREV:20080424T195243Z%0AEND:VCARD&#038;chld=L" alt="Example QR Code" /></p>
<h2>Resources</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/VCard">vCard</a></li>
<li><a href="http://www.hypergurl.com/urlencode.html">URL Encode and Decode Generator Tool</a></li>
<li><a href="http://php.net/manual/en/function.urlencode.php">PHP urlencode</a></li>
<li><a href="http://code.google.com/apis/chart/docs/making_charts.html">Google Image Chart API</a> &#8211; <a href="http://code.google.com/apis/chart/docs/gallery/qr_codes.html">QR Code Generator</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2010/05/21/vcards-as-qr-codes-with-google-image-chart-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tarpipe: a cool idea for lifestreaming, but is it secure?</title>
		<link>http://fisherwebdev.com/wordpress/2009/12/21/tarpipe-a-cool-idea-for-lifestreaming-but-is-it-secure/</link>
		<comments>http://fisherwebdev.com/wordpress/2009/12/21/tarpipe-a-cool-idea-for-lifestreaming-but-is-it-secure/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 09:44:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Information Flow]]></category>
		<category><![CDATA[lifestreaming]]></category>

		<guid isPermaLink="false">http://fisherwebdev.com/wordpress/?p=126</guid>
		<description><![CDATA[I decided to check out Tarpipe because it looks like the kind of information flow / lifestreaming thing I&#8217;ve been interested in developing for Posterous. Strangely, Tarpipe doesn&#8217;t support Posterous, but instead supports Tumblr. But I thought I&#8217;d try it &#8230; <a href="http://fisherwebdev.com/wordpress/2009/12/21/tarpipe-a-cool-idea-for-lifestreaming-but-is-it-secure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I decided to check out <a href="http://tarpipe.com">Tarpipe</a> because it looks like the kind of information flow / <a href="http://en.wikipedia.org/wiki/Lifestreaming">lifestreaming</a> thing I&#8217;ve been interested in developing for <a href="http://posterous.com">Posterous</a>.  Strangely, Tarpipe doesn&#8217;t support Posterous, but instead supports <a href="http://www.tumblr.com">Tumblr</a>.  But I thought I&#8217;d try it anyway.  </p>
<p>The creepy thing, however, is that I had to give my <a href="http://twitter.com">Twitter</a> login info to Tarpipe to get this rolling.<span id="more-126"></span>  Even if I decided that I trust these people, how can that be secure?  They must be submitting this info to Twitter <i>in plain text</i>, right?  That means they are storing it <i>in plain text</i>, right?  Or maybe I don&#8217;t understand their advanced cryptography?  My understanding was that once you encrypted something, that&#8217;s it.  You can&#8217;t de-encrypt it.  You&#8217;re supposed to simply compare two encrypted values&#8230; something tells me this is not happening.</p>
<p>I also wonder how this is achieved on Posterous or Tumblr, with their native autoposting to other services.</p>
<p>Anyhoo&#8230; it might be incredibly useful at some point, so I&#8217;m just checking it out for now.  But my Twitter password will probably change very soon.</p>
<p>UPDATE: Looks like Tarpipe is pretty much barely beta, and it&#8217;s not as useful as I originally thought&#8230; probably will be after they start using <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a> or <a href="http://en.wikipedia.org/wiki/Cron">cron jobs</a> or some other way of turning regular RSS/Atom feeds into real-time feeds.  Apparently, one needs to develop a custom application to use much of what they have built.  That&#8217;s cool, but not easy for a quick test.</p>
]]></content:encoded>
			<wfw:commentRss>http://fisherwebdev.com/wordpress/2009/12/21/tarpipe-a-cool-idea-for-lifestreaming-but-is-it-secure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
