<?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>Nick Carroll</title>
	<atom:link href="http://nickcarroll.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://nickcarroll.me</link>
	<description>Software professional</description>
	<lastBuildDate>Tue, 12 Feb 2013 11:41:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Protect your Play! application with the CSRF filter</title>
		<link>http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/</link>
		<comments>http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/#comments</comments>
		<pubDate>Mon, 11 Feb 2013 09:21:58 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[play]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://nickcarroll.me/?p=627</guid>
		<description><![CDATA[Play! 2.1 introduces a new filters API and Cross Site Request Forgery (CSRF) protection.  The CSRF filter is not well documented and it took a while to work out how to enable it in my Play! application.  It took a bit of digging through the Play! source code and looking through the CSRF tests to [...]]]></description>
				<content:encoded><![CDATA[<p>Play! 2.1 introduces a <a href="http://www.playframework.com/documentation/2.1.0/Highlights">new filters API and Cross Site Request Forgery (CSRF) protection</a>.  The CSRF filter is not well documented and it took a while to work out how to enable it in my Play! application.  It took a bit of digging through the Play! source code and looking through the <a href="https://github.com/playframework/Play20/tree/master/framework/test/csrftest-scala">CSRF tests</a> to work out how to use the CSRF filter.  Below is a summary of what is required to protect your Play! 2.1 application with the new CSRF filter.</p>
<p><img class="alignnone" alt="" src="http://i2.wp.com/www.playframework.com/assets/images/logos/normal.png?resize=527%2C180" data-recalc-dims="1" /></p>
<p>First of all add the <em>filters</em> module to your app dependencies in appname/project/Build.scala.</p>
<pre class="brush: scala; title: ; notranslate">
import sbt._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = &quot;appname&quot;
  val appVersion      = &quot;1.0-SNAPSHOT&quot;

  val appDependencies = Seq(
    // Add your project dependencies here,
    jdbc,
    anorm,
    &lt;strong&gt;filters&lt;/strong&gt;
  )
}
</pre>
<p>Next create appname/app/Global.scala and extend the Global settings so that it uses the CSRF filter.</p>
<pre class="brush: scala; title: ; notranslate">
import play.api.mvc._
import play.api._
import play.filters.csrf._

object Global extends WithFilters(CSRFFilter()) with GlobalSettings
</pre>
<p>Now the <a href="https://github.com/playframework/Play20/tree/master/framework/test/csrftest-scala">CSRF tests</a> will convey that you need to do the following in all your controllers that return a view with a form post.</p>
<pre class="brush: scala; title: ; notranslate">
def index = Action { implicit request =&gt;
  import play.filters.csrf._
  Ok(views.html.index(CSRF.getToken(request).map(_.value).getOrElse(&quot;&quot;)))
}
</pre>
<p>and use the CSRF token in your view template as follows.</p>
<pre class="brush: scala; title: ; notranslate">
@(csrf: String)

@main(&quot;Welcome to Play 2.0&quot;) {&lt;/pre&gt;
&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;&lt;!--
      label{display: block}

--&gt;&lt;/style&gt;
&lt;div&gt;
&lt;h2&gt;With token&lt;/h2&gt;
&lt;form accept-charset=&quot;utf-8&quot; action=&quot;@routes.Application.save()?csrfToken=@csrf&quot; method=&quot;post&quot;&gt;
&lt;label for=&quot;name&quot;&gt;Name:&lt;/label&gt;&lt;input id=&quot;name&quot; type=&quot;text&quot; name=&quot;name&quot; value=&quot;&quot; /&gt;

&lt;label for=&quot;age&quot;&gt;Age:&lt;/label&gt;&lt;input id=&quot;age&quot; type=&quot;text&quot; name=&quot;age&quot; value=&quot;&quot; /&gt;

&lt;input type=&quot;submit&quot; value=&quot;Continue →&quot; /&gt;&lt;/form&gt;&lt;/div&gt;
&lt;pre&gt;
}
</pre>
<p>Relax you don&#8217;t have to call CSRF.getToken() in all of your controllers that present a form.  Fortunately there is a CSRF view helper that takes an implicit token so that you won&#8217;t need to set up the token in your controller and pass it to the view.  Instead you just have to declare the implicit token in the view and wrap your post action with the CSRF helper function as follows.</p>
<pre class="brush: scala; title: ; notranslate">
@(signInForm: Form[(String,String)])(implicit token: play.filters.csrf.CSRF.Token)
@import helper._

@implicitFieldConstructor() = @{
    FieldConstructor(bootstrapInput.render)
}

@main(Messages(&quot;shopanoptic&quot;)) {
    &lt;div class=&quot;offset3 span6&quot;&gt;
        &lt;div class=&quot;well&quot;&gt;
            &lt;h3&gt;@Messages(&quot;signin&quot;)&lt;/h3&gt;

            @form(CSRF(routes.Session.authenticate()), 'class -&gt; &quot;form-vertical&quot;) {

                @signInForm.globalError.map { error =&gt;
                    &lt;p class=&quot;error&quot;&gt;
                        &lt;span class=&quot;label important&quot;&gt;@error.message&lt;/span&gt;
                    &lt;/p&gt;
                }

                &lt;fieldset&gt;
                    @inputText(
                        signInForm(&quot;email&quot;),
                        'placeholder -&gt; Messages(&quot;email&quot;),
                        '_label -&gt; null,
                        '_help -&gt; Messages(&quot;signin.your.email&quot;)
                    )
                    @inputPassword(
                        signInForm(&quot;password&quot;),
                        '_label -&gt; null,
                        'placeholder -&gt; Messages(&quot;password&quot;),
                        '_help -&gt; Messages(&quot;signin.your.password&quot;)
                    )
                &lt;/fieldset&gt;

                &lt;div class=&quot;form-actions&quot;&gt;
                    &lt;input type=&quot;submit&quot; class=&quot;btn btn-primary&quot; value=&quot;@Messages(&quot;signin&quot;)&quot;&gt;
                &lt;/div&gt;
            }
        &lt;/div&gt;
    &lt;/div&gt;
}
</pre>
<p>Now you can protect your web application from one of the <a href="https://www.owasp.org/index.php/Top_10_2010-A5">OWASP Top 10 security vulnerabilities</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working at Covata</title>
		<link>http://nickcarroll.me/2013/01/07/working-at-covata/</link>
		<comments>http://nickcarroll.me/2013/01/07/working-at-covata/#comments</comments>
		<pubDate>Mon, 07 Jan 2013 06:01:30 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[covata]]></category>

		<guid isPermaLink="false">http://nickcarroll.me/?p=587</guid>
		<description><![CDATA[I have recently taken on the role of product manager at Covata, a start up company that is developing a suite of products that have a unique approach to protecting data.  At the core of our product suite is the Secure Objects SDK which can be used to develop applications that make use of Secure Objects to [...]]]></description>
				<content:encoded><![CDATA[<p>I have recently taken on the role of product manager at <a title="Covata" href="https://www.covata.com" target="_blank">Covata</a>, a start up company that is developing a suite of products that have a unique approach to protecting data.  At the core of our product suite is the <a href="https://www.covata.com/covata-products/covata-sdk/">Secure Objects SDK</a> which can be used to develop applications that make use of Secure Objects to protect content at the data level.</p>
<p>The SDK can be used to manage encryption keys and specify originator controls for restricting access to content that is in motion, at rest, or in use.  The demand for these capabilities are becoming more apparent as employees adopt cloud services such as Dropbox for sharing files or use corporate email on their personal iPhones or Android devices.</p>
<p>The SDK has been integrated into our own product line of <a href="https://www.covata.com/covata-products/covata-secure-objects/">Secure Envelope applications</a> for Windows, Mac, iOS and Android.  Supporting all of these platforms is a real challenge for the development team, but they have done an amazing job in demonstrating the versatility of the SDK for cross-platform development.  We have been attracting a lot of talented developers, and it is great to be working with a bunch of really smart people.  We do take our hiring seriously, and all candidates have to pass a coding challenge as part of the interview process.</p>
<p><a href="http://nickcarroll.me/2013/01/07/working-at-covata/covata_secureobjects/" rel="attachment wp-att-588"><img class="alignnone size-large wp-image-588" alt="Covata_SecureObjects" src="http://i2.wp.com/nickcarroll.me/wp-content/uploads/2013/01/Covata_SecureObjects.jpg?resize=625%2C440" data-recalc-dims="1" /></a></p>
<p>The year ahead is going to be an exciting time for us at Covata.  We&#8217;ve got a lot planned on our roadmap for 2013, and we can&#8217;t wait to ship new products to our customers.  Please follow the <a href="https://blog.covata.com">Covata blog</a> to learn more about the upcoming product releases.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2013/01/07/working-at-covata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running on TextDrive</title>
		<link>http://nickcarroll.me/2012/12/23/running-on-textdrive/</link>
		<comments>http://nickcarroll.me/2012/12/23/running-on-textdrive/#comments</comments>
		<pubDate>Sun, 23 Dec 2012 11:09:50 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://nickcarroll.me/?p=575</guid>
		<description><![CDATA[Just moved my blog to TextDrive.  It didn&#8217;t take long to migrate from a legacy Joyent shared hosting box to TextDrive, especially given that TextDrive is built on Joyent&#8217;s high-performance cloud infrastructure.]]></description>
				<content:encoded><![CDATA[<p>Just moved my blog to <a href="http://textdrive.com">TextDrive</a>.  It didn&#8217;t take long to migrate from a legacy Joyent shared hosting box to TextDrive, especially given that TextDrive is built on <a href="http://joyent.com">Joyent&#8217;s high-performance cloud infrastructure</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2012/12/23/running-on-textdrive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up VMWare shared folders on Ubuntu guest</title>
		<link>http://nickcarroll.me/2012/09/18/setting-up-vmware-shared-folders-on-ubuntu-guest/</link>
		<comments>http://nickcarroll.me/2012/09/18/setting-up-vmware-shared-folders-on-ubuntu-guest/#comments</comments>
		<pubDate>Tue, 18 Sep 2012 05:16:14 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=571</guid>
		<description><![CDATA[For some reason Ubuntu 12.04 is unable to complete the VMware tools automatically. I discovered this by checking if the hgfs module was loaded using the following command. $ lsmod &#124; grep vmhgfs And got a bunch of errors when trying to load the module. $ modprobe vmhgfs To install VMware tools follow the below [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ubuntu.com"><img class="alignleft" alt="" src="http://i0.wp.com/design.ubuntu.com/wp-content/uploads/logo-ubuntu_cof-orange-hex.jpg?resize=171%2C171" data-recalc-dims="1" /></a>For some reason Ubuntu 12.04 is unable to complete the VMware tools automatically. I discovered this by checking if the hgfs module was loaded using the following command.</p>
<p><code><br />
$ lsmod | grep vmhgfs<br />
</code></p>
<p>And got a bunch of errors when trying to load the module.</p>
<p><code><br />
$ modprobe vmhgfs<br />
</code></p>
<p>To install VMware tools follow the below instructions.</p>
<p>In VMware Fusion click on Virtual Machine -&gt; Reinstall VMWare Tools. This will attach the VMware tools ISO to a CDROM on the guest VM. Mounting the CDROM doesn&#8217;t seem to automatically work on my set up so I had to manually mount it with the following command.</p>
<p><code><br />
$ sudo mount /dev/cdrom1 /media/cdrom<br />
</code></p>
<p>Tip: You might need to try /dev/cdrom if /dev/cdrom1 doesn&#8217;t work for you.</p>
<p>Next you need to install linux headers and build essentials. Use the following commands to install these packages.</p>
<p><code><br />
$ sudo apt-get install build-essential<br />
$ sudo apt-get install linux-headers-`uname -r`<br />
</code></p>
<p>Now copy the VMwareTools tar ball to your working directory, and install it.</p>
<p><code><br />
$ cp /media/cdrom/VMwareTools-.tar.gz .<br />
$ tar zxvf VMwareTools-.tar.gz<br />
$ cd vmware-tools-distrib<br />
$ sudo ./vmware-install.pl<br />
</code></p>
<p>This should initiate the install and configuration settings. I just accepted all the default values.</p>
<p>Now you should be able to access your host&#8217;s shared folder at /mnt/hgfs.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2012/09/18/setting-up-vmware-shared-folders-on-ubuntu-guest/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Joyent comes good with lifetime hosting &#8211; Long live TextDrive!</title>
		<link>http://nickcarroll.me/2012/08/31/joyent-comes-good-with-lifetime-hosting/</link>
		<comments>http://nickcarroll.me/2012/08/31/joyent-comes-good-with-lifetime-hosting/#comments</comments>
		<pubDate>Thu, 30 Aug 2012 23:46:45 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=567</guid>
		<description><![CDATA[A lot has happened in the last two weeks, and the below message from Dean Allen was the outcome I was looking for after I was notified of the End of Life notice I had received earlier this month. It looks like Joyent have provided those that bought into the Lifetime hosting deals another option, [...]]]></description>
				<content:encoded><![CDATA[<p>A lot has happened in the last two weeks, and the below message from Dean Allen was the outcome I was looking for after I was notified of the <a href="/2012/08/17/joyent-conned-me-with-lifetime-hosting-deal/">End of Life notice</a> I had received earlier this month.</p>
<p>It looks like Joyent have provided those that bought into the Lifetime hosting deals <a href="http://joyent.com/migration/">another option</a>, and that is to spin off the shared hosting services under the TextDrive name, and continue the lifetime hosting service with TextDrive.  The TextDrive shared hosting services will be migrated to the <a href="http://joyent.com">Joyent Cloud</a>.  Of course some are speculating that the lifetime hosting terms (for as long as we exist) will transfer to the new entity, which may only exist for a short period of time, and thus cleanly bringing an end to the lifetime hosting commitment.  I for one am championing the decision as I believe there is a sustainable business model for shared hosting services to be based on Joyent&#8217;s cloud infrastructure.  Long live TextDrive!</p>
<blockquote><p>
Nick Carroll,</p>
<p>If we haven&#8217;t met, I&#8217;m Dean Allen, a founder of TextDrive, the shared hosting company started by Jason Hoffman and me in 2004. I&#8217;m also a founder and erstwhile President of Joyent, which some time ago merged with TextDrive, though I haven&#8217;t been active with that company for a while.</p>
<p>If we have met, I hope it went okay.</p>
<p>A couple of weeks ago I received, at the same time as Joyent’s shared hosting customers, a message announcing an end to support for shared hosting, affecting customers who’ve been with us for years, some of whom invested in accounts we had intended to support for the rest of the life of the company. The announcement struck many as abrupt. Some took it to be an abandonment of, if not an insult to, your good faith, written in marketing and lawyer speak.</p>
<p>I soon spoke with my friend Jason, who by then was deluged with abusive emails and imaginative threats. After I rubbed some salt in his wounds, we began imagining what it would take to continue providing what we&#8217;d intended all along to those who put their faith in us. After some wrangling, we’ve found a way to make it work.</p>
<p>I’d like to announce that on November 1st, 2012, TextDrive will relaunch anew as a separate hosting company, staffed and funded, run by me. Please consider the recently announced end-of-life for Joyent’s shared hosting customers now revised to be a continuation-of-life, to be carried out in the same friendly, creative, publishing-centered spirit of TextDrive’s early days.</p>
<p>No matter its humble beginnings, Joyent now operates in a very big arena, producing heavy artillery for the armies of cloud computing, and it&#8217;s been years since the company has been structured to service the retail hosting customer. Moreover, the servers on which your accounts still reside are old, slow, inefficient, and they go down on occasion. Everyone deserves better.</p>
<p>Current shared hosting customers can expect to have at least double the resources provisioned have now, running on vastly more stable and efficient infrastructure. Running, in fact, on the very heavy artillery mentioned above.</p>
<p>I intend to have all current paying and lifetime shared hosting customers moved from our old data centers to new, modern and efficient infrastructure by November 1. We&#8217;ll be doing all we can to automate the migration process and keep discomfort at bay. More communications and instructions on the migration process will follow. For now, know that Joyent shared hosting customers, whether paid or lifetime, are now TextDrive customers and that service will not be interrupted.</p>
<p>For updates and resources <a href="http://joyent.com/migration/">click here</a>.</p>
<p>It gives me great pleasure to indicate that I’ll talk to you soon.</p>
<p>Dean Allen<br />
TextDrive
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2012/08/31/joyent-comes-good-with-lifetime-hosting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Joyent conned me with lifetime hosting deal</title>
		<link>http://nickcarroll.me/2012/08/17/joyent-conned-me-with-lifetime-hosting-deal/</link>
		<comments>http://nickcarroll.me/2012/08/17/joyent-conned-me-with-lifetime-hosting-deal/#comments</comments>
		<pubDate>Thu, 16 Aug 2012 23:31:49 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=558</guid>
		<description><![CDATA[Update: Joyent comes good with lifetime hosting &#8211; Long live TextDrive! I was disappointed to have received the below email in my inbox from Joyent this morning. I feel as though I was conned twice when I paid for the Mixed Grill, and then the Three Martini Lunch, both offering lifetime hosting for as long [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Update: <a title="Joyent comes good with lifetime hosting – Long live TextDrive!" href="http://nickcarroll.me/2012/08/31/joyent-comes-good-with-lifetime-hosting/">Joyent comes good with lifetime hosting &#8211; Long live TextDrive!</a></strong></p>
<p>I was disappointed to have received the below email in my inbox from Joyent this morning. I feel as though I was conned twice when I paid for the <a href="http://web.archive.org/web/20060202181857/http://textdrive.com/mixedgrill">Mixed Grill</a>, and then the Three Martini Lunch, both offering lifetime hosting for as long as the company exists. They were both big upfront payments for hosting, and the offer at the time was used to kickstart the Joyent business without giving up shares for capital. What is worse is that I recommended Joyent to friends, colleagues, and clients over the years which converted to paying customers for them. I now have to find a service provider that I can <strong>trust</strong>. <a href="http://www.heroku.com">Heroku</a> and <a href="http://aws.amazon.com">AWS</a> are at the top of the list.</p>
<p>By the way, the one year of Joyent Cloud hosting was a real kick in the teeth. I can go to AWS instead and make use of their <a href="http://aws.amazon.com/free/">free usage tier for a year</a>.</p>
<blockquote><p>Dear Nick Carroll,</p>
<p>We&#8217;ve been analyzing customer usage of Joyent’s systems and noticed that you are one of the few customers that are still on our early products and have not migrated to our new platform, the Joyent Cloud.</p>
<p>For many business reasons, including infrastructure performance, service quality and manageability, these early products are nearing their End of Life. We plan to sunset these services on October 31, 2012 and we&#8217;d like to walk you through a few options.</p>
<p>We understand this might be an inconvenience for you, but we have a plan and options to make this transition as easy as possible. We’ve been developing more functionality on our new cloud infrastructure, the Joyent Cloud, for our customers who care about performance, resiliency and security. Now’s the time to take advantage of all the new capabilities you don’t have today. Everyone that’s moved to our new cloud infrastructure has been pleased with the results.</p>
<p>We appreciate and value you as one of Joyent&#8217;s lifetime Shared Hosting customers. As this service is one of our earliest offerings, and has now run its course, your lifetime service will end on October 31, 2012. However, we believe that you will enjoy the new functionalities of the Joyent Cloud. To show you our appreciation, as one of Joyent&#8217;s lifetime Shared Hosting customers, we&#8217;d like to offer you a free 512MB SmartMachine on the Joyent Cloud for one year. Use this promotional code to redeem the offer.</p>
<p>### PROMOTIONAL CODE REMOVED ###</p>
<p>To find out more about the Joyent Cloud and your options, please follow this link to our migration center for additional details.</p>
<p>Sincerely,</p>
<p>Jason Hoffman<br />
Founder and CTO<br />
Joyent<br />
jason@joyent.com</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2012/08/17/joyent-conned-me-with-lifetime-hosting-deal/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>HTML5 for Managers</title>
		<link>http://nickcarroll.me/2012/03/31/html5-for-managers/</link>
		<comments>http://nickcarroll.me/2012/03/31/html5-for-managers/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 01:13:02 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=532</guid>
		<description><![CDATA[What is new in HTML5? HTML5 is a “living standard” that embraces the constantly changing and evolving nature of the web. HTML5 introduces a number of new elements for semantic structure, multimedia, graphics and APIs for connectivity, storage, and geolocation that will enable the next generation of web applications. It also removes presentational elements such [...]]]></description>
				<content:encoded><![CDATA[<p><strong>What is new in HTML5?</strong><br />
HTML5 is a “<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">living standard</a>” that embraces the constantly changing and evolving nature of the web.  HTML5 introduces a number of new elements for semantic structure, multimedia, graphics and APIs for connectivity, storage, and geolocation that will enable the next generation of web applications.  It also removes presentational elements such as font, strike, big, and applet.  This further ensures a clear separation of concerns between the content for a site (HTML), the way it is presented (CSS), and how it interacts and behaves with the user (Javascript).</p>
<p><a href="http://www.amazon.com/gp/product/0321784421/ref=as_li_tf_il?ie=UTF8&#038;tag=nickcarr-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321784421"><img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&#038;Format=_SL160_&#038;ASIN=0321784421&#038;MarketPlace=US&#038;ID=AsinImage&#038;WS=1&#038;tag=nickcarr-20&#038;ServiceVersion=20070822" ></a><img src="http://www.assoc-amazon.com/e/ir?t=nickcarr-20&#038;l=as2&#038;o=1&#038;a=0321784421" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong>Why is the media industry getting excited about HTML5?</strong><br />
HTML4 was first published in 1997 with the intent of providing a universally understood language for publishing information for global distribution.  HTML5 is the evolution web developers needed to build apps instead of documents.  HTML5 enables developers to break free of the limits they were used to when building web applications.  Developers now have ways to store information on the device for offline use, have access to media, and can create visuals within the browser using HTML5 technologies.  This opens up the potential for <a href="http://www.youtube.com/html5">video</a>, <a href="http://chrome.angrybirds.com/">games</a>, and <a href="http://ie.microsoft.com/testdrive/">rich web applications</a> running in the browser on multiple platforms and across many devices without plug-ins.</p>
<p><strong>Lessons learnt with HTML5 Video</strong><br />
In practice using HTML5 video exposes a number of challenges in dealing with an emerging technology.  There is fragmented support for video codecs between the main browser implementations.  You need to support at least two video codecs (<a href="http://www.w3schools.com/html5/html5_video.asp">H.264 and WebM or Ogg</a>) in order to play video across most HTML5 compatible browsers.  HTML5 video also doesn’t support adaptive bitrate streaming such as HTTP Live Streaming or Smooth Streaming, nor does it support DRM protection schemes for premium video content.  For these we will still need to rely on Flash.</p>
<p><strong>Moving forward with HTML5</strong><br />
HTML5 is still a <a href="http://ishtml5readyyet.com/">long way off</a> from achieving the W3C Recommendation status.  However, Google, Mozilla, Apple, Opera, and even Microsoft are rapidly providing implementations of the new standard.  Check out http://html5test.com/ to see what features your browser supports and how it scores out of a total of 475 points.  You may be surprised by how much or how little your browser supports of the new specification.  For example, the highest scoring browser is Google Chrome 17 (374 points), followed by Mozilla Firefox 11 (335 points), and Opera 11.60 (329 points).  Microsoft takes the wooden spoon award for having the lowest scores for IE 6 (25 points), IE 7 (26 points), and IE 8 (41 points).  The biggest challenge with developing HTML5 apps is providing support for legacy browsers and dealing with nuances between browsers and versions of browsers.  This should be expected as early adopters of an emerging web technology.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2012/03/31/html5-for-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fast NTLM authentication proxy with tunneling</title>
		<link>http://nickcarroll.me/2011/09/01/fast-ntlm-authentication-proxy-with-tunneling/</link>
		<comments>http://nickcarroll.me/2011/09/01/fast-ntlm-authentication-proxy-with-tunneling/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 04:18:03 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Guides]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=378</guid>
		<description><![CDATA[If you are using Linux behind a corporate firewall that only supports Windows, and the Windows proxy authentication is causing you pain, then I suggest installing and using CNTLM. The problem I was experiencing behind my corporate firewall is that I need to authenticate using the windows domain prepended to my username. It seems that [...]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft" alt="" src="http://i0.wp.com/design.ubuntu.com/wp-content/uploads/logo-ubuntu_cof-orange-hex.jpg?resize=285%2C285" width="171" height="171" />If you are using Linux behind a corporate firewall that only supports Windows, and the Windows proxy authentication is causing you pain, then I suggest installing and using CNTLM.</p>
<p>The problem I was experiencing behind my corporate firewall is that I need to authenticate using the windows domain prepended to my username. It seems that you are not able to have a backslash in your username when setting your http_proxy environment variable using the below format.</p>
<pre class="brush: bash; title: ; notranslate">

http://username:password@host:port/

</pre>
<p>In other words I was getting strange errors when using the following in my .bash_profile.</p>
<pre class="brush: bash; title: ; notranslate">
export http_proxy=http://domainusername:password@host.com/
</pre>
<p>You can&#8217;t escape the backslash, nor wrap everything in quotes etc. The only solution I came across was to use an NTLM authentication proxy such as CNTLM, which is a fast NTLM authentication proxy written in C. The Ubuntu package is described as follows.</p>
<blockquote><p>Cntlm is a fast and efficient NTLM proxy, with support for TCP/IP tunneling, authenticated connection caching, ACLs, proper daemon logging and behaviour and much more. It has up to ten times faster responses than similar NTLM proxies, while using by orders or magnitude less RAM and CPU. Manual page contains detailed information.</p></blockquote>
<p>It can be installed using the command, but you&#8217;ll need to do this when you are connected directly to the internet, and thus bypassing your corporate proxy!</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install cntlm
</pre>
<p>You will then need to configure CNTLM by modifying the config file at /etc/cntlm.conf. You&#8217;ll need to specify your windows domain login credentials in the config file.</p>
<p>Once configured, restart CNTLM using the command:</p>
<pre class="brush: bash; title: ; notranslate">
sudo /etc/init.d/cntlm restart
</pre>
<p>Once CNTLM has been configured and restarted, you can then update your http_proxy settings to use http://localhost:3128, or whatever port number you used in the CNTLM config file. By default CNTLM listens on port 3128. Now you will be able to use apt-get, but this time behind your corporate proxy.</p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2011/09/01/fast-ntlm-authentication-proxy-with-tunneling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Checkbox is now available in the App Store</title>
		<link>http://nickcarroll.me/2011/05/29/checkbox-is-now-available-in-the-app-store/</link>
		<comments>http://nickcarroll.me/2011/05/29/checkbox-is-now-available-in-the-app-store/#comments</comments>
		<pubDate>Sun, 29 May 2011 00:35:58 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=365</guid>
		<description><![CDATA[Checkbox has been unleashed upon the masses and is now ready for sale in the App Store. Checkbox allows you to take a photo of your task list, add checkboxes to the photo, and track the tasks that you have completed. Use Checkbox to quickly capture your shopping list on your fridge, the meeting actions [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://itunes.apple.com/us/app/checkbox/id439573269?mt=8">Checkbox</a> has been unleashed upon the masses and is now ready for sale in the App Store.</p>
<p><a title="icon-appstore by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/checkbox/id508746628?ls=1&amp;mt=8"><img alt="icon-appstore" src="http://i0.wp.com/farm6.static.flickr.com/5107/5769344005_6e40aa08ed_t.jpg?resize=100%2C100" data-recalc-dims="1" /></a> <a title="Screenshot 2011.01.06 15.25.42 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/checkbox/id508746628?ls=1&amp;mt=8"><img alt="Screenshot 2011.01.06 15.25.42" src="http://i2.wp.com/farm6.static.flickr.com/5263/5769344231_20e13d08a2_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="Screenshot 2011.01.06 15.26.48 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/checkbox/id508746628?ls=1&amp;mt=8"><img alt="Screenshot 2011.01.06 15.26.48" src="http://i2.wp.com/farm3.static.flickr.com/2063/5769344663_b78bfac8b0_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="Screenshot 2011.01.06 15.28.51 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/checkbox/id508746628?ls=1&amp;mt=8"><img alt="Screenshot 2011.01.06 15.28.51" src="http://i2.wp.com/farm3.static.flickr.com/2045/5769345083_8439041508_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a></p>
<p>Checkbox allows you to take a photo of your task list, add checkboxes to the photo, and track the tasks that you have completed.</p>
<p>Use Checkbox to quickly capture your shopping list on your fridge, the meeting actions jotted on your notebook, or the menu of your favourite restaurant. Then turn the photo into a checklist by adding checkboxes to items in the photo that you want to track. Simply tap on the checkboxes to keep track of tasks that you have previously completed.</p>
<p><a href="/apps/checkbox/">Find out more about Checkbox</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2011/05/29/checkbox-is-now-available-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Deck is now available in the App Store</title>
		<link>http://nickcarroll.me/2011/05/16/estimation-deck-is-now-available-in-the-app-store/</link>
		<comments>http://nickcarroll.me/2011/05/16/estimation-deck-is-now-available-in-the-app-store/#comments</comments>
		<pubDate>Mon, 16 May 2011 10:51:43 +0000</pubDate>
		<dc:creator>Nick Carroll</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[estimation deck]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=371</guid>
		<description><![CDATA[Estimation Deck is now back in the App Store. Estimation Deck saves you from carrying around a deck of cards for your next Agile estimation session. Estimation Deck provides a set of fibonacci numbers that can be used during an Agile estimation session. This application allows the Agile professional to swipe through the deck of [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8">Estimation Deck</a> is now back in the App Store. Estimation Deck saves you from carrying around a deck of cards for your next Agile estimation session.</p>
<p><a title="estimation-deck-512 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="estimation-deck-512" src="http://i1.wp.com/farm3.static.flickr.com/2297/5807599645_9d3f5eedbb_t.jpg?resize=100%2C100" data-recalc-dims="1" /></a> <a title="IMG_0259 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="IMG_0259" src="http://i0.wp.com/farm3.static.flickr.com/2580/5807599723_8da73f5bb7_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="IMG_0260 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="IMG_0260" src="http://i0.wp.com/farm4.static.flickr.com/3220/5808165714_de7270c536_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="IMG_0263 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="IMG_0263" src="http://i0.wp.com/farm4.static.flickr.com/3203/5808166002_5129ae2b90_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="IMG_0262 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="IMG_0262" src="http://i2.wp.com/farm6.static.flickr.com/5028/5807600015_487980a460_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a> <a title="IMG_0261 by ncarroll, on Flickr" href="http://itunes.apple.com/us/app/estimation-deck/id442680172?mt=8"><img alt="IMG_0261" src="http://i1.wp.com/farm3.static.flickr.com/2735/5808165824_5531cd7d0b_t.jpg?resize=67%2C100" data-recalc-dims="1" /></a></p>
<p>Estimation Deck provides a set of fibonacci numbers that can be used during an Agile estimation session. This application allows the Agile professional to swipe through the deck of cards until the desired estimate is found for the proposed story. Tapping on the estimate card will flip the card to hide your estimate from your colleagues. Tapping the back of the card will flip the card again to reveal your estimate to the group.</p>
<p>Use the settings to switch between Fibonacci, t-shirt sizes, and powers of 2 decks.</p>
<p><a href="http://agilecognition.com/apps/estimation-deck/">Find out more about Estimation Deck</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nickcarroll.me/2011/05/16/estimation-deck-is-now-available-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
