<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>Brian Cantoni</title>
<link>http://www.cantoni.org/</link>

<description>Software development, mobile, and occasionally sports...</description>
<language>en-us</language>
<copyright>Copyright 2013 Brian Cantoni</copyright>
<creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license>
<lastBuildDate>Wed, 12 Jun 2013 19:24:54 -0800</lastBuildDate>
<pubDate>Thu, 13 Jun 2013 17:42:33 -0800</pubDate><generator>http://www.movabletype.org/?v=4.35-en</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cantonirss" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="cantonirss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">cantonirss</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/cantonirss" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fcantonirss" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
<title>Find Largest Files in Dropbox</title>
<link>http://www.cantoni.org/2013/06/12/find-largest-files-dropbox</link>
<author>Brian Cantoni</author>
<description>File hosting services like Dropbox, SkyDrive, Google Drive, and Box all have very generous free storage levels (2 GB and up). Even so, it’s easy to quickly reach the free limit, especially as you start backing up photos, movies, and other large files. If you’re getting close to your service’s free limit, here’s a solution for quickly finding the largest... (299 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/06/12/find-largest-files-dropbox</guid>
<content:encoded><![CDATA[<p>File hosting services like Dropbox, SkyDrive, Google Drive, and Box all have very generous free storage levels (2 GB and up). Even so, it&#8217;s easy to quickly reach the free limit, especially as you start backing up photos, movies, and other large files.</p>

<p>If you&#8217;re getting close to your service&#8217;s free limit, here&#8217;s a solution for quickly finding the largest of your files, so you can clean them out or back up elsewhere. This works best when you&#8217;ve set up your service to sync everything to your local Mac or Windows computer. In my case I&#8217;m using Dropbox which defaults to this mode.</p>

<p>The solution involves a free (open-source) software application, depending on which platform you&#8217;re using:</p>

<ul>
<li><a href="http://windirstat.info/" title="WinDirStat - Windows Directory Statistics">WinDirStat</a> for Windows</li>
<li><a href="http://www.derlien.com/" title="Disk Inventory X - Mac Disk Usage Utility">Disk Inventory X</a> for Mac OS X</li>
</ul>

<p>The steps are pretty straightforward:</p>

<ol>
<li>Install the utility and start it</li>
<li>Point to your local storage path (in my case, the Dropbox home dir)</li>
<li>Run the analysis</li>
<li>From the results, find the large files and do something with them (back up, move, delete, etc.)</li>
</ol>

<p>Both utilities show a &#8220;treemap&#8221; view which helps quickly spot the biggest individual files (e.g., movies), and groups of similar files that collectively take a lot of space (e.g., MP3).</p>

<p>Here are screenshots of the two apps run against my Dropbox path:</p>

<div class="mt-image-center">
<img src="http://cdn.scooterlabs.com/images/windirstat.png" alt="WinDirStat Screenshot" width="510" height="554">
<div class="image-caption">
WinDirStat results point to the biggest files in my Dropbox account</div>
</div>

<p><br></p>

<div class="mt-image-center">
<img src="http://cdn.scooterlabs.com/images/disk-inventory-x-2.png" alt="Disk Inventory X Screenshot" width="526" height="362">
<div class="image-caption">
Disk Inventory X results are patterned after WinDirStat</div>
</div>

<p>In my case I&#8217;m primarily using Dropbox and have used about half of my 5GB account. I use the WinDirStat utility regularly to find large files that are better saved elsewhere, and to keep my Dropbox backups somewhat manageable.</p>


]]></content:encoded>
<category>Web</category>
<pubDate>Wed, 12 Jun 2013 19:24:54 -0800</pubDate>
</item><item>
<title>Tweetfave Stats After 30 Days</title>
<link>http://www.cantoni.org/2013/06/06/tweetfave-stats-30-days</link>
<author>Brian Cantoni</author>
<description>One month ago I launched Tweetfave - my new service which improves the usefulness of Twitter favorites. After using Tweetfave myself for so long, it's been exciting to open it up for others, and to see where it goes. Here's a quick look at some numbers since the launch 30 days ago... (166 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/06/06/tweetfave-stats-30-days</guid>
<content:encoded><![CDATA[<p><img class="mt-image-right" alt="Graph up and to the right" src="http://cdn.scooterlabs.com/images/graph-up.png">One month ago I <a href="http://www.cantoni.org/2013/05/06/introducing-tweetfave" title="Introducing Tweetfave">launched Tweetfave</a> - my new service which improves the usefulness of Twitter favorites. After using Tweetfave myself for so long, it&#8217;s been exciting to open it up for others, and to see where it goes.</p>

<p>Here&#8217;s a quick look at some numbers since the launch 30 days ago:</p>

<ul>
<li>400 emails delivered with 65% open rate (thank you <a href="http://www.cantoni.org/go/sendgrid" title="SendGrid email delivery service">SendGrid</a>!)</li>
<li>15 active users</li>
<li>5 inactive users (cancelled)</li>
<li>1,700 tweets favorited (from 1,300 separate sources)</li>
</ul>

<p>So far my &#8220;marketing&#8221; has included emailing an earlier interest mailing list (about 30), reaching out to some friends individually, and periodic links this blog and my Twitter/LinkedIn accounts.</p>

<p>Next I&#8217;ll be asking for specific feedback from each user and continuing with the next couple of features on my to-do list.</p>

<p>If you use Twitter favorites, give <a href="http://tweetfave.com" title="Your favorite Tweets delivered to your inbox">Tweetfave</a> a try and let me know what you think!</p>


]]></content:encoded>
<category>Software</category>
<pubDate>Thu, 06 Jun 2013 12:34:57 -0800</pubDate>
</item><item>
<title>Brief History of Tweetfave</title>
<link>http://www.cantoni.org/2013/05/08/brief-history-tweetfave</link>
<author>Brian Cantoni</author>
<description>Here's a brief history of Tweetfave - my new free service that automatically emails your Twitter favorites to your inbox.

This project started as one of those "wouldn't it be useful if..." projects, as an addition to Twitter. I was already using the Twitter favorite feature to bookmark tweets and links to read later, and wanted a way to automatically receive those (short of going to my profile page and viewing my own favorites). Combine that with an interest in learning the Twitter API, and the project was underway.

As I started writing this, I was a bit surprised as to just how long I've been working on this. Here's the history timeline I came up with...  (367 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/05/08/brief-history-tweetfave</guid>
<content:encoded><![CDATA[<p>Here&#8217;s a brief history of <a href="http://tweetfave.com/" title="Tweetfave - Your Twitter favorites delivered to your inbox">Tweetfave</a> - my new free service that automatically emails your Twitter favorites to your inbox.</p>

<p>This project started as one of those &#8220;wouldn&#8217;t it be useful if&#8230;&#8221; projects, as an addition to Twitter. I was already using the Twitter favorite feature to bookmark tweets and links to read later, and wanted a way to automatically receive those (short of going to my profile page and viewing my own favorites). Combine that with an interest in learning the Twitter API, and the project was underway.</p>

<p>As I started writing this, I was a bit surprised as to just how long I&#8217;ve been working on this. Here&#8217;s the history timeline I came up with:</p>

<ul>
<li>First working code: April 2011</li>
<li>Tweetfave.com domain registered: May 2011</li>
<li>Start keeping source code in git: October 2011</li>
<li>Landing page, collect email addresses: October 2011</li>
<li>Feature survey on Amazon Turk: November 2011</li>
<li>Real front-end live, &#8220;coming soon&#8221;: October 2012</li>
<li>First person other than me using it: April 2013</li>
<li>Go-live, open for anyone to sign up: May 2013</li>
</ul>

<p>Yes, you read that correctly: <strong>I have been working on Tweetfave for two years!</strong></p>

<p>That seems like a long time. I worked on it in chunks of time, and kept using it myself. I favorited over 5000 tweets in that 2-year period, an average of 50/week! In the back of my mind I kept thinking I should finish this and see if anyone else found it useful. A couple months ago I decided to quit procrastinating and finish this to the point where others could give it a try. In April I finally reached that point and asked a few friends to sign up. After a couple more bugs fixed and a week running without errors, I finally opened it up for everyone.</p>

<p>Now I&#8217;ve got a few people actively using it and everything seems to be running smoothly. In a few weeks I&#8217;ll post some usage numbers and let&#8217;s see how much interest I can generate.</p>

<p>If you haven&#8217;t tried <a href="http://tweetfave.com/" title="Tweetfave - Your Twitter favorites delivered to your inbox">Tweetfave</a> yet, give it a shot and let me know what you think.</p>


]]></content:encoded>
<category>Software</category>
<pubDate>Wed, 08 May 2013 12:06:21 -0800</pubDate>
</item><item>
<title>Tweetfave Software and Services</title>
<link>http://www.cantoni.org/2013/05/07/tweetfave-software-services</link>
<author>Brian Cantoni</author>
<description>With my Tweetfave project finally launched and starting to get a little bit of usage, I thought I'd summarize some of the key building blocks for this project.

First of all, what does Tweetfave actually do? It periodically checks your Twitter account to look for new tweets you have marked as favorite. If you have any new ones, it sends them to your email inbox. The functionality is very simple, but I've found it to be a handy addition to Twitter, turning favorites into a sort of "read it later" bookmarking feature.

Following are some of the software tools and services I used to build Tweetfave... (922 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/05/07/tweetfave-software-services</guid>
<content:encoded><![CDATA[<p><img class="mt-image-right" src="http://cdn.scooterlabs.com/images/tools.jpg" height="150" width="150" alt="Tools">﻿With my <a href="http://tweetfave.com/" title="Tweetfave - Twitter favorites delivered to your inbox">Tweetfave</a> project finally <a href="http://www.cantoni.org/2013/05/06/introducing-tweetfave" title="Introducing Tweetfave">launched</a> and starting to get a little bit of usage, I thought I&#8217;d summarize some of the key building blocks for this project.</p>

<p>First of all, <em>what does Tweetfave actually do?</em> It periodically checks your Twitter account to look for new tweets you have marked as favorite. If you have any new ones, it sends them to your email inbox. The functionality is very simple, but I&#8217;ve found it to be a handy addition to Twitter, turning favorites into a sort of &#8220;read it later&#8221; bookmarking feature.</p>

<p>Following are some of the software tools and services I used to build Tweetfave:</p>

<p><a href="http://php.net">PHP</a> - for this project I chose PHP because it&#8217;s what I&#8217;m most proficient in. I&#8217;ve got another side project going where I&#8217;m learning Ruby on Rails, but for Tweetfave I stuck with the familiar. With PHP&#8217;s popularity, everything else I needed was already available as PHP libraries, and it was really easy to set up both my dev and live environments.</p>

<p><a href="https://dev.twitter.com/docs/api/1.1">Twitter API</a> - learning this API was pretty straightforward, especially with the ease of the PHP library. The trickiest part was setting up the whole OAuth flow with my site&#8217;s signup/login flow (and PHP sessions). Originally the code required a read/write access to Twitter accounts, but I later refactored that to use read-only access to minimize the chance of any bugs causing problems for live Twitter accounts. I&#8217;ve also switched to the new API version 1.1 without any trouble, and (so far) the application is not running into any rate limit problems.</p>

<p><a href="https://github.com/abraham/twitteroauth">Twitter PHP Library</a> (by Abraham Williams) - this was the first PHP library to help with Twitter&#8217;s OAuth API, and may be the most popular one. It&#8217;s very easy to add to a project, and makes calls to Twitter really simple. For example, my main call is getting favorites for an account: <code>$favorites = $twitter-&gt;get('favorites/list');</code>. See this <a href="https://dev.twitter.com/discussions/12627">discussion</a> for a quick change to support API version 1.1.</p>

<p><a href="https://github.com/mzsanford/twitter-text-php">Twitter Text PHP Library</a> - the Twitter Text library takes the full text of a tweet and adds hyperlinks and markup for detected identifiers like &#8220;@&#8221; handles, hyperlinks, and search hashtags. For Tweetfave I use the original tweet text in plain-text emails, and the Twitter Text marked-up version for the HTML email body. The results are pretty decent, making the tweets appear almost the same as on the Twitter website. It also extracts all the links contained in the tweet, making it easy to expand those from short form to their original form.</p>

<p><a href="http://mustache.github.io/">Mustache Templates</a> &amp; <a href="https://github.com/bobthecow/mustache.php">PHP library</a> - Mustache provides a very simple templating language that I use to create all of Tweetfave&#8217;s outbound emails. Every email sent has both plain text and rich HTML versions included, and Mustache makes it easy to manage dual templates from the same data source.</p>

<p><a href="http://swiftmailer.org/">Swift Mailer PHP library</a> - creating and sending emails always seems more complicated than it should be. The Swift Mailer library is a straightforward way to ensure your outgoing emails are formatted correctly, especially when you want full control over the email including multipart. Paying attention to the details of email creation also helps prevent the messages from being flagged as spam.</p>

<p><a href="http://www.cantoni.org/go/sendgrid">SendGrid</a> &#8224; - a very reliable email delivery service that &#8220;just works&#8221;. Even when I was on the free plan, I made a couple of support requests and had excellent service both times. I really like SendGrid&#8217;s reports and &#8220;Email Activity&#8221; dashboard, both of which make troubleshooting and tracking a breeze. One downside is you don&#8217;t get a dedicated IP address for your delivery point unless you&#8217;re at the $79/month pricing level. So far my emails seem to avoid being flagged as spam even without the dedicated IP.</p>

<p><a href="http://twitter.github.io/bootstrap/">Bootstrap</a> - the Tweetfave website consists of only a couple of pages, but I wanted to make sure they worked well on both desktop and mobile browsers, so I used Bootstrap as a starting point. It was pretty easy to learn LESS and tailor the Bootstrap template down to just what I needed. For the next go-round, I need to learn how to customize Bootstrap while still being able to merge updates and improvements.</p>

<p><a href="http://www.cantoni.org/go/pair" title="Webhosting at pair Networks">pair Networks</a> &#8224; - I&#8217;ve been using them for web hosting for over 10 years for this blog and a few small side projects. I ran Tweetfave here as well during the year-long development. Recently as Tweetfave usage has grown, my cron scripts are a bit too much for my shared webhost account, so I moved them to Digital Ocean. I kept the MySQL backend and website on pair.</p>

<p><a href="https://www.digitalocean.com/" title="Webhosting/VPS at Digital Ocean">Digital Ocean</a> - after I outgrew my shared webhost, I signed up for a basic VPS ($5/mo) from Digital Ocean. Signing up and creating my virst VPS (a &#8220;droplet&#8221; in their terminology&#8221;) only took about 15 minutes. Installing my code and packages like PHP only took about a half hour. Very impressed so far.</p>

<p><em>&#8224; Affiliate link; I&#8217;ll earn a small referral fee if you use this link; thanks for supporting this service!</em></p>

<p>I&#8217;m happy to answer any questions about the software and services used to build Tweetfave. Just shoot me an email (<span class="hideEmail">brian at cantoni dot org</span>).</p>

<p>If you haven&#8217;t tried <a href="http://tweetfave.com/" title="Tweetfave - Twitter favorites delivered to your inbox">Tweetfave</a> yet, give it a shot.</p>

<p>Image credit: <a href="http://www.flickr.com/photos/zzpza/3269784239/">zzpza</a> (Flickr)</p>


]]></content:encoded>
<category>Software</category>
<pubDate>Tue, 07 May 2013 17:04:02 -0800</pubDate>
</item><item>
<title>Introducing Tweetfave</title>
<link>http://www.cantoni.org/2013/05/06/introducing-tweetfave</link>
<author>Brian Cantoni</author>
<description>Tweetfave is a free service to help you get more out of Twitter favorites. Tweetfave monitors your Twitter feed and sends the tweets you mark as favorite to your inbox. I built Tweetfave for myself ("scratching my own itch") and it's really helped me track and remember interesting tweets and links. It's especially useful when reading my Twitter feed on a mobile phone. If I don't have the time (or patience) to read linked articles on the phone, I'll mark the tweet as a favorite, knowing it will arrive later in my inbox. (150 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/05/06/introducing-tweetfave</guid>
<content:encoded><![CDATA[<p><a href="http://tweetfave.com"><img src="http://cdn.scooterlabs.com/images/TweetFave150.png" height="100" width="150" alt="Tweetfave logo"></a></p>

<p>Tweetfave is a free service to help you get more out of Twitter favorites. Tweetfave monitors your Twitter feed and sends the tweets you mark as favorite to your inbox.</p>

<p>I built Tweetfave for myself (&#8220;scratching my own itch&#8221;) and it&#8217;s really helped me track and remember interesting tweets and links. It&#8217;s especially useful when reading my Twitter feed on a mobile phone. If I don&#8217;t have the time (or patience) to read linked articles on the phone, I&#8217;ll mark the tweet as a favorite, knowing it will arrive later in my inbox.</p>

<p>Give <a href="http://tweetfave.com">Tweetfave</a> a try and let me know if you find it useful, and whether it changes any of your Twitter favoriting behavior. (In my case I have favorited over 5000 tweets since I started working on this project. I&#8217;ll save the details for another post&#8230;)
<br>
<br></p>

<div class="mt-image-center">
<img src="http://cdn.scooterlabs.com/images/sample-email-500.png" alt="Screenshot of sample Tweetfave email" width="500" height="353">
<div class="image-caption">
Tweetfave sends the tweets you marked as favorite to your inbox</div>
</div>


]]></content:encoded>
<category>Software</category>
<pubDate>Mon, 06 May 2013 20:05:01 -0800</pubDate>
</item><item>
<title>Domain Names and Web Hosting by Pair Networks</title>
<link>http://www.cantoni.org/2013/04/26/domain-names-web-hosting-pair-networks</link>
<author>Brian Cantoni</author>
<description>For the past 10+ years I have hosted this website and my other side projects through pair Networks. I’m also managing all of my domain names through the sister company pairNIC. As of today (2 more domains registered!) I have 17 domain names, 7 of which have live websites. The rest are on my “todo” project list. I’ve been very... (115 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/04/26/domain-names-web-hosting-pair-networks</guid>
<content:encoded><![CDATA[<p>For the past 10+ years I have hosted this website and my other side projects through pair Networks. I&#8217;m also managing all of my domain names through the sister company pairNIC.</p>

<p>As of today (2 more domains registered!) I have 17 domain names, 7 of which have live websites. The rest are on my &#8220;todo&#8221; project list.</p>

<p>I&#8217;ve been very happy with pair, both on price and support.</p>

<p>If you have a need for either <a href="http://promote.pair.com/direct.pl?cantoni.org+92308">web hosting</a> or <a href="http://promote.pairnic.com/direct.pl?18334">domain name registration</a>, you should consider pair. If you use these links I&#8217;ll get a small referral which helps pay the bills.</p>

<ul>
<li>Web hosting by <a href="http://promote.pair.com/direct.pl?cantoni.org+92308">pair Networks</a>.</li>
<li>Domain Name Registered by <a href="http://promote.pairnic.com/direct.pl?18334">pairNIC</a>.</li>
</ul>


]]></content:encoded>
<category>Web</category>
<pubDate>Fri, 26 Apr 2013 15:48:28 -0800</pubDate>
</item><item>
<title>Export Twitter Friends Script</title>
<link>http://www.cantoni.org/2013/04/25/export-twitter-friends-script</link>
<author>Brian Cantoni</author>
<description>As part of my Tweetfave project, I wanted to get a better sense of the people I’m following and whether they use the Twitter “favorites” feature. By using the Twitter API, I’m able to first fetch my list of friends (i.e. people I am following), then get the detailed stats for each one. The result is a CSV file which... (153 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/04/25/export-twitter-friends-script</guid>
<content:encoded><![CDATA[<p>As part of my <a href="http://tweetfave.com" title="Tweetfave - favorite tweets delivered to your inbox">Tweetfave</a> project, I wanted to get a better sense of the people I&#8217;m following and whether they use the Twitter &#8220;favorites&#8221; feature. By using the Twitter API, I&#8217;m able to first fetch my list of friends (i.e. people I am following), then get the detailed stats for each one. The result is a CSV file which can imported into Excel or other spreadsheet program:</p>

<div class="mt-image-center">
<img alt="Screenshot of Twitter friends in Excel" src="http://cdn.scooterlabs.com/images/twitter-friends-spreadsheet.png" width="500" height="225" />
<div class="image-caption">
Twitter friend data loaded in Excel</div>
</div>

<p>This script is written in PHP and uses the <a href="https://github.com/abraham/twitteroauth">Twitter OAuth PHP library</a>. It uses the Twitter API methods <a href="https://dev.twitter.com/docs/api/1.1/get/friends/ids"><code>friends/ids</code></a> and <a href="https://dev.twitter.com/docs/api/1.1/get/users/lookup"><code>users/lookup</code></a>. Because the user lookup can handle up to 100 friends at a time, these APIs are quite efficient.</p>

<p>This script is available on GitHub (<a href="https://gist.github.com/bcantoni/5457114">bcantoni/5457114</a>), and embedded below. Follow the installation steps if you want to try it yourself.</p>

<script src="https://gist.github.com/bcantoni/5457114.js"></script>


]]></content:encoded>
<category>Software</category>
<pubDate>Thu, 25 Apr 2013 10:07:08 -0800</pubDate>
</item><item>
<title>Preventing Scam or Fraud Warnings for Email Newsletters</title>
<link>http://www.cantoni.org/2013/03/26/prevent-scam-fraud-warnings-email-newsletters</link>
<author>Brian Cantoni</author>
<description>Some email clients like Thunderbird will sometimes show a scam warning message on emails which appear to be normal and not suspicious. The Thunderbird warning is two-part: first an inline message “This message may be a scam, and second a modal dialog which appears when you click on any link in the email. Combined this could be worrisome for users... (282 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/03/26/prevent-scam-fraud-warnings-email-newsletters</guid>
<content:encoded><![CDATA[<p>Some email clients like <a href="https://www.mozilla.org/en-US/thunderbird/" title="Thunderbird">Thunderbird</a> will sometimes show a scam warning message on emails which appear to be normal and not suspicious. The Thunderbird warning is two-part: first an inline message &#8220;This message may be a scam, and second a modal dialog which appears when you click on any link in the email. Combined this could be worrisome for users who aren&#8217;t sure what the warning means.</p>

<p>I&#8217;ve been seeing this more frequently lately with email newsletters. The most common cause is link tracking added by the newsletter delivery vendor (MailChimp, Tinyletter, etc.). The scam warning will come up whenever the displayed text link does not match the embedded hyperlink. It&#8217;s mean to detect phishing attacks where the displayed text may say &#8220;paypal.com&#8221;, but the link actually goes to &#8220;evilsite.com&#8221;.</p>

<p>For example, this link will cause the warning:</p>

<pre><code class="html">&lt;p>Visit our home page: &lt;a href="http://mailchimp.com/track/xyz...">http://example.com&lt;/a>&lt;/p></code></pre>

<p>Instead the problem can be avoided by using text instead of a URL for the link:</p>

<pre><code class="html">&lt;p>Visit our &lt;a href="http://mailchimp.com/track/xyz...">home page&lt;/a>&lt;/p></code></pre>

<p>Here&#8217;s an example of Thunderbird complaining about a few links in Scott Hanselman&#8217;s <a href="http://tinyletter.com/hanselman" title="Scott Hanselman's Newsletter of Wonderful Things">Newsletter of Wonderful Things</a>. (By the way I don&#8217;t mean to pick on this excellent newsletter, just using it as an example.)</p>

<div class="mt-image-center">
<img alt="Thunderbird screenshot showing scam warning message" src="http://cdn.scooterlabs.com/images/thunderbird-email-scam-warning.png" width="500" height="440" />
<div class="image-caption">
An example of the Email Scam warning message in the Thunderbird email client</div>
</div>

<p>To learn more, I recommend these two resources which explain the Thunderbird behavior and how to prevent it for most cases:</p>

<ul>
<li>From Mozilla, an explanation of <a href="https://support.mozillamessaging.com/en-US/kb/thunderbirds-scam-detection" title="Thunderbird's Scam Detection">Thunderbird&#8217;s Scam Detection</a></li>
<li>From MailChimp, <a href="http://kb.mailchimp.com/article/Links-in-my-emails-are-creating-possible-fraud-alerts-why-is-this" title="Links in my emails are creating &quot;possible fraud&quot; alerts, why is this?">how to avoid possible fraud alerts</a></li>
</ul>


]]></content:encoded>
<category>Web</category>
<pubDate>Tue, 26 Mar 2013 22:13:02 -0800</pubDate>
</item><item>
<title>Downcast - A Great Podcast App for iPhone</title>
<link>http://www.cantoni.org/2013/03/17/downcast-podcast-for-iphone</link>
<author>Brian Cantoni</author>
<description>Downcast is an excellent podcast app for iPhones, much better than the Apple Podcast app. Read more for a quick summary of my favorite features, and my #1 suggestion: emailing show notes after listening to each podcast episode. (423 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/03/17/downcast-podcast-for-iphone</guid>
<content:encoded><![CDATA[<p><a href="http://www.downcastapp.com/" title="Downcast podcatcher app for iOS">Downcast</a> is an excellent podcast app for iPhones; it&#8217;s much better than the Apple Podcast app.</p>

<p>When I first started listening to podcasts on my first MP3 player (a <a href="http://www.cantoni.org/2004/10/20/zentouch" title="Creative Zen Touch">Creative Zen Touch</a>), the software was very basic. I was tracking my podcast RSS feeds in Bloglines, so I wrote a <a href="http://www.cantoni.org/2004/10/29/blogenc" title="Bloglines Enclosure Download Script">Bloglines enclosure download script</a> which I would run periodically on my Windows desktop, then use Windows Media Player to bulk copy everything to the Zen Touch.</p>

<p>For today&#8217;s iPhone users, there&#8217;s no excuse to not have a great podcast player. You&#8217;ve got the network connectivity, the audio player, and plenty of storage. Apple&#8217;s own <a href="https://itunes.apple.com/us/app/podcasts/id525463029?ls=1&amp;mt=8" title="Apple Podcast App">Podcast</a> application leaves a lot to be desired. It provides only basic functionality and doesn&#8217;t seem to ever be improved upon by Apple. Just check this Google search for <em>Apple Podcast App</em> - the top 5 results tell the story:</p>

<div class="mt-image-center">
<img alt="Google Search Results" src="http://cdn.scooterlabs.com/images/apple-podcast-search.png" width="500" height="549" />
<div class="image-caption">
Searching for &#8220;Apple Podcast App&#8221; shows some unflattering results</div>
</div>

<p>Instead, I recommend buying <a href="http://www.downcastapp.com/" title="Downcast podcatcher app for iOS">Downcast</a> (US $1.99). I&#8217;ve recently switched and have my dozen or so tech podcasts up and running:</p>

<div class="mt-image-center">
<img alt="Downcast app screenshot" src="http://cdn.scooterlabs.com/images/downcast.png" width="500" height="750" />
<div class="image-caption">
Screenshot of Downcast main screen with several podcasts loaded and ready</div>
</div>

<p>What makes Downcast so great? This is my short list of favorite features:</p>

<ul>
<li>Automatic refresh &amp; downloads. Configurable to only download over wi-fi.</li>
<li>Skip forward &amp; backward by remote control commands (the &#8220;now playing&#8221; view), or by shaking the phone.</li>
<li>Adjustable playback speed (1.5X, 2X, etc.). I&#8217;ve set this to 1.5X for most podcasts and it&#8217;s very listenable without making everyone&#8217;s voices sound funny.</li>
<li>Settings galore. Possibly more than an iPhone aficionado would like to see, but I like the detailed level of control. In addition to global settings, you also have settings for individual podcasts (like the playback speed).</li>
<li>Export feeds to OPML. Useful for backing up your current subscription list, and if you want to follow along with an RSS reader.</li>
</ul>

<p>I have not played with everything yet, including iCloud Sync which is supposed to help when listening over multiple devices.</p>

<p>Finally, I have one feature suggestion: an option to email the &#8220;show notes&#8221; from each podcast episode you&#8217;ve listened to. It could be pretty simple to add, and would really make the whole flow of listening to podcasts much better. I don&#8217;t know of any podcast or similar app that does this, so to the maker&#8217;s of Downcast, here&#8217;s your chance!</p>


]]></content:encoded>
<category>Mobile</category>
<pubDate>Sun, 17 Mar 2013 20:13:36 -0800</pubDate>
</item><item>
<title>Converting HTML to Text or Markdown</title>
<link>http://www.cantoni.org/2013/01/19/converting-html-to-text-markdown</link>
<author>Brian Cantoni</author>
<description>I'm working on a documentation project where I might need to convert some existing HTML pages back into text or Markdown format for the new system. Rather than manually editing the HTML source, I'm testing with a couple different ways to script it automatically. In this blog post, I'm using a documentation page for our GoToMeeting API method and testing the Lynx text browser and Pandoc document conversion utility. (508 Words)</description>
<guid isPermaLink="true">http://www.cantoni.org/2013/01/19/converting-html-to-text-markdown</guid>
<content:encoded><![CDATA[<p>I&#8217;m working on a documentation project where I might need to convert some existing HTML pages back into text or Markdown format for the new system. Rather than manually editing the HTML source, I&#8217;m testing with a couple different ways to script it automatically. In the examples below, I&#8217;m using a documentation page for our GoToMeeting API method <a href="https://developer.citrixonline.com/api/gotomeeting-rest-api/apimethod/get-meetings">Get Meetings</a>.</p>

<h2>Lynx</h2>

<p><a href="http://lynx.isc.org/" title="Lynx Text Web Browser">Lynx</a> is an open-source text web browser that is usually present on Linux machines and can be installed for Mac and Windows. I&#8217;ve used it in the past to see how web pages will appear to search engines or for <a href="http://chronicle.com/blogs/profhacker/using-lynx-to-test-modern-websites-for-accessibility/31731" title="Using Lynx to Test Modern Web Sites for Accessibility">accessibility testing</a>. In both cases, you can quickly tell whether your text is sufficiently communicating your content.</p>

<p>For the case of saving web pages in text format, Lynx also has a command-line option &#8220;-dump&#8221;:</p>

<pre><code class="no-highlight">$ lynx -dump http://www.whatismyip.com/ > example.txt</code></pre>

<p>In my test case I couldn&#8217;t convince Lynx to fetch an SSL page, so I download it with Curl and pipe it into Lynx:</p>

<pre><code class="no-highlight">$ curl --silent https://developer.citrixonline.com/api/gotomeeting-rest-api/apimethod/get-meetings | lynx -dump -stdin > lynx.txt</pre></code>

Here&#8217;s a sample section of the output:

<pre><code class="no-highlight">URL

   https://api.citrixonline.com/G2M/rest/meetings

Method

   GET

Response Type

   JSON

Parameters

   scheduled A string "true" to get all future meetings.

   history A string "true" to get past meetings within date range.

   startDate If history=true, required start of date range, in ISO8601 UTC
   format.

   endDate If history=true, required end of date range, in ISO8601 UTC
   format.
</code></pre>

<h2>Pandoc</h2>

<p><a href="http://johnmacfarlane.net/pandoc/" title="Pandoc - Universal Document Converter">Pandoc</a> is an open-source &#8220;universal document converter&#8221; which understands (and can convert between) about two dozen different formats. It&#8217;s well suited for writing a document in a primary source, then converting to other formats for different publishing options.</p>

<p>The option we&#8217;ll use here is Pandoc&#8217;s ability to convert from HTML to Markdown, for example:</p>

<pre><code class="no-highlight">$ pandoc -s -r html http://www.whatismyip.com/ -o pandoc.md</code></pre>

<p>For my page, I use the same trick as above because Pandoc can&#8217;t connect to SSL directly:</p>

<pre><code class="no-highlight">$ curl --silent https://developer.citrixonline.com/api/gotomeeting-rest-api/apimethod/get-meetings | pandoc -s -r html -o pandoc.md</code></pre>

<p>And here&#8217;s the sample output of the same section as above:</p>

<pre><code class="no-highlight">### URL

https://api.citrixonline.com/G2M/rest/meetings

### Method

GET

### Response Type

JSON

### Parameters

**scheduled** A string "true" to get all future meetings.

**history** A string "true" to get past meetings within date range.

**startDate** If history=true, required start of date range, in ISO8601
UTC format.

**endDate** If history=true, required end of date range, in ISO8601 UTC
format.
</code></pre>

<h2>Conclusion</h2>

<p>Both of these options do a pretty decent job of converting HTML into text or Markdown format. Pandoc seems slightly better in terms of getting to Markdown format, but I would need to run some more samples to see how much manual editing would be needed after.</p>

<p>I&#8217;m also going to play a bit more with Aaron Schwartz&#8217;s <a href="https://github.com/aaronsw/html2text">Html2Text</a>. In my quick test, it appeared to have a problem with malformed HTML so I need to do some further testing with it.</p>


]]></content:encoded>
<category>Software</category>
<pubDate>Sat, 19 Jan 2013 13:01:15 -0800</pubDate>
</item>
</channel>
</rss>
