<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">Thom Nichols :: Technology is evolution outside the gene pool</title>
    <subtitle type="html">I&#39;m a Software Engineer living near Providence, RI. 
          I lead the R&amp;D team for a clean tech company in Boston.  Most of the
          stuff I post here are personal projects.</subtitle>
    <updated>2015-12-21T15:30:45Z</updated>
    <id>http://blog.thomnichols.org/</id>
    <link rel="alternate" type="text/html" hreflang="en" href="http://blog.thomnichols.org" />
    <link rel="self" type="application/atom+xml" href="http://blog.thomnichols.org/feeds/atom.xml" />
    <rights>Copyright (c) 2008, Thom Nichols</rights>

    <generator uri="http://blog.thomnichols.org" version="0.8">
        Bloog for AppEngine
    </generator>

    
    <entry>
        <title>Protip: xip.io with dd-wrt</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2015/12/protip-xipio-with-dd-wrt" />

        <id>http://blog.thomnichols.org/2015/12/protip-xipio-with-dd-wrt</id>

        <updated>2015-12-21T15:30:45Z</updated>
        <published>2015-12-21T15:30:06Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>If you're using DD-WRT with DNSmasq and "No DNS rebind" enabled (the default,) add the following to "Additional DNSmasq options" to allow <a href="http://xip.io">xip.io</a> to work: </p><pre class="brush: python">rebind-domain-ok=xip.io</pre><p>Then save and apply settings in DD-WRT.&#160; Alternately you can directly edit dnsmasq.conf.&#160; Give it a quick test with </p><pre class="brush: python">dig 127.0.0.1.xip.io</pre><p>This probably also works for similar services like ngrok.com, nip.io, burrow.io, etc.</p><p></p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2015/12/protip-xipio-with-dd-wrt">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2015/12/protip-xipio-with-dd-wrt#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="tips" />
        
        <category term="DNS" />
        
        <category term="DD-WRT" />
        
    </entry>
    
    <entry>
        <title>Happy 2015</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2015/12/happy-2015" />

        <id>http://blog.thomnichols.org/2015/12/happy-2015</id>

        <updated>2015-12-07T02:50:19Z</updated>
        <published>2015-12-07T02:50:19Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>Er, wait, it's almost 2016!&#160; Anyway, I've lately felt compelled to write something, in part because I haven't been doing much open source or work that I can otherwise publish.&#160;&#160;</p><p><strong>What I've been doing lately</strong>:&#160; At <a href="http://voltserver.com/">VoltServer</a>, I'm back in embedded land, writing C firmware which I actually find sort of fun, if not tedious occasionally for lack of the comforts we take for granted in high-level development.&#160; Most of my time is more traditional web-based code though, and I've had some ...</p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2015/12/happy-2015">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2015/12/happy-2015#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
    </entry>
    
    <entry>
        <title>Browser MVC frameworks in a couple images</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2014/06/browser-mvc-frameworks-in-a-couple-images" />

        <id>http://blog.thomnichols.org/2014/06/browser-mvc-frameworks-in-a-couple-images</id>

        <updated>2014-06-27T19:52:36Z</updated>
        <published>2014-06-27T19:52:36Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								In deciding which client side MVC framework to choose, it's enlightening to look at the Github stats for the main contenders:&#160; Angular, Ember and Backbone/ Marionette.&#160; My main goal was to try to ascertain community momentum &amp; relative maturity of these solutions.<br /><br /><h2>Backbone</h2><img alt="" style="width: 994px; height: 786px;" src="https://lh5.googleusercontent.com/-YOy9bp_kAX0/U63GAgUzd1I/AAAAAAAANOg/AVeRfwpg5TE/w1556-h1230-no/Screen+Shot+2014-06-26+at+3.41.55+PM.png" align="" /><br /><br /><h2>Ember</h2><img alt="" style="width: 998px; height: 589px;" src="https://lh4.googleusercontent.com/--_taLgBrf9w/U63GAJXN-fI/AAAAAAAANOk/m_cNAzpFCik/w1996-h1178-no/Screen+Shot+2014-06-26+at+3.41.43+PM.png" /><p>By looking at the above, Ember also has some pretty good velocity and set of core contributors.</p><p><h2>Backbone &amp; Marionette</h2></p><p>For Backbone, I needed to include Marionette as well since I assume most people are not using just Backbone.</p><img alt="" style="width: 997px; height: 584px;" src="https://lh3.googleusercontent.com/-JEr-3a9EH3s/U63GAP7h2wI/AAAAAAAANOY/YONu8mPySaw/w1994-h1168-no/Screen+Shot+2014-06-26+at+3.41.11+PM.png" /><p>&#160; <img alt="" style="width: 994px;" src="https://lh6.googleusercontent.com/-LKrLJCYrTZU/U63GAGiLCPI/AAAAAAAANOc/OeMWnkRRcio/w1988-h1168-no/Screen+Shot+2014-06-26+at+3.41.24+PM.png" /></p><p><h1>Conclusion</h1></p><p>As people love to point ...</p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2014/06/browser-mvc-frameworks-in-a-couple-images">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2014/06/browser-mvc-frameworks-in-a-couple-images#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="Javascript" />
        
    </entry>
    
    <entry>
        <title>Batch Photo Thumbnail Creation for FancyBox</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/11/batch-create-photo-thumbnails-for-fancybox" />

        <id>http://blog.thomnichols.org/2013/11/batch-create-photo-thumbnails-for-fancybox</id>

        <updated>2015-04-30T11:54:51Z</updated>
        <published>2013-11-20T20:15:31Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>A quick script I wrote to batch create photo thumbnails for use with <a href="http://fancyapps.com/fancybox/">FancyBox</a>.&#160; This means each thumbnail gets the same filename with <code>'_m'</code> appended before the extension.&#160; It uses the <a href="http://www.imagemagick.org/script/index.php">ImageMagick</a> command-line tool <code>convert</code> to perform the actual image processing.</p><p></p><pre class="brush: python">#!/usr/bin/env python

import sys, os, subprocess


def convert(directory=None, size='300x300'):

 if not directory: directory = os.getcwd()
 print('Dir: %s' % directory)

 if not size: size='300x300'

 for f in os.listdir(directory):
  parts = f.split('.')
  if len(parts) &lt; 2:
   print('Ignoring file %s' % f ...</pre>
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/11/batch-create-photo-thumbnails-for-fancybox">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/11/batch-create-photo-thumbnails-for-fancybox#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="graphics" />
        
        <category term="Python" />
        
    </entry>
    
    <entry>
        <title>Please build this: A Mobile app to replace Grocery Loyalty Cards and Coupons</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/08/please-build-this-a-mobile-app-to-replace-grocery-loyalty-cards-and-coupons" />

        <id>http://blog.thomnichols.org/2013/08/please-build-this-a-mobile-app-to-replace-grocery-loyalty-cards-and-coupons</id>

        <updated>2013-08-30T23:14:25Z</updated>
        <published>2013-08-30T23:14:25Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<strong>Grocery stores need to build a decent mobile app.</strong>&#160; This idea seems incredibly obvious, so it pains me that none of the major grocery chains have done it (at least that I know of... if someone has, please let me know I will shop there!)&#160; Here's why...<br /><strong><br />Little keychain barcode fobs suck and so do paper circulars.&#160;</strong> Making a weekly shopping list is a chore, especially when you care about buying stuff on sale and have to flip through those (sucky) paper circulars to find what's ...
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/08/please-build-this-a-mobile-app-to-replace-grocery-loyalty-cards-and-coupons">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/08/please-build-this-a-mobile-app-to-replace-grocery-loyalty-cards-and-coupons#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="ideas" />
        
        <category term="mobile" />
        
    </entry>
    
    <entry>
        <title>OSRC</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/08/osrc" />

        <id>http://blog.thomnichols.org/2013/08/osrc</id>

        <updated>2013-08-22T15:45:10Z</updated>
        <published>2013-08-22T15:45:10Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>Check out my <a href="http://osrc.dfm.io/tomstrummer">open source report card</a>.&#160; Pretty neat use of the Github API.</p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/08/osrc">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/08/osrc#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="Portfolio" />
        
    </entry>
    
    <entry>
        <title>Deploying Octopress on Amazon S3</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/08/deploying-octopress-on-amazon-s3" />

        <id>http://blog.thomnichols.org/2013/08/deploying-octopress-on-amazon-s3</id>

        <updated>2013-08-20T20:56:18Z</updated>
        <published>2013-08-20T20:56:18Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>So a number of folks have described how to use <a href="http://octopress.org/">Octopress</a> with S3.&#160; However most of them don't describe how to easily publish to S3, or require an external command-line tool to upload the generate files.&#160; I solved this by using the <code>aws/s3</code> gem and creating a new rake task.&#160; <br /><br /><code>rake deploy_s3[blog]&#160; # deploys all blog files<br /></code><br />I also added a task to ping Google and Bing when the sitemap updates:<br /><br /><code>rake ping # tells Google &amp; Bing to crawl updated sitemaps<br /></code><br />You can see the <a href="https://gist.github.com/tomstrummer/6287024">full code ...</a></p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/08/deploying-octopress-on-amazon-s3">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/08/deploying-octopress-on-amazon-s3#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="AWS" />
        
        <category term="Ruby" />
        
    </entry>
    
    <entry>
        <title>Making progress on the new Android App!</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/05/making-progress-on-the-new-android-app" />

        <id>http://blog.thomnichols.org/2013/05/making-progress-on-the-new-android-app</id>

        <updated>2013-05-12T03:00:53Z</updated>
        <published>2013-05-12T03:00:34Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								Here a shot of the widget on the lockscreen:<br /><br /><img alt="" style="width: 480px;" src="https://pbs.twimg.com/media/BKCG7qnCIAISHx7.png:large" /><br /><br />And here's a view of Twitter post details (including linked photo previews, and linked @mentions and #hashtags!)<br /><br /><img alt="" style="width: 480px;" src="http://twitpic.com/show/full/cpy2cp.png" />&#160;&#160;&#160; <br />Hoping to release v1 soon!
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/05/making-progress-on-the-new-android-app">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/05/making-progress-on-the-new-android-app#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="Android" />
        
        <category term="Portfolio" />
        
    </entry>
    
    <entry>
        <title>Android Social Widget</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/05/android-social-widget" />

        <id>http://blog.thomnichols.org/2013/05/android-social-widget</id>

        <updated>2013-05-09T03:35:28Z</updated>
        <published>2013-05-09T03:35:28Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p>Because all of the social homescreen widgets out there suck, and I hate opening the Twitter app.&#160; The default FB and Twitter widgets aren't even scrollable.&#160; </p><p>LauncherPro has a good one but it only works if you use the LauncherPro home screen, and it is constantly unresponsive.&#160; (It must be doing DB/ network fetching in the UI thread...&#160; Naughty!)&#160; </p><p>So naturally, I write my own.</p><img alt="" style="width: 423px;" src="https://pbs.twimg.com/media/BJyybkvCQAAP4Xv.png:large" /><br /><br />I will probably release this on the Play Store, maybe free with a paid version that supports more services (Facebook, Instagram, etc.)
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/05/android-social-widget">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/05/android-social-widget#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="Android" />
        
        <category term="Portfolio" />
        
    </entry>
    
    <entry>
        <title>Home automation with Remoht.us</title>
        <link rel="alternate" type="text/html" href="http://blog.thomnichols.org/2013/02/home-automation-with-remohtus" />

        <id>http://blog.thomnichols.org/2013/02/home-automation-with-remohtus</id>

        <updated>2013-02-26T23:15:23Z</updated>
        <published>2013-02-26T22:47:57Z</published>

        <author>
            <name>Thom Nichols</name>
            <uri>http://blog.thomnichols.org</uri>
        </author>

        
        <summary type="xhtml" xml:lang="en" xml:base="http://blog.thomnichols.org">
            <div xmlns="http://www.w3.org/1999/xhtml">
								
								<p><a target="_blank" href="http://remoht.us">Remoht.us</a> is a demo I created that parallels in many ways the work I do during my day job: push-based device control and telemetry.&#160; Remoht.us a web app and client software that let you monitor environmental sensors (in this case temperature, light and occupancy) and also allows toggling relays.&#160; It also uses technology that is accessible to the average joe: <a>Google AppEngine</a> for the UI, the <a href="http://raspberrypi.org/">Raspberry Pi</a> as the hardware gateway and the <a href="https://www.sparkfun.com/products/11098">Arduino</a> for the low-level sensor control. (I am tempted to also add ...</p>
								
                <p>
                  <a href="http://blog.thomnichols.org/2013/02/home-automation-with-remohtus">Read more &#8230;</a> 
                  &#160;&#160;|&#160;&#160;
                  <a href="http://blog.thomnichols.org/2013/02/home-automation-with-remohtus#comments">Comments &#8230;</a>
                </p>
            </div>
        </summary>
        
        
        
        <category term="Portfolio" />
        
        <category term="Python" />
        
        <category term="AppEngine" />
        
        <category term="Arduino" />
        
        <category term="Hardware" />
        
        <category term="RaspberryPi" />
        
        <category term="XMPP" />
        
    </entry>
    

</feed>
