Client Sync for the REST of Us

It is no surprise that streaming technologies such as meteor have taken the spotlight over the last year. They present a compelling real-time way of keeping the client in sync with the server. One interesting result of thinking in real-time is that things like conflicts become top of mind: what is supposed to happen when two separate users modify the same data at the same time?

When dealing with traditional websites and basic REST API's, however, less thought is given to these concurrency scenarios. Real-time aside, in an age where client-heavy applications are becoming commonplace, this behavior can be problematic. In this post, I explore this inadequacy and also explore a possible solution.

Read More

10 Things You Can Do With EPF (That You Can't Easily Do With Ember Data)

There exists a viewpoint that Ember Data is "broken"; that the core team has abandoned the project and that the codebase is awash with issues. This is far from the reality of the situation, as I personally know many people who are successfully using ED on real projects. It is also my understanding that ED is not abandoned and that the core team is fostering a renewed interest in pushing it forward. The truth is more complex and ties into why we created Ember.js Persistence Foundation.

One way to shed light onto the situation is to give a simple enumeration of things that ED lacks and EPF provides. Having used ED for several years on a large project, these are things that, in our case, are major issues, but are perhaps surmountable for others. These are also issues that, based on my understanding of how ED is structured, are going to be fairly non-trivial to properly implement.

Read More

Ember.js Analytics Integration

Update: As with many things Ember, this post has been outdated. Using the new router landing in 1.0, one way to do this is as follows:

App.ApplicationController = Ember.Controller.extend

  routeChanged: ( ->
    return unless window._gaq ->

Inevitably, if you are building any web application, you are going to need some form of analytics. Single page javascript applications are no exception. Unlike normal applications, however, integrating Google Analytics and Mixpanel is not as trivial as including some javascript in the page's header and forgetting about it.

Read More

Hacking the CoffeeScript Redux Compiler

CoffeeScript is great. I'm not going to spend any time backing that statement up in this article, but you are free to stop reading if it's not your cup of tea.

My main gripe with CoffeeScript, however, is a small impedance mismatch with the Ember.js object model. Creating classes using the new operator in coffeescript does not translate well to the Ember convention of creating object's via the create method.1

Read More

Anatomy of an Ember.js App Part I Redux: Routing and Outlets

Update: Ironically, this "redux" is once again out of date. Please consult the new Ember.js Router Guides

Four months ago, in February, I wrote a blog post detailing a strategy for handling routing and layout in Ember.js. This was at a time when there was no support for these features in Ember's core. Today, however, this is not the case. Ember now has the notion of a Router and an {{outlet}} handlebars helper. These two features supercede the libraries in the previous post (Ember Layout has been completely deprecated and Ember RouteManager has been temporarily frozen.)

Read More

The Twelve Hacker Archetypes

The other day I compiled this list of hacker archetypes. These represent the types of hackers I have come across over the years. To be clear, this is just for fun and all of these types of hackers are talented, but have distinctively different styles.

Read More

Make the Most of Your Routes

At the core of any web application is a mapping between urls and application logic; a mapping between what is in the browser's address bar and what should be displayed on the screen. Rails has routes.rb, Django has URLconf, Backbone.js has controllersBackbone.Router, and Sammy.js has Sammy.js.

Read More

Eight Ember.js Gotchas With Workarounds

Having used Ember.js for a few months now, I have compiled a list of gotchas that I have encountered. Many of these will change/be fixed as Ember matures, but until then I hope these will serve as pre-emptive time savers for other developers.

Read More

Productivity Versus Performance: Fighting The Good Fight

If you've been following the Javascript MVC landscape lately, you might have noticed a growing tension between Backbone.js and Ember.js. Being championed by Jeremy Ashkenas and Yehuda Katz respectively, both frameworks reside in decidely different camps. Ember.js favors deep abstraction and sensible defaults, whereas Backbone.js embraces the micro-framework mentality of providing a minimalist set of features whilst encouraging integration with a wide variety of other frameworks.

Read More

Anatomy of a Complex Ember.js App Part I: States and Routes

UPDATE: This is no longer the preferred way of handling routing and layout in Ember. Please read this updated post.

I am long on Ember.js. I previously wrote a brief comparison of some of the more popular javascript frameworks, and Ember came out on top. I am now in the process of incorporating it into GroupTalent in a big way.

Read More

25 Reasons to Switch From WordPress To Octopress

  1. Static content should be served statically
  2. Disqus rocks
  3. Ruby
  4. Google rewards fast loading times
  5. Markdown
  6. Flat files are awesome
  7. Sass
  8. Compass
  9. HAML
  10. GitHub Pages
  11. This guy did it
  12. Linode disk alerts are annoying
  13. No more caching plugins
  14. Hacker cred
  15. Security

Read More

The Top 10 Javascript MVC Frameworks Reviewed

UPDATE 1/14/2012: Added Batman.js and Angular.js due to popular demand and because they looked impressive.

Over the last several months I have been in a constant search for the perfect javascript MVC framework. Driven by a dire need for the right level of abstraction and features, I have tried out - some more cursorily than others - every framework I could get my hands on. Here lies a brief synopsis of each framework. Lastly, I share the framework which I ultimately decided on.

Read More

Javascript Frameworks Are Too Small

A while back I stumbled upon a great post by Jean-Baptiste Queru. It describes the incredible depth of the modern technology stack. Layers upon layers of complex science, hardware, and software, each layer creating a simpler abstraction around the previous. This ultimately enables our paltry human brains to create amazing things that would otherwise be impossible (or really difficult). This is, in my opinion, the lifeblood of modern software development.

Read More

The 25 Toughest Vocabulary Words Based On 1,000,000 Answers

My first Android creation was a game called Vocabulary Builder. The gameplay is simple: match words with definitions and vice versa. It has multiple skill levels, tracks your progress, and has a built-in dictionary.

Read More

Introducing Misunderstood Pigs

Miunderstood Pigs Gameplay

Today I am launching Misunderstood Pigs (iTunes Link). The gameplay is simple: place objects to save the pigs from an impending onslaught of projectiles.

I had been sitting on this game at 90% completion for at least 5 months, and decided to bite...

Read More

Two Game Changing CSS 3 Features

HTML and CSS has always been filled with frustration when it comes to being able to intuitively create layouts and designs. Web developers have long since sacrificed ease of implementation for accessibility and semantic purity. Basic layouts and simple aesthetics frequently require very non-trivial implementations. This is especially apparent to developers who have tasted the forbidden fruit of other platforms such as Flex, Android, et al.

Read More

Design Tools Are Broken

Spending lots of time both coding and designing has given me an acute awareness of how poor design tools are. Design itself has come a long way, but the design process has not. As a disclaimer, most of what is about to be said applies to user interface and graphic design, as opposed to illustration and the creative process.

Read More

Living Untethered

For roughly two and a half months I have been without a mobile phone of any kind. Two months might not sound like much, but this is coming from a software developer who is entrenched in technology and has even built multiple Android and iOS apps. Before this, I always carried a phone and was in a constant state of sync. The event which prompted this experiment was the loss of my Nexus One during a trip to Las Vegas--the exact details of which aren't important, but suffice it to say the trip was a success.

Read More

Retroactively Open-Sourced Project #1: Paperblocks

This is the first of several personal project's that I plan to open source in the coming months. As I've slowly begun the process of migrating all of my personal projects from a private gitosis installation to github to a new server, I've realized that most of my 43 private repositories will amount to nothing in my hands alone. I'm also a big fan of free software without restrictions. With that in mind, I am licensing these projects under the MIT license.

Read More

What It's Like to be Recruited

252 Recruiter Emails

Roughly three months ago (in the beginning of March), for a variety of reasons, I decided to put my resume out there on the interwebs. Here I chronicle my experience being a software developer on some of the most popular and widely used job channels.

Read More

Windows 8 Isn't That Bad

There seems to be a large amount of backlash directed towards Windows 8 due to the fact that it's new UI exists alongside the old Windows desktop. I must confess that I was slightly shocked myself to witness the context switch take place on the video, but I was shocked in a good way. Ironically, the reason why I think it's good to have a Windows desktop alongside a touch UI is based on the same reasoning as why I switched from Windows to OS X in the first place.

Read More

Five Reasons Why I Use Android and Two Reasons Why I Develop for iOS

Being both a mobile developer and an avid phone user, I have two somewhat different perspectives. As a user, over the last several years I have owned a multitude of mobile devices: G1, Nexus One, IPhone 3G, IPod Touch (4th Gen), IPad, and IPad 2. As a developer, I have a combined 13 apps in the android market and app store (all independently developed and released).

Read More

Blog Rebranding and Redesign

Several events have converged, resulting in a new blog design and a new brand. Slicehost is shutting down, forcing me to finally migrate over to linode (which kicks ass by the way, should have moved over a long time ago) and I have finally acted on the realization that my personal brand needs to be stronger. Rather than simply copying my blog over, I used this opportunity to rebrand from my last name ( to and to give it a custom design.

Read More

Dead Simple jQuery Pagination Plugin

While working on one of my side-projects, I had the need for client-side pagination. Nothing I could find was simple enough for my use case, so I decided to write my own. Check it out on GitHub here.

Read More

Mounder: Desktop Notifications for

** UPDATE 1/20/2012: ** This application is no longer supported and the download has been removed.

I spent the last few days teaching myself Flex 4 and AIR. Per my usual way of learning things I like to make (somewhat) functional applications. This...

Read More

Flex 4 CSS Namespaces: Annoying Migration Issues

I started playing around with the beta of the Flex 4 sdk the other day. The purported features of the new version are very exciting to me, especially the support for advanced CSS selectors as well as enhanced component skinning capabilities.

Read More

Eclipse Problem Markers from Flex Ant Builds

Two of the most popular ways to build flex projects are:

  1. Use Flex Builder
  2. Use the Flex SDK Ant tasks
In our case, we had been using 1 for development and 2 for production for some time. This gave us the best of both worlds: nice IDE features (e.g. problem markers and jumping to definitions) during development time and also the ability to fine-tune and optimize for production deployment.

Read More

9-Grid Scaling Support in Javascript/CSS

If you have ever spent any time developing and styling flex applications, you have probably come to find the 9-grid scaling feature indispensable. For those of you unfortunate enough to have never experienced this feature, it enables you to easily scale an image while preserving the scale of certain portions of the image based where it lies within a specified grid. Parts of the image which lie in the corners of the grid will not be scaled and parts which lie in the sides will only be scaled in one direction.

Read More

Two Nasty Flex Bugs to Watch Out For

I ran across several bugsfeatures today that I thought would be worthwhile to share. These are of the variety that take a while to figure out and are not very intuitive. Both were encountered using Flex 3.1

Read More

Google Chrome: Why I’m Not Excited

There is currently a massive amount of buzz around Google’s recently launched browser, Google Chrome. And why not? It’s a new WebKit based browser with a clean minimalist UI and a purportedly super fast V8 Javascript interpreter. To top it off, each webpage executes in its own process and it’s made by Google! It’s the next step in the battle to legitimize web based applications as viable replacements for their desktop counterparts.

Read More

Come Play in My Sandbox


My favorite part about flying is that I use it as an excuse to focus on small personal projects. Last night, on my red-eye flight back from west coast demo day 2008 (oh yeah, in case you didn't know, I am in YCombinator Summer '08, co-founder of...

Read More

Paperblocks: 3D Tetris

pblocks screenshot

A while back I created this game while teaching myself Flex 3 and Papervision 3D 2.0 and I figured it merited a blog post. It's of the 3D Tetris breed and took me several weeks to complete. You can see it in action here. Try it out and submit your...

Read More

Flex ScrollPolicy.AUTO Not Good Enough

One of my biggest gripes so far with the flex scrolling system is the automatic scrolling policy: a container’s viewing area is not changed by the introduction of scroll bars. This is especially troublesome in the vertical case and seems to be a pretty shitty way of doing things in general. For example, if the vertical size of the children increases beyond the height of their container, a vertical scroll bar will be created and displayed, however the children will not be resized. Consequently, if some of the children have variable widths (e.g. width=”100%”), they may be overlapped by the vertical scroll bar, causing a horizontal scroll bar to be displayed. When the scrolling policy is set to ScrollPolicy.ON, however, the children are resized to take the scroll bar into account at the price of the scroll bar always displaying, even when it is not needed. Yuck.

Read More