June 2012
1 post
4 tags
In the Battle of the Ecosystems, No One Wins
While I was excited today at some of the announcements Google made at I/O, I was also troubled: there was an awful lot of Google Play, which is fine, but the Nexus Q announcement just left a bad taste in my mouth. It’s a product that has cool use, but the only demonstrated use of that product is in Google’s closed Play ecosystem, a tactic that smells entirely too much like Apple. The...
Jun 28th
March 2012
2 posts
4 tags
The Why of Zero Tolerance
In the past couple of days the developer sphere has been ablaze with fury over sexism. Two days ago, startup Sqoot made a carelessly sexist statement in an event description. As a result, a number of high-profile sponsors including Heroku immediately pulled out of the event and a minitornado of fury was directed at the fledgling company. Today, ire is building over the actions of the founders of...
Mar 22nd
2 notes
3 tags
LocalStorage? IndexedDB? What we need is Redis for...
After Mozilla’s hacks blog posted an article about how localStorage is too slow and someone else said localStorage is just fine it reminded me of how frustrated I’ve been at the various proposed “solutions” for an in-browser persistence engine. It is completely ridiculous to think it reasonable to have a schema-driven store in the browser. Schema-driven stores work on the...
Mar 14th
1 note
February 2012
2 posts
4 tags
So Fantastic It's Double Fine
Today is the day that I stand in awe of the internet and the wonderful things it can do. My particular amazement is directed at the fact that yesterday Tim Schafer (a famous adventure game designer and creator of amazing things like Psychonauts and Day of the Tentacle) created a Kickstarter project to fund a new adventure game with an ambitious funding level of $400,000. Eight hours later, he met...
Feb 9th
4 tags
The Innovator and the Inhibitor
Two little girls, Holly and Ivy, start lemonade stands in their neighborhoods one summer. Each has about the same foot traffic and each begins by selling lemonade at 25 cents. They do this for several days and, to their surprise they’re making more than $20 a day with their lemonade enterprise. Wow! Other kids in the neighborhood hear about how much money Holly and Ivy have been making and...
Feb 1st
January 2012
7 posts
2 tags
If Government Embraced Technology...
As an entrepreneurial software developer, I don’t usually look to the government to solve problems for me. Instead I usually try to think of ways to solve the problem (or start a business to solve the problem) myself. Sometimes, though, I stop to think about what it would be like if the government truly embraced and understood technology the way I do. Here are three big changes that might...
Jan 30th
3 tags
Forward: Let's Start a Political Party
I’ve never really been very interested in politics. At least, I wasn’t until SOPA/PIPA came along. The issue demonstrated for me two very important facts: Technologists are severely under-represented in our current political system. Technologists are capable of causing political change. The first I’d known for ages, the second came as a surprise. I honestly never expected...
Jan 30th
2 tags
This is How I Want Social to Work
I think that solving the dual problems of privacy and noise in social networking applications are very difficult. Personally I don’t think any of the major players (Facebook, Twitter, Google+) have tackled these problems entirely successfully. I did a little thinking and if I built a social network today, here’s how I would tackle the graph. Let’s say that I just signed up for...
Jan 11th
25 notes
5 tags
Free-to-Play Could Crash the Gaming Industry
This post is part of my Where Games Are Going series in which I talk about the future of one of my favorite industries: video gaming. At the same time that digital distribution is poised to level the playing field more than ever before for independent developers, another trend has the potential to cause a crash the likes of which hasn’t been seen since 1983. And it’s all...
Jan 9th
10 notes
Calling Infringement Theft is Dangerous
Note: I actually submitted this as an op-ed piece to the New York Times which is why it’s far less technically voiced than my normal work. Unfortunately looks like I’m not getting picked up there, so I’ll just have to stand on my own soap box. One day, Terry walked into a popular record store, slid a CD into his back pocket, and left the store without paying. The same day, Ian...
Jan 6th
Should we eliminate gendered pronouns?
Today I was typing up another blog post and had to use him/her as a gender neutral pronoun reference. This is something that’s always bugged me as it’s awkward to write and awkward to read. “They” is not a suitable alternative because it’s plural and therefore grammatically incorrect in a singular context. That got me thinking: why do we have gendered pronouns at...
Jan 5th
4 tags
Where Games Are Going: Consoles as App Platforms
I’ve been an avid gamer since, well, ever. Like many developers, an interest in video games (and creating them) is what first lured me to the world of programming. While I’m not a part of the game industry I follow it closely and have greatly enjoyed discovering such online video series as All Your History Are Belong To Us and Extra Credits this year. “Where Games Are...
Jan 3rd
6 notes
December 2011
2 posts
3 tags
Why I Rarely Read Books
I don’t really read books these days. I read plenty of blogs and web development related things via Google Reader, but I almost never just sit down and read something in my free time. Sometimes I’m filled with guilt about it: surely I should be reading more, enriching my life and whatnot. But then I realized that it’s not because I hate reading that I don’t do it often,...
Dec 30th
10 notes
Announcing OmniAuth BrowserID
I’ve been following the progress of Mozilla’s BrowserID for some time now, and I’m a big fan. Having dove much deeper than most into the quagmire of fragmented authentication I’ve reached the same conclusion that Mozilla has: ultimately, authentication is a function that should belong to the user agent. What is BrowserID? BrowserID is a Single Sign-on service for the...
Dec 21st
November 2011
2 posts
Implementing DRY Magic Methods in Ruby
As a new developer to Ruby you might wonder how certain methods seem to be magically available without being strictly defined. Rails’s dynamic finders (e.g. find_by_name) are one example of this kind of magic. It’s very simple to implement magic such as this in Ruby, but it’s also easy to implement things in a way that doesn’t entirely mesh with standard Ruby object...
Nov 16th
OmniAuth 1.0: Auth for All
Today I’m happy to announce that OmniAuth version 1.0.0 has been released into the wild. The result of more than a month of heavy development, the newest version of OmniAuth brings along with it a slate of new features, a whole new structure, and the tools to let OmniAuth be your only authentication library. The one thing that hasn’t changed is OmniAuth’s mission: to assume...
Nov 2nd
August 2011
5 posts
Hire a Guard for Your Project
Of all of the new tools that I’ve picked up using for development in the past six months, there is one that has come to stand above the others for its nearly universal utility. That tool is Guard. Guard is a RubyGem but don’t let that fool you into thinking it’s only useful for Ruby projects. Guard is essentially an autotest for everything. It provides a general purpose set of...
Aug 25th
Sketch.js: HTML5 Canvas Sketchpads for Whyday
Last Friday I decided to celebrate _whyday by taking a departure from my normal open source path and writing some Javascript (well, technically Coffeescript). So today we’re announcing Sketch.js, a simple jQuery library to enable HTML5 Canvas “sketchpads” for any web application. Quick and Easy Doodling Sketch.js allows you to initialize a canvas element as a sketchpad as well...
Aug 22nd
What's Wrong With Patents? It's Obvious.
Patents are in the news in the tech circle more and more these days. As trolls lurk under bridges and the portfolio cold war gets hotter and hotter, everyone is talking about the fact that something is wrong. What exactly that something is, however, is up for debate. Should the patent system be abolished? What about just software patents? Is the term too long? I don’t know, maybe. But one of...
Aug 18th
Ruby Thankful
A lot has been made in the talkosphere recently about the brewing “multi-Ruby version manager” war, namely RVM vs newcomer rbenv. I’m not here to discuss the relative merits of either software solution, mostly because I take things pretty simple and straightforward in command-line world and I’ve never run into problems with RVM. What I do think this little fracas displays,...
Aug 15th
10 Tips For Open Source Citizens
This post is part of a series called Open Source Citizenry in which we discuss ways to eliminate the barriers that developers and companies face to fully participating in the open source community. You might think there’s not really anything to being a good user of open source. Install the library, use it how you need it, and move on. And honestly, for the most part that’s a fine...
Aug 11th
July 2011
1 post
Setting Up a Ruby Development Machine From Scratch...
Every so often I like to completely wipe out my computer and start it over from scratch. This isn’t because I particularly enjoy the pain of setting up a system from scratch, but it does come with some advantages: You get rid of the stuff you didn’t need. You have a chance to try things that came out since you last reinstalled. You have a clean install that isn’t choking from...
Jul 26th
June 2011
2 posts
What if Rails Isn't For Beginners Anymore?
There’s been a lot of controversy surrounding the changes to Rails 3.1. It started with an epic GitHub commit thread and the discussion exploded again in the past few days after What the Hell is Hapenning to Rails and Yehuda’s response thereto. I’m going to address the issue from a perspective that honestly hadn’t even occurred to me until I just said it while in a...
Jun 16th
Conversations: The Controller Setter Pattern
One of the first things that anyone has to do in an application is assign instance variables in controllers for use in views, etc. This pattern, while dead simple, has a number of possible implementations that each have their aesthetic benefits and drawbacks. At RailsConf I had the opportunity to hash this out with none other than DHH and David Chelimsky, so I thought it might be a good...
Jun 7th
May 2011
2 posts
RailsConf To Go: OmniAuth from the Ground Up
I had the opportunity to speak at RailsConf 2011 about OmniAuth, outlining some of the reasoning behind it as well as some current and upcoming features of Intridea’s own “authenticate with anything” middleware. While the session wasn’t video recorded, a little trick I’ve picked up is to run a screencasting program in the background while I present to generate...
May 31st
I Heart SASS, But HAML, I'm Just Not That In To...
Emacs vs Vim. iPhone vs Android. Of all of the nerd arguments, none hits closer to home for Ruby developers than HAML vs ERB. Proponents of HAML look at writing HTML as a dirty practice to be avoided at all costs and look down upon “mere” ERB authors. Meanwhile there’s SASS, a language syntactically close kin to HAML and, until last week, one that even rode along inside the HAML...
May 4th
April 2011
3 posts
You Should Be An Open Source Developer
This post is part of a series called Open Source Citizenry in which I discuss ways to eliminate the barriers that developers and companies face to participating in the open source community. Last week at Red Dirt Ruby Conf, a tweet came through my stream that seemed to fit quite well with what I was already thinking about for my Open Source Citizenry post this week: <!—...
Apr 28th
Why Open Source Company Culture is Important
This post is part of a series called Open Source Citizenry discussing ways to eliminate barriers developers and companies face to participating in the open source community. Earlier this month I had the opportunity to speak at KCRuby about a topic of my choosing. Rather than use the opportunity to put together a trial run of my upcoming Red Dirt Ruby talk, I decided at the last minute to...
Apr 22nd
Easy IP Geotargeting with Geokit and MongoMapper
There are several cases in which it might make sense to tailor your app’s content based on a user’s physical location. But asking them directly is a bit of a pain. Luckily, it’s extremely simple to find a user’s location knowing only something you will always know about a visitor: their IP address. Today I’ll walk you through how to use IPs to geolocate your visitors...
Apr 6th
March 2011
2 posts
RailsWizard Reimagined
TL;DR: I’ve rewritten RailsWizard from the ground up to be as fast and useful to developers as possible. You can now also run it through the command line with the RailsWizard Gem. Last year for the RailsRumble I built a tool for Rails developers called RailsWizard. RailsWizard allowed people to build a Rails 3 application template step by step, removing a lot of the tedious and...
Mar 21st
Always Be Releasing
It’s hard to be “on” all the time as a developer. Despite its engineering aspects, I find software development to be a fundamentally creative act, and creativity requires inspiration. Looking back on the times when I’ve felt in a slump, when I just couldn’t get the energy to make the next big push I needed for whatever project I was working on, I came to a simple...
Mar 16th
February 2011
1 post
Fun With jQuery Deferred
If you’ve upgraded to the recently released jQuery 1.5 you may have heard about the fancy new AJAX facilities that allow you to define things like this: var jax = $.ajax({ url: '/some/url' }) jax.success(function() { alert("It worked!");") }); Well, that new power is known as Deferreds and it can be useful in more places than straight-up AJAX callbacks. If you want an in-depth...
Feb 8th
December 2010
2 posts
Easy Rails Admin Login with Google Apps and...
When you’re building a web application, there’s always the question of how to handle the site-wide administration. You probably have a small list of people at your company that should be able to access it. If you’re like Intridea, you also use Google Apps to handle e-mail etc. Using OmniAuth it is trivially simple to set up a simple “admin login system” for your Rails...
Dec 31st
Is Copyleft Really Right for Open Source?
There’s an issue that’s been bothering me for quite a while. There’s a problem in the software development world, a practice that breaks down the free and open exchange of information. This practice is widespread throughout the software development world and can lead to a lock-in mindset that is damaging for the advancement of the community as a whole. I’m talking, of...
Dec 7th
November 2010
1 post
RubyLearning Guest Post: How do I build DSLs with... →
Nov 30th
October 2010
1 post
OmniAuth: Flexible, Unassuming Multi-Provider...
The web application landscape has changed drastically in the past year or two. Where once every site was a silo unto itself and could reasonably expect users to create a unique login and password for each site, it is now a different story. I sigh every time I have to fill out yet another registration form, wishing instead for a simple “Connect with Facebook”, “Sign in with...
Oct 3rd
September 2010
1 post
A Web Developer Goes Native (With Android)
In the past week I’ve jumped head-first into Android development for a new Intridea project. This is my first time doing any real Android development as well as my first jump back to Java since I graduated from college. I thought it might be interesting to catalog some of my experiences developing for the platform, so here they are: Things I Loved Intents: Android is built on an...
Sep 13th
June 2010
3 posts
On Android and Custom UIs
Google’s Android has seen an incredible rise in popularity since its first handset was launched less than two years ago. Google has worked hard to earn that popularity, regularly releasing fantastic new improvements to the platform in the form of Donut, Eclaire, and now Froyo. Unfortunately, many users of the Android ecosystem won’t see these improvements for years, if at all. The reason?...
Jun 22nd
MultiJSON: The Swappable JSON Handler
JSON has become ubiquitous. From Facebook and Twitter both declaring it to be the preferred (and in some cases only) option for API access to the new OAuth 2.0 draft spec declaring that JSON is the only acceptable response format for OAuth token responses, JSON is here to stay. What isn’t ubiquitous, however, are people’s preferred implementations. As library authors it is our duty to try to...
Jun 14th
AuthButtons: Free and Open Source Web App Icons
More and more web applications are providing external logins through sites such as Twitter, Facebook, and more. It can be a bit of a pain to assemble suitable buttons for all of these services to display as the “NASCAR box” of logos for users to click when signing up or on to a site. To make this a little bit easier, Intridea is releasing a collection of free and open-source logo buttons for...
Jun 1st
April 2010
6 posts
REST isn't what you think it is (and that's OK)
Everyone says they have a REST (or RESTful or REST-like) API. Twitter does, Facebook does, as does Twilio and Gowalla and even Google. However, by the actual, original definition, none of them are truly RESTful. But that’s OK, because your API shouldn’t be either. The Common Definition The misconception lies in the fact that, as tends to happen, the popular definition of a technical term has come...
Apr 29th
The Future's Pretty Cool (or Why I Love Ruby)
There have been tons of comparisons between Ruby and other languages (mostly Python) ranging from the technical to the epically titled. I’ve always felt that both languages are nice, but feel much more at home with the expressive, readable Ruby syntax. And don’t get me wrong, I love Ruby for all kinds of language reasons. Re-openable classes, blocks and the general meta-programming DNA of Ruby...
Apr 28th
Facebook is the Private Beta of the Semantic Web
Facebook recently announced their intentions to become the center of the universe for online identity and social connections. While the new functionality of the Facebook Open Graph is exciting and represents a real glimpse into the interconnected semantic web, it has also sparked numerous concerns about placing so much power into the hands of a single company. As it turns out, not everyone on...
Apr 23rd
Announcing the OAuth2 Gem
While I’d been tracking with great interest the progress of OAuth 2.0, Facebook lit off the powderkeg yesterday by announcing that their entire API was moving to the protocol (as well as to RESTful JSON). As a developer who had been constantly confounded by the relentlessly hostile environment that Facebook seemed to present to developers, yesterday was a sudden and welcome about-face. The...
Apr 22nd
Ruby Quick Tip: Instant Utility Modules
Sometimes you want to write a batch of utility methods that can be accessed from a module for example Utility.parse_something(string) or any number of useful little tools for your application. Here’s a very clean-looking way to achieve it: module Utilities extend self def parse_something(string) # do stuff here end def other_utility_method(number, string) # do some more stuff ...
Apr 19th
Toggle CSS3 Bookmarklet
If you’ve begun to use CSS3 experimental features in your sites lately such as box-shadow, border-radius or text-shadow, you know how much pain it can take away from the design process. Unfortunately, lots of people are still using Internet Explorer and can’t see all these pretty additions you’ve added. I thought it would be useful to have a simple way to run a sanity check on my design to make...
Apr 12th
March 2010
2 posts
Ruby Quick Tip: Regular Expressions in Case...
Did you know that you can use regular expressions in case statements in Ruby to check for a match? For instance, if I’m implementing some method_missing functionality and I want to check for bang or question methods, I might be tempted to do something like this: def method_missing(name, *args) name = name.to_s if name.match(/!$/) puts "Bang Method!" elsif name.match(/\?$/) puts...
Mar 29th
Hashie Gains a Chainable Hash
Hashie, Intridea’s Hash Toolkit, is today with version 0.2.0 gaining a new member: the Clash. A Clash is a “Chainable Lazy Hash” that allows you to construct a hash using method syntax. It is meant to be used in a similar way to the way that Rails 2.x’s named_scope or Arel’s query building work. Let’s start with an example: require 'hashie/clash' c = Hashie::Clash.new c.where(:abc =>...
Mar 5th
February 2010
1 post
Redfinger: A Ruby WebFinger Gem
Just yesterday, Google turned on webfinger for all GMail accounts. Today, I’m releasing a RubyGem to help you use the new protocol! What’s a WebFinger? WebFinger is a new protocol for extracting public information about a person via their e-mail address. It is meant to complement systems such as OpenID as well as give a simple way to get basic information about a user without having to ask them...
Feb 12th
January 2010
1 post
Simple Mustache JSON Serialization
If you’ve taken a look at Mustache, the “stupid in a good way” templating engine, you might know that there are also Javascript Mustache renderers such as Mustache.js. Today I’ve released a small library called mustache_json that allows you to compile your Mustache view objects into JSON, allowing them to be interpreted by Javascript Mustache rendering engines. What this means for your project is...
Jan 21st