<?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>Never Use This Font &#187; Internet</title>
	<atom:link href="http://neverusethisfont.com/blog/topics/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://neverusethisfont.com/blog</link>
	<description>Aaron Parecki is the co-founder of Geoloqi.com, and specializes in backend systems development.</description>
	<lastBuildDate>Mon, 11 Jul 2011 22:50:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to Let Google Power OpenSearch on Your Website</title>
		<link>http://neverusethisfont.com/blog/2011/07/how-to-let-google-power-opensearch-on-your-website/</link>
		<comments>http://neverusethisfont.com/blog/2011/07/how-to-let-google-power-opensearch-on-your-website/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 22:50:38 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Website Development]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[open search]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[site search]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=526</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/07/firefox-search-bar.png" alt="" title="firefox-search-bar" width="238" height="35" class="alignright size-full wp-image-527" /></p>
<p><a href="http://opensearch.org">OpenSearch</a> is a collection of simple formats for the sharing of search results. One of the formats allows your browser to add your site to its list of search engines, which Firefox displays in the top right corner, and Chrome uses in the address bar. Adding a small link and XML document allows your site to be added to a browser.</p>
<p>Many CMSs such as MediaWiki already support this natively so you might already have it on your site. To check in Chrome, in your search bar, enter your domain name followed by a space and see if it looks like the below screenshot.</p>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/07/chrome-search-bar.png" alt="" title="chrome-search-bar" width="471" height="82" class="aligncenter size-full wp-image-528" /></p>
<p>If not, you&#8217;ll have to add a small link and XML file.</p>
<p>The HTML code to reference the XML file is this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link href=&quot;/opensearch.xml&quot; rel=&quot;search&quot; title=&quot;aaronpk&quot; type=&quot;application/opensearchdescription+xml&quot;&gt;</pre></div></div>

<p>The XML file should look something like the following:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;OpenSearchDescription</span> <span style="color: #000066;">xmlns:moz</span>=<span style="color: #ff0000;">&quot;http://www.mozilla.org/2006/browser/search/&quot;</span> </span>
<span style="color: #009900;">      <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://a9.com/-/spec/opensearch/1.1/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ShortName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>aaron.pk<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ShortName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search aaron.pk<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InputEncoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/InputEncoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Url</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> </span>
<span style="color: #009900;">      <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://aaron.pk/search?q={searchTerms}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/OpenSearchDescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>But what if you want to add this to one of your sites that doesn&#8217;t have search capability? Turns out there is no restriction on the domains that you can use for the search URL. This means we can delegate the search to google!</p>
<p>Using Google&#8217;s &#8220;<code>site:example.com</code>&#8221; feature, we can restrict the Google search to our domain.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;OpenSearchDescription</span> <span style="color: #000066;">xmlns:moz</span>=<span style="color: #ff0000;">&quot;http://www.mozilla.org/2006/browser/search/&quot;</span> </span>
<span style="color: #009900;">      <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://a9.com/-/spec/opensearch/1.1/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ShortName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>aaron.pk<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ShortName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search aaron.pk<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InputEncoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/InputEncoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Url</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> </span>
<span style="color: #009900;">      <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://www.google.com/search?q={searchTerms}+site%3Aaaron.pk&amp;amp;hl=en&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/OpenSearchDescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Then, if someone uses your site&#8217;s search, they get taken to a Google search results page with results from your site!</p>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/07/google-site-search.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/07/google-site-search-570.png" alt="" title="google-site-search" width="570" height="271" class="aligncenter size-full wp-image-540" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/07/how-to-let-google-power-opensearch-on-your-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Soft Signup: Lower the barrier to entry</title>
		<link>http://neverusethisfont.com/blog/2011/04/soft-signup-lower-the-barrier-to-entry/</link>
		<comments>http://neverusethisfont.com/blog/2011/04/soft-signup-lower-the-barrier-to-entry/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 17:42:37 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[signup]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=475</guid>
		<description><![CDATA[Nobody wants to be presented with a signup form when trying out a new web service. Even though in recent years many websites have trimmed down their signup forms to make them easier to complete, I think we can do better. A typical signup form these days consists of asking for your email address and [...]]]></description>
			<content:encoded><![CDATA[<p>Nobody wants to be presented with a signup form when trying out a new web service. Even though in recent years many websites have trimmed down their signup forms to make them easier to complete, I think we can do better.</p>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/signup-form.png" alt="" title="signup-form" width="311" height="223" class="aligncenter size-full wp-image-476" /></p>
<p>A typical signup form these days consists of asking for your email address and creating a password. Some will also request you create a username, or ask for your real name.</p>
<p>People will probably fill out your signup form on your website if it doesn&#8217;t look too daunting, but mobile apps are a whole different story. With mobile apps, people expect to be able to use your app immediately after downloading it. Adding a signup form will do nothing but make people frustrated. It is important to think about whether you actually need their email address or phone number in order for them to at least start using your app.</p>
<blockquote style="font-size: 18pt; font-family: Times New Roman, serif; font-style: italic;"><p>Incrementally collect information from your users as it becomes necessary to provide a feature.</p></blockquote>
<h3>Example: <a href="http://geoloqi.com">Geoloqi</a></h3>
<p>Download the app and press &#8220;use anonymously&#8221;, you&#8217;re taken to your map</p>
<p>You can leave yourself a Geonote, and we can deliver the message since we have your push token for the device</p>
<p>When you press &#8220;Share Location,&#8221; you have multiple options:</p>
<p><b>Send via SMS or Email</b></p>
<p>The app opens the phone&#8217;s system SMS composer, and your phone sends the SMS. We never need to know your phone number to do so.</p>
<p><b>Send via Twitter or Facebook</b></p>
<p>In order to post to your Twitter account, we need to connect your Geoloqi account to Twitter. At this point, we prompt you to log in to your Twitter account which then tells Geoloqi who you are. Similarly to Twitter, posting to Facebook requires you to grant Geoloqi permission to your Facebook account. </p>
<p>At this point, we have now named your previously anonymous user account in Geoloqi, tied to your Twitter or Facebook account. This is a relatively seamless way of &#8220;registering,&#8221; since you knew exactly why you had to authenticate at that point.</p>
<h3>Soft Create: <a href="http://graphthis.me">GraphThis.me</a></h3>
<p>Similar to the idea of &#8220;soft signup&#8221; is the idea of &#8220;soft create.&#8221; Send an email to &#8220;weight@graphthis.me&#8221; where the subject line is your weight, and a graph will immediately be created for you. Replace &#8220;weight&#8221; with other values to create new graphs.</p>
<p>We don&#8217;t require signing up beforehand in order to use the service, since you&#8217;ll be inputting data from your email address anyway. If you want to expand your input options, such as being able to send a tweet or a DM, then you can connect your Twitter account.</p>
<p>We don&#8217;t require that the tag &#8220;weight&#8221; be set up before starting to graph the values. We could have required you to set up the graph name before hand, but that would have increased the barrier to create new graphs.</p>
<h3>Conclusion</h3>
<p>Make it as easy as possible for people to start using your service. Think about whether you actually need more than a unique identifier for a user in order to get them started playing around. Collect new information from your users only as it becomes necessary to provide a new service to them.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/04/soft-signup-lower-the-barrier-to-entry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shortlink Design for Syndicating to Twitter</title>
		<link>http://neverusethisfont.com/blog/2011/03/shortlink-design-for-syndicating-to-twitter/</link>
		<comments>http://neverusethisfont.com/blog/2011/03/shortlink-design-for-syndicating-to-twitter/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 20:11:06 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[fsw]]></category>
		<category><![CDATA[indieweb]]></category>
		<category><![CDATA[shortlink]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=448</guid>
		<description><![CDATA[Tantek Çelik has been using his Falcon project to create short-form and long-form content on his site, and syndicate it out to Twitter. Falcon is a personal publishing (tweeting, blogging, realtime syndicating) web application created in the true spirit of the Indie Web. When syndicating content to other sites, a good practice is to include [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tantek.com">Tantek Çelik</a> has been using his <a href="http://tantek.com/w/Falcon">Falcon</a> project to create short-form and long-form content on his site, and syndicate it out to Twitter. Falcon is a personal publishing (tweeting, blogging, realtime syndicating) web application created in the true spirit of the <a href="http://indiewebcamp.com">Indie Web</a>. </p>
<p>When syndicating content to other sites, a good practice is to include a link back to the original content. This has the effect of letting people know that this copy is not the original, and lets them find the original if they want to cite or link to it.</p>
<p>Unfortunately, Twitter has no mechanism for including this &#8220;citation&#8221; link anywhere except in the text of the tweet itself. This means if you&#8217;re syndicating content to Twitter and want to include a link back, the link will become part of the tweet. This ends up looking something like this:</p>
<p><a href="http://twitter.com/t/status/48826022099030017"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/t-2011-03-28_1306.png" alt="" title="t-2011-03-28_1306" width="500" class="aligncenter size-full wp-image-468" /></a></p>
<p>Now I don&#8217;t know about you, but when I see a link in an interesting tweet, I am inclined to click it. The problem with these links is that they often link back to tantek.com which has an exact copy of the tweet text and no additional content. I often find myself disappointed after clicking, because I was expecting to see more. Sometimes, @t&#8217;s tweets are in fact cut short and do link to more content, such as in <a href="http://twitter.com/t/status/31179809501483009">this example</a>.</p>
<p>After hearing this feedback from a couple people, Tantek realized he needed a solution to indicate whether there is additional content available when following the link. He proposed this format:</p>
<p><a href="http://tantek.com/2011/078/t3/falcon-permashortlink-design-citation-url-more"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/t-2011-03-28_1252.png" alt="" title="t-2011-03-28_1252" width="500" class="aligncenter size-full wp-image-454" /></a></p>
<p>So far this has been working great. Now, tweets with no additional content look like this:</p>
<p><a href="http://twitter.com/t/status/52416173500940289"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/t-2011-03-28_1255.png" alt="" title="t-2011-03-28_1255" width="500" class="aligncenter size-full wp-image-457" /></a></p>
<p>while tweets with additional content include the &#8220;http://&#8221; prefix.</p>
<p>I think another great convention would be to use a colon to indicate additional content. It&#8217;s a natural indicator of &#8220;more&#8221; and generally draws interest to the thing following the colon. </p>
<div style="font-size: 16pt; line-height: 1.2em;">Would you be more likely to click this link <a href="http://aaron.pk/2DS">http://aaron.pk/2DS</a> or this link: <a href="http://aaron.pk/2DS">http://aaron.pk/2DS</a>.</div>
<p>Tantek has already used this convention, possibly without realizing it, as observed in this tweet:</p>
<p><a href="http://twitter.com/t/status/52416173500940289"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/t-2011-03-28_1303.png" alt="" title="t-2011-03-28_1303" width="500" class="aligncenter size-full wp-image-466" /></a></p>
<p>So what do you think? Should this be the convention for syndicating content?</p>
<blockquote style="font-size: 16pt;"><p>
No content other than this text (ttk.me/t4B12)</p>
<p>There is some more content available here: <a href="http://ttk.me/t4B13">http://ttk.me/t4B13</a>
</p></blockquote>
<hr />
<p>If you are interested in this topic, you might also be interested in attending <a href="http://indiewebcamp.com">IndieWebCamp</a> in Portland, Oregon in June, 2011. </p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/03/shortlink-design-for-syndicating-to-twitter/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>URL Shortener as a Search Interface</title>
		<link>http://neverusethisfont.com/blog/2011/03/url-shortener-as-a-search-interface/</link>
		<comments>http://neverusethisfont.com/blog/2011/03/url-shortener-as-a-search-interface/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 18:41:44 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[cyborg anthropology]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[url shortener]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=431</guid>
		<description><![CDATA[cyborganthropology.com is quickly becoming the default online resource for everything relating to Cyborg Anthropology. With over 800 articles and growing daily, it&#8217;s possible to find nearly anything you can think of. We recently registered the domain &#8220;anth.ro&#8221; to use as a URL shortener to articles on cyborganthropology.com. I suggested creating a business card such as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cyborganthropology.com">cyborganthropology.com</a> is quickly becoming the default online resource for everything relating to Cyborg Anthropology. With over 800 articles and growing daily, it&#8217;s possible to find nearly anything you can think of.</p>
<p>We recently registered the domain &#8220;<strong>anth.ro</strong>&#8221; to use as a URL shortener to articles on cyborganthropology.com. I suggested creating a business card such as this, which would allow Amber to write in arbitrary text following the URL after having a conversation with someone and giving them the card.</p>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/anthro-business-card.png" alt="" title="anthro-business-card" width="530" height="304" class="aligncenter size-full wp-image-445" /></p>
<p>Since she would obviously be offline while handing out cards, there would be no way to know for sure if a certain URL existed. The goal is to be able to write down any topic on the card and have the recipient be taken to the corresponding content when they get back to their computer.</p>
<h4>Site search</h4>
<p>If you didn&#8217;t already know, you can add &#8220;site:cyborganthropology.com&#8221; to the end of any search in Google to restrict your search to a specific website. Try it here: <a href="http://www.google.com/search?q=Second+self+site:cyborganthropology.com">google.com/search?q=Second+self+site:cyborganthropology.com</a>. This is a great start, because this lets us search the wiki for anything using Google&#8217;s excellent search algorithms and spelling correction.</p>
<h4>I&#8217;m Feeling Lucky</h4>
<p>Since we&#8217;ve restricted the search to this site, we can be reasonably confident that the first match is the one we intended. If we were to press Google&#8217;s &#8220;I&#8217;m feeling lucky&#8221; button, we&#8217;d probably get a good result. A quick Google search revealed that I can craft a URL which will automatically redirect to the first result, just like what happens when you press the button!</p>
<p>Adding &#8220;btnI=I&#8217;m+Feeling+Lucky&#8221; to the query string will automatically redirect the visitor.</p>
<p>Now our full search URL looks like this. Clicking this link will redirect you to the first page on the wiki matching &#8220;Second self&#8221;.</p>
<p><a href="http://www.google.com/search?q=Second+self+site:cyborganthropology.com&#038;btnI=I'm+Feeling+Lucky">http://www.google.com/search?q=Second+self+site:cyborganthropology.com&#038;btnI=I&#8217;m+Feeling+Lucky</a></p>
<h4>Short Domain</h4>
<p>Now let&#8217;s put that together with the short domain, <strong>anth.ro</strong>. We can easily set up a small script to redirect &#8220;http://anth.ro/second+self&#8221; to the full google search query. However, we&#8217;d ideally like to get some better Google analytics on how many times this URL shortener was used, so we&#8217;ll need to add some tracking parameters to the URL. Since we lose control of the visitor if we send them straight to Google, instead, we can query Google ourselves first to get the destination URL.</p>
<p>Here is a short PHP script which will do the following:</p>
<ul>
<li>Query Google with the &#8220;I&#8217;m feeling lucky&#8221; option to find the best match on our site</li>
<li>Add our additional tracking parameters</li>
<li>Redirect the browser to the page on the wiki with the tracking code</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://www.google.com/search?btnI=I\'m+Feeling+Lucky&amp;q='</span> <span style="color: #339933;">.</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'code'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'+site%3Acyborganthropology.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// Don't follow redirects, we want the first Location header</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_HEADER<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>             <span style="color: #666666; font-style: italic;">// Return the headers in the output	curl_setopt($ch, CURLOPT_USERAGENT, &quot;Mozilla&quot;);     // Set the user agent to Mozilla so Google doesn't block the query</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_NOBODY<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>             <span style="color: #666666; font-style: italic;">// Don't include the response body in the output</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     <span style="color: #666666; font-style: italic;">// Return the response in a variable instead of printing it out</span>
<span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// If there was a Location header found, use it, otherwise, Google couldn't find a match</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Location: (.+)/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$response</span><span style="color: #339933;">,</span> <span style="color: #000088;">$match</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$match</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// If the search result included query string parameters, parse those out</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'query'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">parse_str</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// Add the search term as the &quot;q&quot; parameter. This is so Google Analytics will treat this as a &quot;site search&quot; query</span>
    <span style="color: #666666; font-style: italic;">// and include it in the search analytics. You'll also need to add &quot;q&quot; to the &quot;include site search&quot; section in Google Analytics</span>
    <span style="color: #000088;">$query</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'q'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'code'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// Add &quot;anth.ro&quot; as the utm_source</span>
    <span style="color: #000088;">$query</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'utm_source'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'anth.ro'</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// Add &quot;ShortURL&quot; as the medium. These end up appearing in the &quot;Traffic Sources&quot; list as &quot;anth.ro / ShortURL&quot;</span>
    <span style="color: #000088;">$query</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'utm_medium'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'ShortURL'</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$q</span> <span style="color: #339933;">=</span> <span style="color: #990000;">http_build_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Redirect the user to the page specified by google with our additional parameters included</span>
    <span style="color: #000088;">$location</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://cyborganthropology.com'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'path'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'?'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$q</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTTP/1.1 302 Moved Temporarily'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$location</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// If there were no results returned from Google's I'm feeling lucky button, redirect to a Google search page</span>
<span style="color: #666666; font-style: italic;">// This most likely happens on a typo</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTTP/1.1 302 Moved Temporarily'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location: http://www.google.com/search?q='</span> <span style="color: #339933;">.</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'code'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'+site%3Acyborganthropology.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h4>Search</h4>
<p>With this in place, you can now use the <strong><a href="http://anth.ro">anth.ro</a></strong> domain as a search interface to the wiki! You can type in anything after anth.ro and you&#8217;ll either be taken to a page on the wiki or to a page of search results! We didn&#8217;t have to write any search code, we just let Google take care of that since that&#8217;s what they do best!</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/03/url-shortener-as-a-search-interface/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to build a multi-user Delicious clone with WordPress and Delicious XML Exporter</title>
		<link>http://neverusethisfont.com/blog/2010/12/how-to-build-a-multi-user-delicious-clone-with-wordpress-and-delicious-xml-exporter/</link>
		<comments>http://neverusethisfont.com/blog/2010/12/how-to-build-a-multi-user-delicious-clone-with-wordpress-and-delicious-xml-exporter/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 12:14:06 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[bookmark]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[scuttle]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=321</guid>
		<description><![CDATA[If you&#8217;re like me, you&#8217;ve probably got a lot of bookmarks saved on Delicious. If you&#8217;re not, you might know someone who does. With Delicious going offline, the question is where people are going to be taking their Delicious bookmarks? If you have a Delicious account (created after the Yahoo! acquisition), your only download option [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://deliciousxml.com/"><img class="alignleft" style="margin: 10px;" src="/blog/wp-content/uploads/2010/12/delicious-xml-exporter.png" alt="" width="457" height="133" /></a></p>
<p>If you&#8217;re like me, you&#8217;ve probably got a lot of bookmarks saved on Delicious. If you&#8217;re not, you might know someone who does. With Delicious going offline, the question is where people are going to be taking their Delicious bookmarks? If you have a Delicious account (created after the Yahoo! acquisition), your only download option is a html download exporting to browser bookmarks. This doesn&#8217;t give anyone much freedom in where you can take your data. To ease this frustration, <a href="http://twitter.com/caseorganic">@caseorganic</a> and I set out to solve this issue.</p>
<h3>WordPress and Delicious XML</h3>
<p><a href="http://links.aaron.pk"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2010/12/aaronpk-bookmarks-site-300x184.png" alt="" title="aaronpk-bookmarks-site" width="300" height="184" class="alignright size-medium wp-image-328" /></a></p>
<p>Here&#8217;s a live <a href="http://links.aaron.pk/">Delicious clone running WordPress with data from Delicious XML</a>.</p>
<p><a href="http://deliciousxml.com">Delicious XML Exporter</a> is an export tool takes your Delicious bookmarks and exports them as XML, allowing you easily import them into other systems.</p>
<h3>Importing Delicious XML data to WordPress</h3>
<p>Install WordPress and the <a href="http://links.aaron.pk/about/">three plugins here</a>. This is a custom post type for storing bookmarks, a Twenty Ten child theme for displaying the custom post types, and an import tool which will import Delicious bookmarks from the XML export.</p>
<p>Once you install the plugins and theme, use the <a href="http://deliciousxml.com">Delicious XML</a> utility to download an XML file of all your bookmarks from Delicious. It&#8217;s secure OAuth, so you never have to enter your password.</p>
<p>Then, in WordPress, click on &#8220;Import&#8221;, and choose the &#8220;Delicious&#8221; option. Upload the XML file and press import. Your bookmarks and tags will be imported and functional!</p>
<h3>Happy bookmarking!</h3>
<p>Enjoy, and let me know if it works for you. If you find it helpful, let <a href="http://twitter.com/caseorganic">@caseorganic</a> and <a href="http://twitter.com/aaronpk">I</a> know!</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2010/12/how-to-build-a-multi-user-delicious-clone-with-wordpress-and-delicious-xml-exporter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Why do I use Tropo over Twilio?</title>
		<link>http://neverusethisfont.com/blog/2010/12/why-do-i-use-tropo-over-twilio/</link>
		<comments>http://neverusethisfont.com/blog/2010/12/why-do-i-use-tropo-over-twilio/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 19:14:58 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Server Software]]></category>
		<category><![CDATA[phono]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[tropo]]></category>
		<category><![CDATA[twilio]]></category>
		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=291</guid>
		<description><![CDATA[Many people keep asking me why I use Tropo instead of Twilio. It seems that Twilio does a great job of getting the word out about their service, so many people end up using them first. But there are a few reasons I&#8217;m using Tropo instead. Basically it comes down to features, scalability and support. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tropo.com"><img src="/blog/wp-content/uploads/2010/12/Tropo-Vert1.png" alt="Tropo Logo" title="Tropo-Vert" width="180" height="150" class="alignright size-full wp-image-301 no-border" /></a>Many people keep asking me why I use <a href="http://blog.tropo.com">Tropo</a> instead of Twilio. It seems that Twilio does a great job of getting the word out about their service, so many people end up using them first. But there are a few reasons I&#8217;m using Tropo instead. Basically it comes down to features, scalability and support.</p>
<h3>AIM, Yahoo IM, MSN, Jabber and Twitter!</h3>
<p>In addition to sending SMSs and calling phone numbers, Tropo can send messages over <a href="https://www.tropo.com/docs/webapi/say.htm">other text channels</a> such as AIM, Google Chat, MSN, Yahoo IM, Jabber and Twitter, and can also call Skype and SIP numbers. </p>
<h3>In-Browser Phone</h3>
<p>Tropo recently released <a href="http://phono.com">Phono</a>, a browser-based SIP client, so you can now do things like have a click-to-call button on your website which will use the computer&#8217;s mic and speakers to make the call!</p>
<h3>Browser-Based Chat Client</h3>
<p>Phono also turns a browser into a Jabber client. Your browser gets an address you can use to send messages to via the Jabber protocol. This means you can quickly make a <a href="http://s.phono.com/releases/0.1/samples/kitchen-sink/index.htm">chat interface</a> without having to build the server-side code dealing with sockets.</p>
<h3>Custom Caller ID</h3>
<p>Tropo lets you <a href="https://www.tropo.com/docs/webapi/call.htm">set the caller ID</a> of outgoing calls to any arbitrary phone number, which can be used to more tightly integrate with existing phone systems. For example, I&#8217;m using caller ID tricks for a client to route calls directly to extensions in their office phone system.</p>
<h3>Voice Recognition</h3>
<p><a href="https://www.tropo.com/docs/webapi/ask.htm"><img src="/blog/wp-content/uploads/2010/12/2010-12-16_1023.png" alt="" title="2010-12-16_1023" width="261" height="53" class="alignleft size-full wp-image-299" /></a> Tropo can do great <a href="https://www.tropo.com/docs/webapi/ask.htm">voice recognition</a> to let callers speak instead of enter digits. For example, you can prompt a caller to say &#8220;sales&#8221; or &#8220;support&#8221; instead of just entering 1 or 2 on the keypad.  This is especially great for when you need to ask the caller to choose from a large number of options such as states, or cities within a state. </p>
<h3>Free for Development</h3>
<p>Tropo doesn&#8217;t charge anything for development applications until you put them onto the production network. This is really great for experimenting with a new idea without running down your development &#8220;credits.&#8221; </p>
<h3>Scalability</h3>
<p>Twilio runs on Amazon EC2. Tropo runs in the private <a href="http://voxeo.com">Voxeo</a> network. &#8220;Co-tenancy is hard.&#8221; says John from Netflix in a blog post titled <a href="http://techblog.netflix.com/2010/12/5-lessons-weve-learned-using-aws.html">5 Lessons We’ve Learned Using AWS</a>. Personally, voice data and SMSs are not something I want running in a shared environment where resources may be allocated away from a call while I&#8217;m on the phone.</p>
<p>Additionally, if you are building an application that needs to be secure, such as for a bank or a government agency, they probably won&#8217;t allow the application to run on the Amazon cloud for security reasons. With Tropo, you can license Prophecy and run your own Tropo platform in a secure location.</p>
<h3>Support</h3>
<p>I&#8217;ve had nothing but great experiences with Tropo support. They are very responsive to tickets submitted, I usually get a response back in less than an hour.</p>
<p>There are also several Tropo staff available on their <a href="https://www.tropo.com/chat/">IRC channel</a> (#tropo on freenode.net) at pretty much any time of the day. There are also several community members that hang out on the channel and can help with questions and issues.</p>
<h3>More Information</h3>
<p>Here are some links about projects built using Tropo.</p>
<ul>
<li><a href="/blog/2010/12/random-hacks-of-kindness/">Mobile Assessment of Damage Hotline</a> built during the Random Hacks of Kindness hackathon in December 2010.</a></li>
<li><a href="http://oakhazelnut.com/2010/11/20/loqi-me-wins-best-in-show-at-civicapps-for-greater-portland-competition/">Loqi.me Wins Most Useful App and Best in Show at CivicApps Award Ceremony</a></li>
<li><a href="http://geoloqi.com/blog/2010/10/apps-built-at-the-tropo-geoloqi-open-gov-hackathon/">Apps built at the Geoloqi+Tropo hackathon</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2010/12/why-do-i-use-tropo-over-twilio/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Tracking typos of your domain name in Google Analytics</title>
		<link>http://neverusethisfont.com/blog/2010/12/tracking-typos-of-your-domain-name-in-google-analytics/</link>
		<comments>http://neverusethisfont.com/blog/2010/12/tracking-typos-of-your-domain-name-in-google-analytics/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 17:41:53 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Server Software]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[redirection]]></category>
		<category><![CDATA[tracking]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=279</guid>
		<description><![CDATA[Say you want to register a couple different typos of your domain name, and redirect everyone seamlessly to the correct site. This can be done quite easily in Apache using ServerAlias and a simple RewriteRule. I just registered geoloqui.com after noticing a couple articles linking to it instead of geoloqi.com. But then I thought, wouldn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Say you want to register a couple different typos of your domain name, and redirect everyone seamlessly to the correct site. This can be done quite easily in Apache using ServerAlias and a simple RewriteRule. I just registered geoloqui.com after noticing a couple articles linking to it instead of geoloqi.com. But then I thought, wouldn&#8217;t it be useful if I could track these typos and see which ones are most common? Turns out it&#8217;s not difficult! </p>
<p>Here is a snippet of my virtual hosts definition for geoloqi.com:</p>
<pre>
&lt;VirtualHost *:80&gt;
	ServerName geoloqi.com
	ServerAlias *.geoloqi.com
	ServerAlias geoloqui.com
	ServerAlias *.geoloqui.com

	RewriteEngine on
	RewriteCond %{HTTP_HOST} !^geoloqi.com
	RewriteRule ^/(.*)$ http://geoloqi.com/$1?utm_source=DomainRedirect&#038;utm_medium=%{HTTP_HOST} [R=permanent,L]
...
</pre>
<p>This will make domain typos visible in Google Analytics under the &#8220;All Traffic Sources&#8221; section. You can clearly see the referrals from the typo&#8217;d domain name at the bottom of this list.</p>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2010/12/referrers_-_fake.png" alt="" title="geoloqi.com traffic sources" width="522" height="348" class="aligncenter size-full wp-image-282" /></p>
<p>You could also use the filter box to search for &#8220;DomainRedirect&#8221; and see only the typos. </p>
<p>I&#8217;d be curious to know if anybody else has other suggestions for tracking this type of thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2010/12/tracking-typos-of-your-domain-name-in-google-analytics/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Random Hacks of Kindness &#8211; December 2010</title>
		<link>http://neverusethisfont.com/blog/2010/12/random-hacks-of-kindness/</link>
		<comments>http://neverusethisfont.com/blog/2010/12/random-hacks-of-kindness/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 08:08:24 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[hackathon]]></category>
		<category><![CDATA[rhok]]></category>
		<category><![CDATA[speech]]></category>
		<category><![CDATA[speech recognition]]></category>
		<category><![CDATA[tropo]]></category>
		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=260</guid>
		<description><![CDATA[On the weekend of December 4th and 5th, people gathered in coworking spaces around the world for the Random Hacks of Kindness hackathon. In Seattle, two teams worked on Population Centers in Disaster, and Mobile Assessment of Damage for the Public. Results After a weekend of much hacking, good food, and good company, we came [...]]]></description>
			<content:encoded><![CDATA[<p>On the weekend of December 4th and 5th, people gathered in coworking spaces around the world for the <a href="http://rhok.org">Random Hacks of Kindness</a> hackathon. In Seattle, two teams worked on <a href="http://wiki.rhok.org/Population_Centers_in_Disaster">Population Centers in Disaster</a>, and <a href="http://wiki.rhok.org/MadPub.org">Mobile Assessment of Damage for the Public</a>.</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/aaronpk/5237151780/in/photostream/"><img class="aligncenter" src="http://farm6.static.flickr.com/5245/5237151780_fac6620552.jpg" alt="" width="500" height="333" /></a></p>
<p><strong>Results</strong></p>
<p>After a weekend of much hacking, good food, and good company, we came away with solid problem definitions, UI mockups, and prototypes of an iPhone app, Android app, a website backend, and a voice-powered phone menu.</p>
<p><strong>Mobile Assessment of Damage for the Public</strong></p>
<p>The goal of MadPub.org is to build an application that streamlines the  process of reporting and assessing the amount of damage after the  occurrence of a natural disaster in the United States.  Beta testing  will be for the State of Washington.</p>
<p>In the event of a disaster, each county has a 72 hour window to report a  dollar estimate of damage to the state and federal government in order  meet the threshold for a federal declaration. The current system for  assessing and reporting damage has many inefficiencies, requiring  government personnel from each county to manually fill out a form after  talking on the phone with the person reporting the damage.</p>
<p>To solve this, we are building a system that allows businesses and  individuals to report damage on a variety of platforms including: a  phone tree with voice recognition managed with <a href="http://tropo.com">Tropo</a>, a web form, and Android and iPhone apps.</p>
<p><strong>Information Flow</strong></p>
<p><img class="aligncenter" src="http://snip.aaron.pk/2010-12-05_2048.png" alt="" width="640" /></p>
<p><img class="aligncenter" src="http://snip.aaron.pk/2010-12-05_2049.png" alt="" width="640" /></p>
<p><img class="aligncenter" src="http://snip.aaron.pk/2010-12-05_2050.png" alt="" width="640" /></p>
<p><strong>Mobile Apps</strong></p>
<p>Laurel (<a href="http://twitter.com/laurelfan">@laurelfan</a>) and Chi-Bong Ho built working prototypes of iPhone and Android apps! The apps allows you to enter the required information to gather information about the damage, and you can take photos and send them in the report as well. Mark (<a href="http://twitter.com/malept">@malept</a>) prototyped an HTML5 form using <a href="http://jquerymobile.com">jQuery Mobile</a>.</p>
<p><img class="size-full wp-image-856 alignleft" title="madpub-iphone-screenshot" src="/blog/wp-content/uploads/2010/12/madpub-iphone-screenshot.png" alt="MadPub.org iPhone Version" width="320" height="480" /> <img class="alignright" src="/blog/wp-content/uploads/2010/12/madpub-mobile-web.jpg" alt="MadPub.org Mobile Web Version" width="281" height="500" /></p>
<p><strong>Server</strong></p>
<p>Mark (<a href="http://twitter.com/malept">@malept</a>) and Pat Tressel built a Sahana-backed web form for submitting data, which the mobile applications can also send data to. While that was getting ready, Kav (@kavla) threw together a quick Rails app so uploading from the apps could be tested.</p>
<p><strong>Phone</strong></p>
<p>Aaron (@aaronpk) worked on a phone interface for entering the data. This involved a <a href="http://tropo.com">Tropo</a> app to handle the speech recognition.</p>
<p>Speech recognition is a difficult problem in general, but Tropo provides a great platform to make it a lot easier.</p>
<p>When someone calls the hotline, the Tropo application answers the call and offers to provide an overview of the information the caller will need to answer the questions. It then asks a series of questions needed to fill out the form.</p>
<p>Most questions can be answered with a simple &#8220;yes&#8221; or &#8220;no.&#8221; More complicated questions require more computing power to understand. Even the top of the line speech recognition technologies have a long way to go to understand what people are saying on the phone. How many times have you, a person, asked someone on the phone whether they said &#8220;b&#8221; or &#8220;d&#8221;? Now imagine a computer trying to hear that without any context!</p>
<p>Luckily, Tropo provides a way to recognize speech patterns from a smaller set of vocabulary. Tropo has built-in speech recognition to understand <strong>numbers, currencies and dates</strong>, and you can even specify your own set of options. What this means is that it&#8217;s far easier to get a computer to tell the difference between &#8220;sales&#8221; and &#8220;suppport&#8221; than it is to tell you what word a person said in no context. If you give the computer two options, it can more accurately match what the caller has said.</p>
<p>With this in mind, I set up a system for building survey applications with sets of options. For any questions that have completely free-form answers, such as &#8220;please describe the damages to the property,&#8221; the system records the audio from the caller so that the operator can play back that part of the message later. In fact, every response to every question has the audio recorded automatically so that the individual responses can be played back at a later date.</p>
<p>Here is some sample code showing what it takes to create a survey in this framework.</p>
<p><a href="https://github.com/rhok-seattle/mad-voice/blob/master/survey.php"><img src="/blog/wp-content/uploads/2010/12/madpub-voice-survey-config.png" alt="" title="madpub-voice-survey-definition" width="640" class="aligncenter size-full wp-image-267" /></a></p>
<p>You can see the different types of responses the Tropo can understand. I added the &#8220;[BOOLEAN]&#8221; and &#8220;[RECORD]&#8221; types to the framework which causes Tropo to listen for a &#8220;yes&#8221; or &#8220;no&#8221; response, and that will just accept a recording of whatever the caller speaks.</p>
<p>My goal in designing this <a href="http://tropo.com">Tropo</a> application was to make it as easy as possible to set up survey questions and change them in the future. The application takes care of recording responses and tracking answers, and provides the callers&#8217; responses in the admin&#8217;s web interface.</p>
<p>The data gathered from the call is presented to admins in a web view. Here is an example of a transcript of one of the calls. There are &#8220;listen&#8221; links which will play the audio for that response. Some questions don&#8217;t have recordings because the answers were determined based on other answers. For example, entering a zip code determines the county and state.</p>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2010/12/madpub-call-details.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2010/12/madpub-call-details.png" alt="" title="madpub-call-details" width="338" height="315" class="aligncenter size-full wp-image-275" /></a></p>
<p>If you&#8217;d like to check out the source code to this application, you can <a href="https://github.com/aaronpk/madpub-voice">find it on Github</a>. For more information on Tropo, <a href="https://www.tropo.com/docs/">check out the Tropo documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2010/12/random-hacks-of-kindness/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Workaround for Comcast blocking port 25</title>
		<link>http://neverusethisfont.com/blog/2009/07/workaround-for-comcast-blocking-port-25/</link>
		<comments>http://neverusethisfont.com/blog/2009/07/workaround-for-comcast-blocking-port-25/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 14:01:32 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=71</guid>
		<description><![CDATA[Comcast just started blocking port 25 outgoing. I have several computers at home configured to send email reports of cron jobs. Of course they do this by trying to send mail on port 25 from inside the house to my mail server outside. Now that Comcast is blocking that, I need some other way for [...]]]></description>
			<content:encoded><![CDATA[<p>Comcast just started blocking port 25 outgoing. I have several computers at home configured to send email reports of cron jobs. Of course they do this by trying to send mail on port 25 from inside the house to my mail server outside. Now that Comcast is blocking that, I need some other way for my emails to be delivered.</p>
<p>The easiest solution I could come up with was to tell my mail server to listen on another port such as 587, and have my firewall route requests for port 25 to port 587. Here is the iptables rule to do that!</p>
<p><code>iptables -t nat -A PREROUTING -p tcp -i eth0 -d xx.xx.xx.xx --dport 25 -j DNAT --to-destination :587</code></p>
<p>Where xx.xx.xx.xx is the IP address of my mail server. Now all the computers inside think they are communicating with my mail server on port 25, but the firewall secretly passes the request on to port 587 instead.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2009/07/workaround-for-comcast-blocking-port-25/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Am I really the only one who knows what street I grew up on?</title>
		<link>http://neverusethisfont.com/blog/2009/05/am-i-really-the-only-one-who-knows-what-street-i-grew-up-on/</link>
		<comments>http://neverusethisfont.com/blog/2009/05/am-i-really-the-only-one-who-knows-what-street-i-grew-up-on/#comments</comments>
		<pubDate>Wed, 13 May 2009 01:46:01 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/2009/05/am-i-really-the-only-one-who-knows-what-street-i-grew-up-on/</guid>
		<description><![CDATA[The top trending topic on Twitter the other day was #twitterpornname. This seemingly innocent meme prompts you to find your Twitter porn name by combining the name of your first pet with the street you grew up on, or some variation. Thousands of people began shouting out this information on their Twitter profiles. At this [...]]]></description>
			<content:encoded><![CDATA[<p>The top trending topic on Twitter the other day was <a href="http://search.twitter.com/search?q=%23twitterpornname">#twitterpornname</a>. This seemingly innocent meme prompts you to find your Twitter porn name by combining the name of your first pet with the street you grew up on, or some variation. Thousands of people began shouting out this information on their Twitter profiles.</p>
<p><img class="alignright size-full wp-image-57" style="float: right;" title="twitter_logo" src="http://neverusethisfont.com/blog/wp-content/uploads/2008/10/twitter_logo_s.png" alt="" width="175" height="41" />At this point, little red flags may be going off in your head if you realize that another place you may have seen these questions is&#8230; the <strong>security questions</strong> for your online bank account! &#8220;The name of your first pet&#8221; and &#8220;the street you grew up on&#8221; are common security questions asked by many websites, and probably you&#8217;ve signed up on a few websites that have asked you these.</p>
<p>This meme quickly caused people to seriously think about online security. On one hand, you have people freely giving out the answers to their security questions for their online banking accounts, their student email accounts, etc.</p>
<p><strong>On the other hand,</strong> you have businesses treating this information as if you are the only one who could possibly know it. The whole point of a password is that nobody knows it except you. If I log in to a website and provide my password, the website can be reasonably sure that it is really me logging in. When security questions can be used to reset a password, you&#8217;d better be sure that nobody else knows the answers to the security questions.</p>
<p>Why, then, do businesses assume that you are the only one who knows the answers to &#8220;what street did you grow up on&#8221; or &#8220;what is your mother&#8217;s maiden name&#8221;? Surely you can think of a few other people in your life who know the answers, because they grew up with you, or they are related to you.</p>
<p>So while it&#8217;s generally a bad idea to give out the answers to your security questions on Twitter, there is really a bigger issue here.</p>
<p>Note: You may have arrived at this post because you saw <a href=" http://pin13.net/3f2">my tweet which included my SSN and credit card number</a>. Be assured: this was not my actual SSN or CC#. I was making fun of the fact that people give up personal information so easily.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2009/05/am-i-really-the-only-one-who-knows-what-street-i-grew-up-on/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

