<?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; aaron</title>
	<atom:link href="http://neverusethisfont.com/blog/author/aaron/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>Enabling SSH on the Seagate BlackArmor NAS 220</title>
		<link>http://neverusethisfont.com/blog/2011/07/enabling-ssh-on-the-seagate-blackarmor-nas-220/</link>
		<comments>http://neverusethisfont.com/blog/2011/07/enabling-ssh-on-the-seagate-blackarmor-nas-220/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 01:54:47 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Server Software]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=514</guid>
		<description><![CDATA[I recently acquired a 6 TB Seagate NAS drive which I am using for nightly backups of my servers, as well as snapshots of several Dropbox accounts. While the web interface on the device isn&#8217;t too bad, I wanted a little more control over it, as well as the ability to monitor the device&#8217;s health [...]]]></description>
			<content:encoded><![CDATA[<p>I recently acquired a <a href="http://aaron.pk/asin/B0046TSGNE">6 TB Seagate NAS drive</a> which I am using for nightly backups of my servers, as well as <a href="http://neverusethisfont.com/blog/2010/07/how-to-back-up-dropbox-automatically-daily-weekly-monthly-snapshots/">snapshots of several Dropbox accounts</a>.</p>
<p>While the web interface on the device isn&#8217;t too bad, I wanted a little more control over it, as well as the ability to monitor the device&#8217;s health with some custom <a href="https://github.com/aaronpk/Munin-Plugins">munin graphs</a>.</p>
<p>Here&#8217;s how to enable SSH without wiping the drive and installing custom firmware.</p>
<ol>
<li>Set up a new user account on the device from the web interface, and create a password.</li>
<li>Shut down the device, remove both drives, and connect them to a local computer with SATA cables.</li>
<li>Boot your linux computer with the drives attached, it&#8217;s probably safest to boot from some sort of Live CD. I used Fedora.</li>
<li>When you get to a shell, execute the following commands to mount the drives.<br />
<code>$ mdadm -A /dev/md0 /dev/sda1 /dev/sdb1<br />
mdadm: /dev/md0 has been started with 2 drives.<br />
$ mkdir /mnt/md0<br />
$ mount /dev/md0 /mnt/md0<br />
</code></li>
<li>Add the following line to the file <code>/mnt/md0/etc/inetd.conf</code>:<br />
<code>ssh stream tcp nowait root /usr/sbin/dropbear dropbear -i</code><br />
You can do this in one shell command by executing this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;ssh stream tcp nowait root /usr/sbin/dropbear dropbear -i&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inetd.conf</pre></div></div>

</li>
<li>Edit <code>/mnt/md0/etc/shadow</code> with a text editor, and replace the hashed password for &#8220;root&#8221; with the hashed password of the user you created. The hashed password is the characters between the second two colons, and begins with <code>$1$$</code>.</li>
<li>Unmount the drives and shut down the array:<code><br />
$ cd<br />
$ umount /mnt/md0<br />
$ mdadm -S /dev/md0<br />
mdadm: stopped /dev/md0</code></li>
<li>Put the drives back in the NAS device and turn it back on!</li>
<li>After it boots, you&#8217;ll be able to ssh in as <code>root</code> with the password you set from the web interface.</li>
</ol>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/07/2011-07-10_1850.png" alt="" title="SSH" width="414" height="152" class="aligncenter size-full wp-image-523" /></p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/07/enabling-ssh-on-the-seagate-blackarmor-nas-220/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing contracts is like programming</title>
		<link>http://neverusethisfont.com/blog/2011/06/writing-contracts-is-like-programming/</link>
		<comments>http://neverusethisfont.com/blog/2011/06/writing-contracts-is-like-programming/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 04:39:50 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[contracts]]></category>
		<category><![CDATA[legal]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=511</guid>
		<description><![CDATA[Writing contracts feels a little bit like programming. There is an expected syntax and structure, there are certain key words that have special meaning (i.e. functions, keywords), and removing certain clauses make the entire contract invalid (i.e. runtime error). However, contracts are executed over a much longer timeline.]]></description>
			<content:encoded><![CDATA[<p>Writing contracts feels a little bit like programming. There is an expected syntax and structure, there are certain key words that have special meaning (i.e. functions, keywords), and removing certain clauses make the entire contract invalid (i.e. runtime error). However, contracts are executed over a much longer timeline.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/06/writing-contracts-is-like-programming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Analyzing the iPhone Location Log File</title>
		<link>http://neverusethisfont.com/blog/2011/04/analyzing-the-iphone-location-log-file/</link>
		<comments>http://neverusethisfont.com/blog/2011/04/analyzing-the-iphone-location-log-file/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 06:39:25 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Geo]]></category>
		<category><![CDATA[OS X/Apple]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[tracking]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=499</guid>
		<description><![CDATA[Today at Where 2.0, two data scientists announced a discovery that iPhones are recording GPS positions into a hidden file on the device. I&#8217;ll save a summary for an update of this post, but go read the original article for now. I downloaded the logs from Amber Case&#8216;s iPhone, and have been looking through them [...]]]></description>
			<content:encoded><![CDATA[<p>Today at Where 2.0, two data scientists <a href="http://radar.oreilly.com/2011/04/apple-location-tracking.html">announced a discovery</a> that iPhones are recording GPS positions into a hidden file on the device. I&#8217;ll save a summary for an update of this post, but go read the original article for now.</p>
<p>I downloaded the logs from <a href="http://caseorganic.com/blog/">Amber Case</a>&#8216;s iPhone, and have been looking through them to see what&#8217;s there. Turns out it&#8217;s a lot more than just the cell tower positions of the phone. There&#8217;s also a list of all wifi access points the device has seen, as well as the best-guess position of each wifi access point!</p>
<p>There also seems to be a table in the database containing a record of all the requests that other programs have made for your location, which includes the app&#8217;s bundle ID. Here&#8217;s a snippet of the logs:</p>
<div style="overflow: scroll; background-color: #eee;">
<table><TR><TH>MCC</TH><TH>MNC</TH><TH>LAC</TH><TH>CI</TH><TH>RSSI</TH><TH>ARFCN</TH><TH>PSC</TH><TH>RSCP</TH><TH>ECN0</TH><TH>Operator</TH><TH>Transmit</TH><TH>BundleId</TH><TH>Timestamp</TH><TH>Latitude</TH><TH>Longitude</TH><TH>HorizontalAccuracy</TH><TH>Altitude</TH><TH>VerticalAccuracy</TH><TH>Speed</TH><TH>Course</TH><TH>Confidence</TH></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2067187</TD><TD>-1</TD><TD>9721</TD><TD>414</TD><TD>96</TD><TD>7</TD><TD>AT&amp;T</TD><TD>-1</TD><TD></TD><TD>325045574.119049</TD><TD>37.39194315</TD><TD>-121.977325016667</TD><TD>47.4216335497634</TD><TD>53.2738933563232</TD><TD>70.2810013757997</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2067187</TD><TD>-1</TD><TD>9721</TD><TD>414</TD><TD>109</TD><TD>12</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.geoloqi</TD><TD>325044683.18984</TD><TD>37.3916252333333</TD><TD>-121.9769063</TD><TD>47.4216335497634</TD><TD>35.2740898132324</TD><TD>70.2810013757997</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2039667</TD><TD>-1</TD><TD>9721</TD><TD>276</TD><TD>76</TD><TD>4</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.localmind.ios</TD><TD>325043720.464916</TD><TD>37.4044454</TD><TD>-121.9751501</TD><TD>162.957953194342</TD><TD>28.2493667602539</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2039667</TD><TD>-1</TD><TD>9721</TD><TD>276</TD><TD>72</TD><TD>5</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.naveenium.foursquare</TD><TD>325024994.168633</TD><TD>37.4042630166667</TD><TD>-121.975922583333</TD><TD>162.957953194342</TD><TD>28.2504062652588</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2070748</TD><TD>-1</TD><TD>512</TD><TD>180</TD><TD>96</TD><TD>13</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.apple.camera</TD><TD>324957354.61129</TD><TD>37.3848867333333</TD><TD>-121.995491966667</TD><TD>162.957953194342</TD><TD>28.3031120300293</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2068368</TD><TD>-1</TD><TD>9721</TD><TD>180</TD><TD>99</TD><TD>14</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.alamofire.gowalla</TD><TD>324956280.786805</TD><TD>37.3848867333333</TD><TD>-121.995491966667</TD><TD>162.957953194342</TD><TD>28.3031120300293</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56983</TD><TD>2052127</TD><TD>-1</TD><TD>9721</TD><TD>464</TD><TD>89</TD><TD>12</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.google.GoogleLatitude</TD><TD>324940590.288545</TD><TD>37.4049282</TD><TD>-121.976459016667</TD><TD>162.957953194342</TD><TD>28.2496871948242</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56977</TD><TD>2497652</TD><TD>-1</TD><TD>4385</TD><TD>299</TD><TD>71</TD><TD>9</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.apple.Maps</TD><TD>324879306.751405</TD><TD>37.5537628166667</TD><TD>-122.309797466667</TD><TD>76.3568859153783</TD><TD>46.2922878265381</TD><TD>113.17575656752</TD><TD>0.0</TD><TD>158.0</TD><TD>90</TD></TR><TR><TD>310</TD><TD>410</TD><TD>56976</TD><TD>2757485</TD><TD>-1</TD><TD>9721</TD><TD>252</TD><TD>89</TD><TD>9</TD><TD>AT&amp;T</TD><TD>-1</TD><TD>com.yelp.yelpiphone</TD><TD>324873997.281525</TD><TD>37.7768964333333</TD><TD>-122.3948506</TD><TD>162.957953194342</TD><TD>50.9832305908203</TD><TD>228.343673256242</TD><TD>0.0</TD><TD>-1.0</TD><TD>90</TD></TR></table>
</div>
<p>The Bundle IDs of the apps that requested location are clearly visible, and it also shows where the phone was when the app requested the location. This suggests to me that the purpose for these logs is not malicious on Apple&#8217;s part at all.</p>
<p>I also observed that the timestamps of the logs in the <code>CellLocation</code> table were not very granular. There seemed to be batches of 30-50 significantly different locations at a time, with anywhere from 1 to 12 hours between timestamps. My guess after asking Amber about her syncing habits, is that the timestamps correspond to the date the phone was synced with the computer, not necessarily the date the timestamp was recorded. This is speculation at this point, and I will hopefully be able to come to a better conclusion after some more analysis of the data.</p>
<p>If it in in fact the timestamp of the sync, this would seem to further contradict the notion that Apple is covertly tracking your every move, since location data is far more useful when it contains a timestamp associated with it. This data says something more like &#8220;Here are all the cell towers the phone has seen since it was last synced.&#8221; I&#8217;m not sure exactly what purpose this would serve.</p>
<p>Some of the other database tables that piqued my interest included:</p>
<p><code>WifiLocation</code> &#8211; a database of all wifi hotspots seen, their mac addresses and latitude/longitudes</p>
<p><code>Fences</code> &#8211; my guess is this corresponds to Apple&#8217;s <a href="https://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLRegion_class/Reference/Reference.html">CLRegion</a> API, which allows iOS developers to define fences which trigger a method when the user crosses the boundary.</p>
<p><code>*Harvest</code> &#8211; All tables ending in Harvest correlate with the different location tracking types, Cell, CDMA, Wifi, etc. These tables track requests made to the various location providers.</p>
<p>So far it&#8217;s been a lot of fun to look through this data, and I&#8217;m looking forward to continuing to play with the data. Many thanks to <a href="http://twitter.com/petewarden">Pete Warden</a> and <a href="http://about.me/alasdairallan">Alasdair Allan</a> for pointing out this log!</p>
<hr />
<p>Aaron Parecki is the co-founder of <a href="http://geoloqi.com">Geoloqi.com</a>, a private, real-time location sharing platform. Geoloqi allows you to securely track your location and you always have complete control over who can see your location. You can leave yourself a Geonote at a place which will be sent to you next time you&#8217;re there. <a href="http://geoloqi.org/API">Geoloqi has an API</a> which lets you download all of your location history, as well as build fun apps on top of the platform!</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/04/analyzing-the-iphone-location-log-file/feed/</wfw:commentRss>
		<slash:comments>5</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>Tools for Co-Working Spaces</title>
		<link>http://neverusethisfont.com/blog/2011/03/tools-for-co-working-spaces/</link>
		<comments>http://neverusethisfont.com/blog/2011/03/tools-for-co-working-spaces/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 00:06:38 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[geoloqi]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[phono]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[souk]]></category>
		<category><![CDATA[tropo]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=406</guid>
		<description><![CDATA[I recently spent some time at Souk, a co-working space in Portland. It&#8217;s a great space with lots of room and lots of light, which is important when you&#8217;re going to spend hours on end somewhere. Over the course of a couple days, it became apparent that there are several tools that can help facilitate [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_411" class="wp-caption alignleft" style="width: 310px"><a href="http://www.soukllc.com/"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/souk-IMG_1308-300x225.jpg" alt="Souk Co-Working Space" title="Souk Co-Working Space" width="300" height="225" class="size-medium wp-image-411" /></a><p class="wp-caption-text">Souk Co-Working Space</p></div> I recently spent some time at <a href="http://soukllc.com">Souk</a>, a co-working space in Portland. It&#8217;s a great space with lots of room and lots of light, which is important when you&#8217;re going to spend hours on end somewhere. Over the course of a couple days, it became apparent that there are several tools that can help facilitate the coming and going of people in spaces like these.</p>
<p><a href="http://tropo.com"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2010/12/Tropo-Vert1.png" alt="" title="Tropo-Vert" width="180" height="150" class="alignright size-full wp-image-301" /></a> <strong><a href="https://github.com/tropo/CloudKnock">CloudKnock</a></strong> is an application built using <a href="http://tropo.com">Tropo</a> to facilitate letting people in to co-working spaces. When you need to get in, you can text &#8220;knock knock&#8221; to the application&#8217;s phone number. The application will then forward your message on to anyone who has checked in to the space. Since it uses Tropo it works not only by SMS but also by AIM, MSN, Yahoo IM, or Jabber! This means your &#8220;knock knock&#8221; SMS can be seamlessly forwarded on to people sitting at their desks using Gmail chat or AIM. While this app won&#8217;t actually open the door for you, that also means there is no physical hardware to install making it feasible to start using it today! <a href="https://github.com/tropo/CloudKnock">Download the source code</a> on Github, and <a href="https://www.tropo.com/account/register.jsp">sign up with Tropo</a> to get started.</p>
<p><a href="https://github.com/aaronpk/Tropo-Demos/blob/master/find-me-on-geoloqi/tropo.php"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/where-is-aaron-200x300.png" alt="" title="Where is Aaron?" width="200" height="300" class="alignright size-medium wp-image-417" /></a> Have you ever wondered where someone in your group ran off to at lunch? Wouldn&#8217;t it be great if you could find out where they are without having to call them or text them and wait for their reply? Using Tropo, you can just send a quick IM to a bot which can find out where they are if they&#8217;re using <a href="http://geoloqi.com">Geoloqi</a>. </p>
<p>Every person who you want to track should download the <a href="http://geoloqi.com">Geoloqi app</a> for iPhone or Android.</p>
<p>From your map page, create a new shared link which never expires.<br />
<img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/new-link-2011-03-18_1656.png" alt="" title="new-link-2011-03-18_1656" width="227" height="131" class="alignleft size-full wp-image-420" /></p>
<div style="clear:both;"></div>
<p>Copy the token at the end of the URL that is created, and paste it into the users array in the script.<br />
<img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/geoloqi-link-2011-03-18_1654-300x184.png" alt="" title="geoloqi-link-2011-03-18_1654" width="300" height="184" class="aligncenter size-medium wp-image-423" /></p>
<p><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/03/user-setup-2011-03-18_1700.png" alt="" title="user-setup-2011-03-18_1700" width="576" height="81" class="aligncenter size-full wp-image-425" /></p>
<p>Copy the <a href="https://github.com/aaronpk/Tropo-Demos/blob/master/find-me-on-geoloqi/tropo.php">sample code</a> into a new Tropo scripting application, and add the Geoloqi shared link tokens for everyone in your group you want to track. You can give people nicknames so they can be identified by multiple names. </p>
<p>Then, you can send a message (via SMS or IM) like &#8220;Where is Aaron?&#8221; and you&#8217;ll get a quick reply with your friend&#8217;s location if they&#8217;re tracking themselves using Geoloqi!</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/03/tools-for-co-working-spaces/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How to Distribute your iOS Apps Over the Air</title>
		<link>http://neverusethisfont.com/blog/2011/01/how-to-distribute-your-ios-apps-over-the-air/</link>
		<comments>http://neverusethisfont.com/blog/2011/01/how-to-distribute-your-ios-apps-over-the-air/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 18:33:20 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[OS X/Apple]]></category>
		<category><![CDATA[adhoc]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[beta test]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=351</guid>
		<description><![CDATA[We&#8217;ve been using Apple&#8217;s Wireless distribution method for sending out beta invites of Geoloqi. It&#8217;s a much easier process for our beta testers than syncing with iTunes to install the app! They just click on a link from their phones, and they can download the app immediately! How, you ask? Apple has made this possible [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been using <a href="http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html">Apple&#8217;s Wireless distribution</a> method for sending out beta invites of <a href="http://geoloqi.com">Geoloqi</a>. It&#8217;s a much easier process for our beta testers than syncing with iTunes to install the app! They just click on a link from their phones, and they can download the app immediately!</p>
<p>How, you ask? Apple has made this possible since iOS 4.0, but not many developers have noticed it&#8217;s available. <a href="http://testflightapp.com">TestFlight</a> has make a great wrapper on top of this functionality, but it&#8217;s possible to do it without using TestFlight too!</p>
<h2>How to set up Ad Hoc distribution</h2>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/1-build-and-archive1.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/1-build-and-archive1-277x300.png" alt="" title="1 build and archive" width="277" height="300" class="alignright size-medium wp-image-364" /></a></p>
<p>First, build and archive your application from XCode. <strong>Make sure you&#8217;ve selected the Developer provisioning profile</strong> when building your app. This must pass code-signing verification or people will get an error when trying to install.</p>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/organizer-archived-applications.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/organizer-archived-applications.png" alt="" title="organizer archived applications" width="209" height="190" class="alignleft size-full wp-image-385" /></a></p>
<div style="clear:both;"></div>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/2-share.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/2-share-300x121.png" alt="" title="2 share" width="300" height="121" class="alignright size-medium wp-image-355" /></a></p>
<p>Open Organizer if it&#8217;s not already open. Select your archived application, then click &#8220;Share.&#8221; The next step is slightly misleading. Choose &#8220;Distribute for Enterprise&#8221; here, even if you don&#8217;t have an enterprise account! Make sure you <strong>select the same provisioning profile</strong> you signed the app with! </p>
<div style="clear:both;"></div>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/3-choose-developer-identity.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/3-choose-developer-identity.png" alt="" title="3 choose developer identity" width="570" height="214" class="aligncenter size-full wp-image-356" /></a></p>
<div style="clear:both;"></div>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/creating-signed-ipa-archive.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/creating-signed-ipa-archive.png" alt="" title="creating signed ipa archive" width="197" height="30" class="alignright size-full wp-image-357" /></a></p>
<p>This is the critical step. At this point, XCode is bundling the provisioning profile into the IPA archive so that your users only have to download <strong>one file</strong>! No need to have them install the provisioning profile separately, since it will be included in the app archive!</p>
<p>Next you&#8217;ll need to fill out the form that appears. XCode uses this info to create a .plist file. If you&#8217;re comfortable editing the .plist file directly, you can do that instead. <strong>Here&#8217;s <a href="http://neverusethisfont.com/blog/wp-content/plist/Geoloqi.plist" target="_blank">a sample .plist</a> file that XCode creates from this dialog.</strong></p>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/4-app-details-e1295628145206.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/4-app-details-e1295628145206.png" alt="" title="4 app details" width="570" height="304" class="aligncenter size-full wp-image-361" /></a></p>
<div style="clear:both;"></div>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/5-ipa-and-plist-files.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/5-ipa-and-plist-files-300x85.png" alt="" title="5 ipa and plist files" width="300" height="85" class="alignright size-medium wp-image-368" /></a></p>
<p>At this point, XCode prompts you to save the files to a folder. You&#8217;ll end up with two files, a .plist and an .ipa file. Now comes the easy part!</p>
<p>You just need to create a web page with a link to the .plist file using the special <code>itms-services://</code> protocol. This might look something like the code below.</p>
<div style="clear:both;"></div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;a href=&quot;itms-services://?action=download-manifest&amp;url=http://loqi.me/app/Geoloqi.plist&quot;&gt;
Download Geoloqi
&lt;/a&gt;</pre></td></tr></table></div>

<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/over-the-air-installation-prompt.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/over-the-air-installation-prompt-200x300.png" alt="" title="over-the-air-installation-prompt" width="200" height="300" class="alignright size-medium wp-image-378" /></a></p>
<p>When someone clicks the link from their iPhone, they&#8217;ll get a prompt that says &#8220;loqi.me would like to install Geoloqi.&#8221; Clicking &#8220;Install&#8221; will then immediately download and install the provisioning profile and the app!</p>
<p>Note: This is not going to get you around the 100-device limit that Apple imposes. You&#8217;ll still need to get your beta testers&#8217; UDIDs from them and upload them to the Provisioning Portal.</p>
<div style="clear:both;"></div>
<p>You can pretty up the download page like we have done to make it look like more than just a plaintext link. Here&#8217;s some HTML and CSS to get you started making your own mobile installation page.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt; 
        &lt;title&gt;Install Geoloqi&lt;/title&gt;
        &lt;style type=&quot;text/css&quot;&gt;
                body {
                        background: url(bkg.png) repeat #c5ccd4;
                        font-family: Helvetica, arial, sans-serif;
                }
                .congrats {
                        font-size: 16pt;
                        padding: 6px;
                        text-align: center;
                }
                .step {
                        background: white;
                        border: 1px #ccc solid;
                        border-radius: 14px;
                        padding: 4px 10px;
                        margin: 10px 0;
                }
                .instructions {
                        font-size: 10pt;
                }
                .arrow {
                        font-size: 15pt;
                }
                table {
                        width: 100%;
                }
        &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&nbsp;
&lt;div class=&quot;congrats&quot;&gt;Congrats! You've been invited to the beta of Geoloqi.&lt;/div&gt;
&nbsp;
&lt;div class=&quot;step&quot;&gt;
        &lt;table&gt;&lt;tr&gt;
                &lt;td class=&quot;instructions&quot;&gt;Install the&lt;br /&gt;Geoloqi app&lt;/td&gt;
                &lt;td width=&quot;24&quot; class=&quot;arrow&quot;&gt;&amp;rarr;&lt;/td&gt;
                &lt;td width=&quot;57&quot; class=&quot;imagelink&quot;&gt;
                        &lt;a href=&quot;itms-services://?action=download-manifest&amp;url=http://loqi.me/app/Geoloqi.plist&quot;&gt;
                                &lt;img src=&quot;geoloqi-icon.png&quot; height=&quot;57&quot; width=&quot;57&quot; /&gt;
                         &lt;/a&gt;
                &lt;/td&gt;
        &lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&nbsp;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Here is the background graphic I used on the installation web page. Feel free to use it on your own pages.</p>
<p><a href="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/iphone-stripe-bkg.png"><img src="http://neverusethisfont.com/blog/wp-content/uploads/2011/01/iphone-stripe-bkg.png" alt="" title="iphone-stripe-bkg" width="320" height="60" class="aligncenter size-full wp-image-380" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/01/how-to-distribute-your-ios-apps-over-the-air/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>I had a dream last night where I was an XCode project</title>
		<link>http://neverusethisfont.com/blog/2011/01/i-had-a-dream-last-night-where-i-was-an-xcode-project/</link>
		<comments>http://neverusethisfont.com/blog/2011/01/i-had-a-dream-last-night-where-i-was-an-xcode-project/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 20:21:32 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[OS X/Apple]]></category>
		<category><![CDATA[alarm]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[dream]]></category>
		<category><![CDATA[sleep]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://neverusethisfont.com/blog/?p=343</guid>
		<description><![CDATA[I had a dream last night where I was an XCode project. Every time the alarm went off, that was running &#8220;Build and Run.&#8221; If I would fail to compile, I&#8217;d have to fix the errors and try again. The next time the alarm went off, I&#8217;d attempt to &#8220;run&#8221; again, and I kept failing [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:18pt;">I had a dream last night where I was an XCode project.</span> <span style="font-size: 14pt;">Every time the alarm went off, that was running &#8220;Build and Run.&#8221; If I would fail to compile, I&#8217;d have to fix the errors and try again.</span> The next time the alarm went off, I&#8217;d attempt to &#8220;run&#8221; again, and I kept failing to compile a few times when I kept hitting &#8220;snooze.&#8221; </p>
<div></div>
<p>The last thing I did before I actually woke up was fix a missing semicolon which finally allowed me to compile and then I was awake.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverusethisfont.com/blog/2011/01/i-had-a-dream-last-night-where-i-was-an-xcode-project/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

