<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Liam Kaufman</title><link>https://liamkaufman.com/blog/</link><description>Recent content in Blogs on Liam Kaufman</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 05 Aug 2014 00:00:00 +0000</lastBuildDate><atom:link href="https://liamkaufman.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Smiley Faces in Linux Source Code and Token Statistics</title><link>https://liamkaufman.com/blog/2014/08/05/smily-faces-in-linux-source-code/</link><pubDate>Tue, 05 Aug 2014 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2014/08/05/smily-faces-in-linux-source-code/</guid><description>&lt;p&gt;
 Github uses &lt;a href="https://github.com/github/linguist"&gt;Linguist&lt;/a&gt;, a Ruby library, to help detect which programming language is in a given file. Recently, an issue was filed that indicated that Linguist incorrectly classifies Mercury (a programming language) files as Objective-c since they both use the same extension (.m). Linguist’s primary method for language detection is a file’s extension - a method that fell short for Mercury. If Mercury were added to Linguist, then there would be two languages with the same extension - and this is where things get interesting. If two languages share the same extension, or the file does not have an extension, Linguist has 3 methods for guessing the language. First it checks if the file has a shebang (&lt;code&gt;#!/bin/sh&lt;/code&gt;). If there is no shebang the second method it uses is a set of &lt;a href="https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb"&gt;heuristics&lt;/a&gt;. For instance, if the file includes the “:-” token it concludes that the contents are prologue code, or if “defun” is present it’s common lisp. If it still hasn’t found a match the third method it uses is a &lt;a href="https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb"&gt;Bayesian classifier&lt;/a&gt;. Roughly speaking the classifier iterates over all of a file’s tokens, and for each token determines the probability that it is present in each programming language. Subsequently, it sums all those probabilities, sorts the results, and returns an array of language-probability pairs (e.g &lt;code&gt;[[‘Ruby’, 0.8], [‘Python’, 0.2]]&lt;/code&gt;). 
&lt;/p&gt;</description></item><item><title>Understanding AngularJS Directives Part 2: ngView</title><link>https://liamkaufman.com/blog/2013/10/11/understanding-angularjs-directives-part2-ng-view/</link><pubDate>Mon, 11 Nov 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/10/11/understanding-angularjs-directives-part2-ng-view/</guid><description>&lt;p&gt;
 In a previous article I &lt;a href="blog/2013/05/13/understanding-angularjs-directives-part1-ng-repeat-and-compile/"&gt;explored ng-repeat, it's implementation, and how to create a custom repeater&lt;/a&gt;. In this article I'll first delve into the inner workings of ngView and then walk through the creation of an "ngMultiView" directive. To get the most out of this article you'll need an intermediate understanding of creating directives (via &lt;a href="blog/2013/05/13/understanding-angularjs-directives-part1-ng-repeat-and-compile/"&gt;the previous article on ng-repeat&lt;/a&gt; and reading the &lt;a href="http://docs.angularjs.org/guide/directive"&gt;the AngularJS directive guide&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
 Starting with AngualrJS 1.2, the &lt;code&gt;ngView&lt;/code&gt; directive, and the &lt;code&gt;$route&lt;/code&gt; service were moved into a separate module called &lt;code&gt;ngRoute&lt;/code&gt;. As a result, to use routes and &lt;code&gt;ngView&lt;/code&gt; your app must explicitly declare it as a dependency. Furthermore, the syntax for the "otherwise" statement is slightly different from older versions of AngularJS. Below is a complete example of a tiny AngularJS 1.2 app with two routes and a default:
&lt;/p&gt;</description></item><item><title>Using AngularJS Promises</title><link>https://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/</link><pubDate>Mon, 09 Sep 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/</guid><description>&lt;p&gt;
 In my previous article I discussed the &lt;a href="https://liamkaufman.com/blog/2013/08/06/how-angularjs-made-me-a-better-nodejs-developer/"&gt;benefits of using dependency injection&lt;/a&gt; to make code more testable and modular. In this article I’ll focus on using promises within an AngularJS application. This article assume some prior knowledge of promises (&lt;a href="http://wildermuth.com/2013/8/3/JavaScript_Promises"&gt;a good intro on promises&lt;/a&gt; and &lt;a href="http://docs.angularjs.org/api/ng.$q"&gt;AngularJS' official documentation&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
 Promises can be used to unnest asynchronous functions and allows one to chain multiple functions together - increasing readability and making individual functions, within the chain, more reusable.
&lt;/p&gt;</description></item><item><title>How AngularJS Made Me a Better Node.js Developer</title><link>https://liamkaufman.com/blog/2013/08/06/how-angularjs-made-me-a-better-nodejs-developer/</link><pubDate>Tue, 06 Aug 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/08/06/how-angularjs-made-me-a-better-nodejs-developer/</guid><description>&lt;p&gt;
	Over the past 6 years I’ve used Ruby on Rails, Backbone.js, Node and AngularJS. RoR reinforced my knowledge of Model View Controller (MVC) while Backbone.js did the same for my knowledge of Publish/Subscribe. Like many who made the switch to Node, my first instinct was to try and apply MVC to my Node.js apps - however, it felt unnatural. Taking a "class"-based approach, using CoffeeScript, didn’t feel entirely natural either. 
&lt;/p&gt;</description></item><item><title>Understanding AngularJS Directives Part 1: ng-repeat and compile</title><link>https://liamkaufman.com/blog/2013/05/13/understanding-angularjs-directives-part1-ng-repeat-and-compile/</link><pubDate>Mon, 13 May 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/05/13/understanding-angularjs-directives-part1-ng-repeat-and-compile/</guid><description>&lt;p&gt;
 My first impression of Angular.js was one of amazement. A small amount of code could do a lot. My worry with Angular, and other magical frameworks, is that initially you are productive, but eventually you hit a dead end requiring full understanding of how the magic works. In my quest to master Angular.js, I wanted to learn everything about creating custom directives - a goal that I’d hope would ameliorate the learning curve. &lt;a href="http://www.egghead.io/"&gt;Egghead.io&lt;/a&gt; does a good job exploring basic, and intermediate, examples of custome directives but it still wasn’t clear when to use the compile parameter in a custome directive. 
&lt;/p&gt;</description></item><item><title>Adding Real-Time To A RESTful Rails App</title><link>https://liamkaufman.com/blog/2013/02/27/adding-real-time-to-a-restful-rails-app/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/02/27/adding-real-time-to-a-restful-rails-app/</guid><description>&lt;p&gt;
 After rewriting &lt;a href="http://understoodit.com"&gt;Understoodit&lt;/a&gt; several times I’ve spent a lot of time thinking about building real-time web applications. While I elected to rewrite 100% of Understoodit in Node, there are many existing Rails and Sinatra applications that can’t be completely rewritten, but could still benefit with the addition of real-time updates. The tutorial below starts with a traditional web-app written in Backbone and Ruby on Rails (RoR). Of course the modifications could easily be applied to any (Backbone|Angular|Ember) and (Rails|Sinatra|Django|Pylons) app.
&lt;/p&gt;</description></item><item><title>Three Important Conversion Metrics You Should Watch</title><link>https://liamkaufman.com/blog/2013/02/08/three-important-conversion-metrics-you-should-watch/</link><pubDate>Fri, 08 Feb 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/02/08/three-important-conversion-metrics-you-should-watch/</guid><description>&lt;p&gt;
You’ve created an &lt;a href="http://liamkaufman.com/blog/2013/01/22/making-software-people-want-before-launching/"&gt;app that your beta testers use&lt;/a&gt; and &lt;a href="http://liamkaufman.com/blog/2013/01/30/are-you-ready-to-launch/"&gt;your launch was a huge success&lt;/a&gt;. Every day the number of registered users increases and you feel like you’re making progress and moving closer to your goals. 
&lt;/p&gt;
&lt;p&gt;
It would be a mistake to hunker down and focus singularly on hammering out new features. Now that you’ve launched you have significantly more people visiting your homepage, creating accounts and using your app. You have much more data to help you prioritize what to do next. 
&lt;/p&gt;</description></item><item><title>Are You Ready To Launch?</title><link>https://liamkaufman.com/blog/2013/01/30/are-you-ready-to-launch/</link><pubDate>Wed, 30 Jan 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/01/30/are-you-ready-to-launch/</guid><description>&lt;p&gt;
 &lt;strong&gt;Last Week&lt;/strong&gt;: &lt;a href="http://liamkaufman.com/blog/2013/01/22/making-software-people-want-before-launching/"&gt;Before Launching, Build Software People Use&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You’ve created a product that people want to use, and now you’re eager to launch. From my experiences launching &lt;a href="https://understoodit.com"&gt;Understoodit&lt;/a&gt;, in May 2012, I’ve compiled a set of steps that helped Understoodit get on several big sites including &lt;a href="http://techcrunch.com/2012/05/02/understoodit-lets-students-voice-their-confusion-without-having-to-raise-their-hands/"&gt;TechCrunch&lt;/a&gt;, &lt;a href="http://www.thestar.com/news/gta/article/1173277--don-t-get-what-the-prof-s-talking-about-there-s-an-app-for-that"&gt;Toronto Star&lt;/a&gt;, and &lt;a href="http://betakit.com/2012/05/03/understoodit-helps-confused-students-in-the-classroom"&gt;BetaKit&lt;/a&gt;. If you have a large budget hiring a PR firm might be your best bet, otherwise the steps below will help you get started.
&lt;/p&gt;</description></item><item><title>Before Launching Build Software People Use</title><link>https://liamkaufman.com/blog/2013/01/22/making-software-people-want-before-launching/</link><pubDate>Tue, 22 Jan 2013 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2013/01/22/making-software-people-want-before-launching/</guid><description>&lt;p&gt;
You’re a talented developer and have a great idea for a startup. You’ve read &lt;a href="http://theleanstartup.com/"&gt;&lt;em&gt;The Lean Startup&lt;/em&gt;&lt;/a&gt;, you’ve attended entrepreneur events, and you read &lt;a href="http://news.ycombinator.com/"&gt;&lt;em&gt;Hacker News&lt;/em&gt;&lt;/a&gt;. At this point you’re confident that you’ll be able to build a compelling product while avoiding common startup mistakes. 
&lt;/p&gt;
&lt;p&gt;
Unfortunately, that pretty much summed up my (immodest) perception of myself prior to launching &lt;a href="https://understoodit.com"&gt;Understoodit.com&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
While the May 2012 launch of Understoodit was more successful than I anticipated, there were certainly things I could have placed more focus on prior to launching. Below I’ve informally divided the pre-launch process into 5 stages: 1) finding customers, 2) the one feature, 3) early beta testing, 4) engaged users, and 5) time to launch.
&lt;/p&gt;</description></item><item><title>Why You Should Be Nice To Your Customers</title><link>https://liamkaufman.com/blog/2012/11/21/why-you-should-be-nice-to-your-customers/</link><pubDate>Wed, 21 Nov 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/11/21/why-you-should-be-nice-to-your-customers/</guid><description>&lt;p&gt;
Being nice to your customers seems like a no brainer. It makes perfect business sense: happy customers are less likely to stop using your service and more likely to refer your service to their friends. However, there is another significant reason that being nice pays off. 
&lt;/p&gt;
&lt;p&gt;
Running a startup can be a tough slog. You’re unsure if people like what you're building enough for it to be successful. If you get some traction there will be people out there that will belittle your idea, or your execution. With all the unknowns, and the not-always-constructive criticism, it’s incredibly refreshing to interact with a nice customer that loves your product. 
&lt;/p&gt;</description></item><item><title>Stripe Would Be Perfect If...</title><link>https://liamkaufman.com/blog/2012/11/09/stripe-would-be-perfect-if/</link><pubDate>Fri, 09 Nov 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/11/09/stripe-would-be-perfect-if/</guid><description>&lt;p&gt;
I was among many Canadian developers who where happy to hear that Stripe had come to Canada. We were planning on adding subscriptions to &lt;a href="https://understoodit.com"&gt;Understoodit.com&lt;/a&gt;, so the timing couldn’t have been better. We assumed that it would take a couple of days to integrate Stripe, but it actually took &lt;a href="https://twitter.com/davidmisshula"&gt;@davidmisshula&lt;/a&gt; and me 7 days. The process gave me some insights that I thought I’d share.
&lt;/p&gt;
&lt;p&gt;
I’ve heard that Stripe is significantly easier to integrate than its competitors, however, having never integrated a payment system I have no comparison. Overall I think Stripe is excellent and I’m glad we chose it, however, there are 4 areas, that if improved, would make Stripe perfect: 1) getting started, 2) taxes, 3) invoices and 4) edge cases.
&lt;/p&gt;</description></item><item><title>Common JavaScript Errors</title><link>https://liamkaufman.com/blog/2012/09/09/common-javascript-errors/</link><pubDate>Sun, 09 Sep 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/09/09/common-javascript-errors/</guid><description>&lt;p&gt;
 With the rise of thick client-side applications, and Node.js, JavaScript has become an increasingly important programming language. Despite its simplicity, JavaScript presents some difficulties for those new to the language. I thought it would be useful to outline several JavaScript errors that I commonly made when I was learning the language.
&lt;/p&gt;

&lt;h2&gt;Scope: this, that and window&lt;/h2&gt;
&lt;p&gt;
 Like many programming languages JavaScript provides internal access to objects using the keyword &lt;code&gt;this&lt;/code&gt;. Unfortunately, what &lt;code&gt;this&lt;/code&gt; refers to differs depending on what called the function containing &lt;code&gt;this&lt;/code&gt;. A common example, shown below, is what happens when &lt;code&gt;setTimeout&lt;/code&gt; is called. 
&lt;/p&gt;</description></item><item><title>Redis and Relational Data</title><link>https://liamkaufman.com/blog/2012/06/04/redis-and-relational-data/</link><pubDate>Mon, 04 Jun 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/06/04/redis-and-relational-data/</guid><description>&lt;p&gt;
 &lt;strong&gt;UPDATE:&lt;/strong&gt; Based on the feedback in the comments (Phineas), I've added an index to the comments table and updated the results.
&lt;/p&gt;
&lt;p&gt;
 Using the right tool for the job is a basic tenant amongst programmers. However, with all the currently available database options it's increasingly difficult to figure out what the right tool is. Sometime it's nice to have a very simple tool that can be used for many different tasks: Redis. Over the last 4 months I've been using Redis heavily and I've even started to use it for relational data. I've been curious to find out the performance differences between Redis and PostgreSQL. Below I'll provide an example of storing a simple relational dataset in Redis, and I'll look at the performance differences between Redis and PostgreSQL.
&lt;/p&gt;</description></item><item><title>Adding Authentication, Waiting Lists and Sign Ups to an Express App Using Drawbridge.js and Redis</title><link>https://liamkaufman.com/blog/2012/04/21/adding-authentication-waiting-lists-and-sign-ups-to-and-express-app-using-drawbridge-and-redis/</link><pubDate>Sat, 21 Apr 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/04/21/adding-authentication-waiting-lists-and-sign-ups-to-and-express-app-using-drawbridge-and-redis/</guid><description>&lt;p&gt;
There are several popular modules for adding password-based user authentication to an Express.js app. Unfortunately, they require writing lots of code to get started. I prefer the approach that authentication libraries like Devise take: they generate code and views, and you’re free to modify, or delete, what’s created. 
&lt;/p&gt;

&lt;p&gt;
Given the authentication options for Express.js I wanted to create a module that would make adding user authentication quick and easy. Moreover, I also wanted developers to be free to edit and modify the generated views. In addition to authentication I wanted the module to handle sign ups (the type you see on a just-launched startup’s page) and to handle waiting lists and invitations. Based on the module's functionality I've decided to call it Drawbridge.js.
&lt;/p&gt;</description></item><item><title>From Digg to Reddit to Hacker News: What's Next?</title><link>https://liamkaufman.com/blog/2012/03/23/from-digg-to-reddit-to-hacker-news-whats-next/</link><pubDate>Thu, 22 Mar 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/03/23/from-digg-to-reddit-to-hacker-news-whats-next/</guid><description>&lt;p&gt;
Dustin Curtis, the creator of &lt;a href="http://svbtle.com/"&gt;Svbtle&lt;/a&gt;, recently mentioned on &lt;a href="https://twitter.com/#!/dcurtis/status/182986897444966402"&gt;Twitter&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt;
I miss the Hacker News from four years ago. It was awesome. The discussions there are not even worth reading anymore. It's sad.
&lt;/blockquote&gt;
&lt;p&gt;
 Based on the number of retweets and favorites, I suspect that others agree. In fact the idea that Hacker News is degrading is common enough that it has been addressed on &lt;a href="http://ycombinator.com/newsguidelines.html"&gt;HN’s guidelines&lt;/a&gt;: 
&lt;/p&gt;
&lt;blockquote&gt;
 If your account is less than a year old, please don't submit comments saying that HN is turning into Reddit. (It's a common semi-noob illusion.).
&lt;/blockquote&gt;
&lt;p&gt;
 However, Mr Curtis has been on HN for &lt;a href="http://news.ycombinator.com/user?id=dcurtis"&gt;over five years&lt;/a&gt;, and is certainly not subject to the 'common semi-noob illusion'. Is HN getting worse then?
&lt;/p&gt;</description></item><item><title>Making Hacker News Faster: Two Approaches</title><link>https://liamkaufman.com/blog/2012/03/23/making-hacker-news-faster-two-approaches/</link><pubDate>Thu, 22 Mar 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/03/23/making-hacker-news-faster-two-approaches/</guid><description>&lt;p&gt;
Over the years traffic to &lt;a href="http://news.ycombinator.com"&gt;Hacker News (HN)&lt;/a&gt;, "a social news website about computer hacking and startup companies" &lt;a href="http://en.wikipedia.org/wiki/Hacker_News"&gt;(Wikipedia)&lt;/a&gt;, has grown consistently, with an &lt;a href=”http://www.ycombinator.com/images/hntraffic-5mar12.png”&gt;average of 150,000 daily uniques&lt;/a&gt;. The growth in traffic may explain why load times seem increasingly variable. I couldn’t help but wonder if some optimizations could be made to decrease both variability and load times. I'll propose two broad approaches, the first involves migrating away from table based layouts while the second involves consuming a JSON API.
&lt;/p&gt;</description></item><item><title>Scraping Web Pages with jQuery, Node.js and Jsdom</title><link>https://liamkaufman.com/blog/2012/03/08/scraping-web-pages-with-jquery-nodejs-and-jsdom/</link><pubDate>Thu, 08 Mar 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/03/08/scraping-web-pages-with-jquery-nodejs-and-jsdom/</guid><description>&lt;p&gt;
I always found it odd that accessing DOM elements with Ruby, or Python, wasn't as easy as it was with jQuery. Many HTML parsing libraries employ Simple API for XML (SAX) that can handle extremely large XML documents, but is cumbersome and adds complexity. Other parsing libraries use XML Path Language (XPath), which is conceptually simpler than SAX, but still more of an effort than jQuery. I was pleasantly surprised to discover that it's possible to use jQuery to parse web pages with Node.js. This is accomplished by using &lt;a href="https://github.com/tmpvar/jsdom"&gt;jsdom, "a javascript implementation of the W3C DOM"&lt;/a&gt;.
&lt;/p&gt;</description></item><item><title>Why Riak and Node.js Make a Great Pair</title><link>https://liamkaufman.com/blog/2012/03/01/why-riak-and-nodejs-make-a-great-pair/</link><pubDate>Thu, 01 Mar 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/03/01/why-riak-and-nodejs-make-a-great-pair/</guid><description>&lt;p&gt;
In the last few years there has been a proliferation of noSQL databases. Searching on Google for &lt;code&gt;site:news.ycombinator.com nosql&lt;/code&gt; yields over 2,500 hits, many of which include include posts asking when you'd want to use a noSQL database. If you're used to a relational database it might seem like an unnecessary burden to learn another database paradigm, but there's one open source noSQL database that I think is not only worth the burden, but is a perfect fit for Node.js development: &lt;a href=”http://wiki.basho.com/What-is-Riak%3F.html”&gt;Riak (pronounced "REE-ack")&lt;/a&gt;. 
&lt;/p&gt;</description></item><item><title>Adding Real-Time To Rails With Socket.IO, Node.js and Backbone.js (With Demo)</title><link>https://liamkaufman.com/blog/2012/02/25/adding_real-time_to_rails_with_socket.io_nodejs_and_backbonejs_with_demo/</link><pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/02/25/adding_real-time_to_rails_with_socket.io_nodejs_and_backbonejs_with_demo/</guid><description>&lt;p&gt;
 &lt;a href="http://node-chatty.herokuapp.com/chatty" target="_blank"&gt;&lt;img src="https://liamkaufman.com/images/chatty-screen.png"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
 UPDATE: see my &lt;a href="https://liamkaufman.com/blog/2013/02/27/adding-real-time-to-a-restful-rails-app/"&gt;new article on adding real-time to your Rails application&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
 Despite the &lt;a href="http://gilesbowkett.blogspot.in/2012/02/rails-went-off-rails-why-im-rebuilding.html"&gt;recent distaste for Rails&lt;/a&gt;, I still think its a nice framework for developing websites (e.g. devise &amp;amp; active record). However, if you want real-time communication Socket.IO and Node.js seem to be the best options. If you already have an existing Rails application porting the entire application to Node.js is likely not on option. Fortunately, it is relatively easy to use Rails to serve your client-side Socket.IO web application, while Node.js and Socket.IO are used for real-time communication. The primary goal of this article is to show one method of integrating a real-time application, that is slightly more complex than a todo app, with Rails. Thus, I created Chatty, a simple chat room web application that allows a user to see all the messages in the chat room, or filter the messages by user. &lt;a href="http://twitter.github.com/bootstrap/index.html"&gt;Twitter's Bootstrap&lt;/a&gt; was used for the CSS and modal dialogue. 
&lt;/p&gt;</description></item><item><title>Integrating Backbone Boilerplate with Rails 3</title><link>https://liamkaufman.com/blog/2012/02/18/integrating-backbone-boilerplate-with-rails3/</link><pubDate>Sat, 18 Feb 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/02/18/integrating-backbone-boilerplate-with-rails3/</guid><description>&lt;p&gt;
Despite making several small Backbone.js apps in the past year, Backbone.js had never really clicked with me. I wasn't crazy about having to spend time thinking about file and folder organizing for JavaScript and template files. I was also unsure how all the pieces would fit together. Thanks to Tim Branyen's &lt;a href="http://tbranyen.github.com/backbone-boilerplate/"&gt;Backbone Boilerplate&lt;/a&gt; those issues have been significantly reduced. According to Backbone Boilerplate's documentation: "This boilerplate is the product of much research and frustration. Existing boilerplates freely modify Backbone core, lack a build process, and are very prescriptive; this boilerplate changes that."
&lt;/p&gt;</description></item><item><title>Pushing Files to the Browser Using Delivery.js, Socket.IO and Node.js</title><link>https://liamkaufman.com/blog/2012/02/11/12-pushing-files-to-the-browser-using-deliveryjs-socketio-and-nodejs/</link><pubDate>Sat, 11 Feb 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/02/11/12-pushing-files-to-the-browser-using-deliveryjs-socketio-and-nodejs/</guid><description>&lt;p&gt;
Recently I've been working with both the HTML 5 File API and Socket.IO and it occured to me that those technologies could be used to send, and push, files between the client and server. Immediately I set about making delivery.js, a simple node module that makes it extremely easy to send and push files between the client and the server via Socket.IO. 
&lt;/p&gt;
&lt;p&gt;
I should note that this is my first node module, so constructive critism and feedback are welcome and encouraged! 
&lt;/p&gt;</description></item><item><title>Testing Socket.IO with Mocha, Should.js and Socket.IO Client</title><link>https://liamkaufman.com/blog/2012/01/28/testing-socketio-with-mocha-should-and-socketio-client/</link><pubDate>Sat, 28 Jan 2012 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2012/01/28/testing-socketio-with-mocha-should-and-socketio-client/</guid><description>&lt;p&gt;
I’m currently in the midst of creating an application that utilizes &lt;a href="http://socket.io/"&gt;Socket.IO&lt;/a&gt; for real-time communication between users. Using &lt;a href="http://visionmedia.github.com/mocha/"&gt;mocha&lt;/a&gt; and &lt;a href="https://github.com/visionmedia/should.js"&gt;should.js&lt;/a&gt; I was able to test objects within my node app. However, I quickly found that there were some odd synchronization issues between clients that the test cases couldn't cover. To test the interaction between clients I needed a way to programatically communicate to my node server: Enter &lt;a href="https://github.com/LearnBoost/socket.io-client"&gt;socket.io-client&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a class="github" href="https://github.com/liamks/Testing-Socket.IO"&gt;&lt;span&gt;&lt;/span&gt;Testing Socket.IO on Github&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;
 Writing Tests For your Socket.io Application
&lt;/h2&gt;
&lt;p&gt;
As an example of how to test your socket.io application we’ll create a small chat application and test it using: &lt;a href="https://github.com/LearnBoost/socket.io-client"&gt;socket.io-client&lt;/a&gt;, &lt;a href="http://visionmedia.github.com/mocha/"&gt;mocha&lt;/a&gt; and &lt;a href="https://github.com/visionmedia/should.js"&gt;should.js&lt;/a&gt;.
&lt;/p&gt;</description></item><item><title>Examples I Want to See in JavaScript Frameworks.</title><link>https://liamkaufman.com/blog/2011/12/13/examples_i_want_to_see_in_javascript_frameworks/</link><pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2011/12/13/examples_i_want_to_see_in_javascript_frameworks/</guid><description>&lt;p&gt;
 With the public release of &lt;a href="http://emberjs.com"&gt;ember.js&lt;/a&gt;,
 I excitedly poured over the examples hoping to find a framework that 
 would make Creating, Reading, Updating and Deleting (CRUD) easier. When
 push comes to shove, the vast majority of apps that I've worked on
 involve CRUD. 
&lt;/p&gt;

&lt;p&gt;
 I want to see the following (excuse the pseudo code):&lt;br /&gt;
``` javascript Model
model({
 validation: function(m){...}
});
```

``` javascript Controller
controller({
 show: function(){...},

 index: function(){...},

 new: function(){...},

 create: function(){...},

 ...

});
```

``` html Form
&lt;form action=''&gt;
 &lt;input type='text' name='firstName'&gt;
 &lt;input type='submit' value='submit'&gt;
&lt;/form&gt;
```
&lt;/p&gt;</description></item><item><title>What is the best way of Mastering JavaScript?</title><link>https://liamkaufman.com/blog/2011/09/09/what-is-the-best-way-of-mastering-javascript/</link><pubDate>Fri, 09 Sep 2011 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2011/09/09/what-is-the-best-way-of-mastering-javascript/</guid><description>&lt;p&gt;
I want to master JavaScript. Before humbly doing so, I think it’s important to define what I think mastering JS consists of. In my opinion there are two parts to mastering a programming language. The first is mastering the language itself: syntax, important functions, classes, idioms, etc. The second part is mastering the programming paradigm, or paradigms, that the language falls in. This second part is difficult with JS, as it is &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;object oriented, functional and imperative &lt;/a&gt;. Thus, to master JS I must master both parts: 1) the language and 2) the paradigms.
&lt;/p&gt;</description></item><item><title>Liamkaufman.com gets a new look</title><link>https://liamkaufman.com/blog/2011/08/23/liamkaufmancom-gets-a-new-look/</link><pubDate>Tue, 23 Aug 2011 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2011/08/23/liamkaufmancom-gets-a-new-look/</guid><description>&lt;p&gt;
After 3 years without change, I've redone my personal website using Jekyll and Bootstrap. The previous version of liamkaufman.com was hosted on Google App Engine and consisted of a very basic CMS that I made before I knew what I was doing. I was both unhappy with the look of the site, and the code behind it. At the same time I was interested in using Jekyll, as I wanted to avoid the hassles associated with database backed sites. I also appreciate the fact that my site, and it’s content are easy to deploy and update via Github. 
&lt;/p&gt;</description></item><item><title>pyItunes, a Python iTunes Library Parser</title><link>https://liamkaufman.com/blog/2009/03/18/pyitunes-a-python-itunes-library-parser/</link><pubDate>Wed, 18 Mar 2009 00:00:00 +0000</pubDate><guid>https://liamkaufman.com/blog/2009/03/18/pyitunes-a-python-itunes-library-parser/</guid><description>&lt;p&gt;
	In an effort to add some personality to this site I thought I'd list my favourite songs. iTunes provides
	a mechanism for users to rate songs, by giving a song 0 to 5 stars. After years of listening to music, and rating it,
	I have a large collection of rated songs. Manually copying and pasting each song into an HTML file seemed
	 inefficient and time consuming, enter Python.
&lt;/p&gt;

&lt;p&gt;
	In an effort to learn Python, and parse my iTunes library, I created pyItunes, a Python module. pyItunes includes three classes that can parse the "iTunes Music Library.xml" file and convert it into list of Song objects. I decided to roll my own micro-xml parser that can only parse the iTunes xml file. Although, reinventing the wheel, especially an XML parser, is likely a horrible idea I felt it would be a good learning experience. In future versions I may swap an existing XML parser that is much faster and more efficient than the one I created.
&lt;/p&gt;</description></item></channel></rss>