<?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/"
                  >
<channel>
<title>Jonathan Stark</title>
<link>http://jonathanstark.com/blog</link>
<description><![CDATA[Jonathan Stark]]></description>
<language>en-us</language>
<pubDate>Sun, 26 May 2013 04:32:44 -0400</pubDate>
<item>
<title>Deploying Automatically with Github WebHooks
</title>
<link>http://jonathanstark.com/blog/deploying-code-automatically-with-github-webhooks</link>
<pubDate>Tue, 07 May 2013 00:00:00 -0400</pubDate>
<description><![CDATA[<h1>Deploying Automatically with Github WebHooks</h1>

<p>May 7, 2013</p>

<p>I recently had to set up a super simple auto-deploy routine for a dev team working on a responsive website for a large U.S. publisher. Since we are using Github to host our code repo, it was pretty easy to set up. Everyone has been digging the workflow so I thought I'd share the details here. </p>

<h2>The Basics</h2>

<ol>
<li>Set up a web page on your dev server that is accessible at a public URL and has read/write permission to the dev directory on the dev server. See below for a stupidly simple example using PHP.</li>
<li><p>On github.com, navigate to the WebHook URL settings for your repo:</p>

<p><code>YOUR_REPO &gt; Settings &gt; Service Hooks &gt; WebHook URLs</code></p>

<p>Enter the URL to the page you created in step 1. When you push to Github, Github will send a POST request with a bunch of info about the push to the URL you provided. </p>

<p><strong>NOTE:</strong> Only the repo owner has access to the settings area. </p></li>
</ol>

<h2>Tricky Bits</h2>

<ul>
<li>The web page needs to have permission to read/write to the dev directory on the dev server. It can be tough to do this is a way that is secure. </li>
<li>If the repo on github is private, you have to monkey around to grant the dev server access to the repo on github. </li>
<li>Debugging sucks. If the WebHook isn't working, it's pretty hard to figure out why. </li>
</ul>

<h2>Related Links</h2>

<ul>
<li><a href="https://help.github.com/articles/post-receive-hooks" title="Post-Receive Hooks &middot; GitHub Help">Post-Receive Hooks &middot; GitHub Help</a></li>
<li><a href="https://help.github.com/articles/managing-deploy-keys" title="Managing deploy keys &middot; GitHub Help">Managing deploy keys &middot; GitHub Help</a></li>
</ul>

<h2>PHP Example</h2>

<pre><code>&lt;?php

// Init vars
$LOCAL_ROOT         = "/var/www/my_new_site";
$LOCAL_REPO_NAME    = "public_html";
$LOCAL_REPO         = "{$LOCAL_ROOT}/{$LOCAL_REPO_NAME}";
$REMOTE_REPO        = "git@github.com:jonathanstark/my_new_site.git";
$DESIRED_BRANCH     = "dev";

// Delete local repo if it exists
if (file_exists($LOCAL_REPO)) {
    shell_exec("rm -rf {$LOCAL_REPO}");
}

// Clone fresh repo from github using desired local repo name and checkout the desired branch
echo shell_exec("cd {$LOCAL_ROOT} &amp;&amp; git clone {$REMOTE_REPO} {$LOCAL_REPO_NAME} &amp;&amp; cd {$LOCAL_REPO} &amp;&amp; git checkout {$BRANCH}");

die("done " . mktime());
</code></pre>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/deploying-code-automatically-with-github-webhooks</guid>
</item>
<item>
<title>Poor Man's Google Glass
</title>
<link>http://jonathanstark.com/blog/poor-mans-google-glass</link>
<pubDate>Fri, 01 Mar 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Poor Man's Google Glass</h1>

<p>March 1, 2013</p>

<p><img src="http://jonathanstark.com/images/poor-mans-google-glass-1.jpg" alt="Poor Man's Google Glass view 1" /></p>

<p>When the iPhone ushered in the era of the modern smartphone, it brought with it a new computing posture. Unlike desktops/laptops which forced us to sit down, smartphones made it easy to stand and compute with one hand. This new posture allowed us to connect to cloud-based data and services many more times throughout our day than we ever did in the desktop era.</p>

<p>As cool as modern smartphones are, they still require that we look at them and have at least one hand free to operate. This means that when our eyes or hands are busy, we are disconnected. The more we outsource bits of our memory to the cloud (e.g., photos, contacts, appointments, todos, etc) the more undesireable it is to be disconnected. </p>

<p>The desire to be more connected and the inherent limitations of the smartphone interface lead me to believe that we are on the verge of the next revolution in personal computing devices. A wave of new wearable connected computing devices that can be used hands-free and/or eyes-free. </p>

<p>Google Glass is clearly on the cutting edge of this wave and I've been anxious to test them out. I'm wondering if the fact that I am far-sighted will prevent me from seeing a tiny screen placed so close to my eye. If I can see it, I wonder how distracting it'll be to have a view overlayed on my field of vision. I didn't want to wait a year or more to find out about these things, so I started thinking about how I might put together a poor man's version of Google Glass. </p>

<p>A do-it-yourself periscope project in one of my son's science books sparked an idea: if I attached a phone to my head and positioned two mirrors such that I could see the screen hovering in front of me, I could overlay data on my field of vision. I could control the device somewhat using voice commands and if need be, I could touch the screen on the side of my head. </p>

<p>This thought was enough to send me out to Michael's to buy some heavy guage modeling wire, two packs of assorted craft mirrors, and a roll of silver duct tape. Once home, it took about an hour to get the wire length right and tape everyting to an iPod for a preliminary test. </p>

<p>Here's the result:</p>

<p><img src="http://jonathanstark.com/images/poor-mans-google-glass-2.jpg" alt="Poor Man's Google Glass view 2" /></p>

<p><img src="http://jonathanstark.com/images/poor-mans-google-glass-3.jpg" alt="Poor Man's Google Glass view 3" /></p>

<p><img src="http://jonathanstark.com/images/poor-mans-google-glass-4.jpg" alt="Poor Man's Google Glass view 4" /></p>

<h2>Findings</h2>

<p>In a few short hours I've already learned several things:</p>

<ul>
<li>The front mirror has to be directly in front of but slightly above the eye. Having it off to the side causes significant eye strain. Putting it right in front is much more comfortable and having it just above your normal line of sight seems to put it out of the way enough to see normally. </li>
<li>I need a bigger mirror for the back mirror if I want to capture the whole screen of the device. It basically needs to be the same size as the screen because I have it positioned so close to the device. </li>
<li>It's a lot tougher to operate the device with my finger than I thought it'd be. As you reach for the screen, you can see your finger in both mirrors which is incredibly disorenting. </li>
<li>The front mirror vibrates a fair bit, which is a problem. I could mitigate this by making the wire shorter, but this would bring the front mirror too close to my eye to focus on. </li>
</ul>

<p>I'll update this post as I refine the design and learn more. </p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/poor-mans-google-glass</guid>
</item>
<item>
<title>Stop Committing Random Acts of Mobility
</title>
<link>http://jonathanstark.com/blog/stop-committing-random-acts-of-mobility</link>
<pubDate>Tue, 12 Feb 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Stop Committing Random Acts of Mobility</h1>

<p>February 12, 2013</p>

<p>Yours truly writing for Boston.com about the challenges of enterprise mobility: </p>

<p><a href="http://bo.st/X5PCD0">Stop Committing Random Acts of Mobility</a></p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/stop-committing-random-acts-of-mobility</guid>
</item>
<item>
<title>Seriously, iOS?
</title>
<link>http://jonathanstark.com/blog/seriously-ios</link>
<pubDate>Wed, 23 Jan 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Seriously, iOS?</h1>

<p>January 23, 2013</p>

<p>iOS Docs: </p>

<blockquote>
  <p><code>AVCaptureDeviceInput</code> is a concrete sub-class of <code>AVCaptureInput</code> you use to capture data from an <code>AVCaptureDevice</code> object.</p>
  
  <p>To determine whether the file was saved successfully, in the implementation of <code>captureOutput:didFinishRecordingToOutputFileAtURL:fromConnections:error:</code> you check not only the error, but also the value of the <code>AVErrorRecordingSuccessfullyFinishedKey</code> in the error’s user info dictionary.</p>
</blockquote>

<p>Me:</p>

<p><img src="http://f.cl.ly/items/3q252U163q2b3y2b022M/Image%202013.01.23%204:25:24%20PM.gif" alt="Seriously?" /></p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/seriously-ios</guid>
</item>
<item>
<title>Windows Phone 8 User Agent String
</title>
<link>http://jonathanstark.com/blog/windows-phone-8-user-agent-string</link>
<pubDate>Sun, 20 Jan 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Windows Phone 8 User Agent String</h1>

<p>January 20, 2013</p>

<p>Today, I bought a Nokia Lumia 920 running Windows Phone 8. It's a very nice piece of hardware but would never become my main phone. It's just too big for me to use one-handed, which is how I use my phone the vast majority of the time. </p>

<p>The Windwos Phone 8 OS looks great (I liked 7 and 7.5 as well) and is very responsive but there is still a painful lack of features and apps. </p>

<p>For future reference, the user agent string of the new web browser is:</p>

<p><code>"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)"</code></p>

<p>BTW - The browser passed 100 of 101 tests of r.0 at <a href="http://rng.io">http://rng.io</a> and scores a respectable 320 on <a href="http://html5test.com/compare/browser/wp80.html">HTML5 Test</a>. </p>

<h2>Related</h2>

<ul>
<li><a href="http://jonathanstark.com/blog/windows-phone-user-agent-string">Windows Phone 7 User Agent String</a></li>
<li><a href="http://jonathanstark.com/blog/windows-phone-7-5-user-agent-string">Windows Phone 7.5 User Agent String</a></li>
</ul>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/windows-phone-8-user-agent-string</guid>
</item>
<item>
<title>Results of Mobile Phone Handedness Survey
</title>
<link>http://jonathanstark.com/blog/results-of-mobile-phone-handedness-survey</link>
<pubDate>Fri, 11 Jan 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Results of Mobile Phone Handedness Survey</h1>

<p>January 11, 2013</p>

<p><img src="http://jonathanstark.com/images/Mobile_Phone_Handedness_Survey.png" alt="Mobile Phone Handedness Survey Summary" /></p>

<p>Back in 2010, I posted a mobile phone handedness survey and asked folks to fill it out to get a sense of how people held their phones. In Dec 2012, I added a field or two about screen size and resolution and re-publicized the existence of the survey. The results are available below in a couple different formats. </p>

<p>Caveat: I wanted to segregate the results of the two surveys but for some unknown reason Google Docs wouldn't let me. It seems like the responses are all grouped together based on the form through which they were entered even though I moved the old data from the underlying spreadsheet into a new one. So, the summary graphics are based on all the data from 2010 and 2012. If you'd like to run your own reports, you can download the results as csv and slice and dice to your heart's content. </p>

<p><a href="http://jonathanstark.com/images/Mobile_Phone_Handedness_Survey.pdf">Download full summary as PDF (147 KB)</a></p>

<p><a href="http://jonathanstark.com/images/Mobile_Phone_Handedness_Survey_2010.csv">Download 2010 results as CSV (24 KB)</a></p>

<p><a href="http://jonathanstark.com/images/Mobile_Phone_Handedness_Survey_2012.csv">Download 2012 results as CSV (61 KB)</a></p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/results-of-mobile-phone-handedness-survey</guid>
</item>
<item>
<title>Video of &quot;The Revolution Will Not Be Televised&quot;
</title>
<link>http://jonathanstark.com/blog/video-of-revolution-wont-be-televised</link>
<pubDate>Fri, 04 Jan 2013 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>Video of "The Revolution Will Not Be Televised"</h1>

<p>January 4, 2013</p>

<p>On September 24, 2012 I gave a really fun talk at BDConf Dallas. If you are a web slinger and haven't heard of of BDConf, it's time to get familiar - the conference was excellent and the website offers a wealth of useful resources. </p>

<p>Here's the abstract for my talk:</p>

<blockquote>
  <p>The Revolution Will Not Be Televised: Managing Content and Experience in the Age of Ubiquitous Computing</p>
  
  <p>Mobile computing as we know it today is just one application of wireless technology, and a fairly limited one at that. The iPhone—perhaps the most advanced piece of consumer electronics ever created—is going to look like a fax machine compared to what's coming. The coming wireless wave will profoundly change every aspect of society and potentially redefine what it means to be human.</p>
</blockquote>

<iframe src="http://player.vimeo.com/video/50389722" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<h1>Related links</h1>

<ul>
<li><a href="http://bdconf.com/">Breaking Development website</a></li>
<li><a href="http://vimeo.com/bdconf">Breaking Development channel on Vimeo</a></li>
<li><a href="https://twitter.com/bdconf">Breaking Development on Twitter</a></li>
<li><a href="https://twitter.com/tkadlec">Tim Kadlec on Twitter</a></li>
</ul>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/video-of-revolution-wont-be-televised</guid>
</item>
<item>
<title>5 Ways To Prevent Showrooming
</title>
<link>http://jonathanstark.com/blog/5-ways-prevent-showrooming</link>
<pubDate>Thu, 29 Nov 2012 00:00:00 -0500</pubDate>
<description><![CDATA[<h1>5 Ways To Prevent Showrooming</h1>

<p>November 29, 2012</p>

<p>Showrooming is when a shopper visits a physical "bricks 'n mortar" store to examine a product but then purchases the product online from another retailer. For the proprietor of the physical store, this is obviously a Very Bad Thing, so BnM retailers are looking for ways to minimize the behavior. </p>

<p>Even though I make my living by providing very technical mobile strategy and training services to large companies, it seems to me that the most effective responses to showrooming are fairly low tech. </p>

<p>Here are five:</p>

<ol>
<li><p>Close Your Stores </p>

<p>Over the top? Yes. But every discussion of showrooming should start by questioning the value of physical retail locations. If you were building a retail business from scratch starting today, would your model include retail locations or would it be online only? If you would have retail locations, why?</p></li>
<li><p>Competitive Prices</p>

<p>If you can't offer competitive prices on commodity products, you might as well stop selling them.</p></li>
<li><p>Exclusive Products </p>

<p>If people can't buy your stuff from other retailers, they have to buy from you. Of course, it's not realistic for most large retailers to offer only exclusive products. </p></li>
<li><p>Frictionless Checkout</p>

<p>Standing in line is over. Wallets are ending. You have to make it easier to buy from you than from Amazon. There are a few ways to approach this, as demonstrated by Apple, Starbucks, Anthropologie, and others. This is the one technical solution on the list and while it is a major undertaking, I see it as a must.</p></li>
<li><p>Meatspace Perks</p>

<p>Appeal to "non-line" desires with free stuff like food &amp; drink (Whole Foods), massages (Aveda), babysitting (Ikea). This won't stop showrooming but it will get people in your stores.</p></li>
</ol>

<p>I urge retailers to try one or more of these approaches before spending money on some flashy tech solution. As cool as geofencing, push notifications, QRCodes, and gamification might sound, they probably aren't going to help much if you haven't covered the basics. </p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/5-ways-prevent-showrooming</guid>
</item>
<item>
<title>The Future Of Mobile
</title>
<link>http://jonathanstark.com/blog/the-future-of-mobile</link>
<pubDate>Thu, 01 Nov 2012 00:00:00 -0400</pubDate>
<description><![CDATA[<h1>The Future Of Mobile</h1>

<p>November 1, 2012</p>

<p>Your truly answering reader questions about the future of mobile for .net magazine:</p>

<p><a href="http://bit.ly/TsrUSw">Jonathan Stark on the future of mobile</a></p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/the-future-of-mobile</guid>
</item>
<item>
<title>Fancy Apache Indexes
</title>
<link>http://jonathanstark.com/blog/fancy-apache-indexes</link>
<pubDate>Mon, 29 Oct 2012 00:00:00 -0400</pubDate>
<description><![CDATA[<h1>Fancy Apache Indexes</h1>

<p>October 29, 2012</p>

<p>Have you ever wanted to add custom css to your directory indexes in Apache? Yeah, me too. Here's how: add the following lines to an .htaccess file in the root directory of your website:</p>

<pre><code>Options +Indexes
IndexOptions IgnoreCase
IndexHeadInsert "&lt;link rel=stylesheet href=/css/indexes.css&gt;"
</code></pre>

<p>Next, create a stylesheet that will be applied to the html generated by Apache. I've named mine <code>indexes.css</code> and placed it in a directory named <code>css</code> at the root level of my site, but you can name yours whatever you like and put it anywhere as long as it's accessible on the network. </p>

<p>For bonus points, append a viewport meta tag to make things look nice on smartphones: </p>

<pre><code>IndexHeadInsert "&lt;link rel=stylesheet href=/css/indexes.css&gt;
&lt;meta name=viewport content=width=device-width,initial-scale=1.0 /&gt;"
</code></pre>

<p>Here's an example custom index:</p>

<p><a href="http://jonathanstark.com/labs">http://jonathanstark.com/labs</a></p>

<p>Cheers!</p>
]]></description>
<author>Jonathan Stark - jstark@jonathanstark.com</author>
<guid>http://jonathanstark.com/blog/fancy-apache-indexes</guid>
</item>
</channel>
</rss>