Monday, December 12, 2011


node-airplay is a client library for Apple's AirPlay remote playback protocol. It implements a simple AirPlay device browser using mdns and command interface.


CodeKit automatically compiles Less, Sass, Stylus & CoffeeScript files. It effortlessly combines, minifies and error-checks Javascript. It optimizes images, auto-reloads your browser and lets you use the same files across many projects.

Monday, December 5, 2011

Ugorji Nwoke: Dev Tool for GO AppEngine

Alternative development runtime/SDK for Go App Engine that relies less on the Python SDK.

Responsive IMGs

Part 1, Part 2, and Part 3 on images delivered using the HTML IMG tag that come from different sources depending the screen size. See also this post on media queries.

Saturday, December 3, 2011


UILayer provides a JavaScript API on top of WebKit for working with the concept of layers. Instead of manipulating DOM elements using a myriad of mixed concepts, you go though a single, well defined API.

Sunday, November 27, 2011


Adjust photos in your browser in realtime with glfx.js, an image effects library powered by WebGL. It uses your graphics card for image effects that would be impossible to apply in real-time with JavaScript alone.

Saturday, November 26, 2011

ProdEagle - Welcome

ProdEagle allows you to monitor your (App Engine) web applications in real-time using beautiful graphs and alerts without harming the performance of your application!

Sunday, November 13, 2011

Workshop / Chrome Experiments

  • dat.GUI: A lightweight graphical user interface for changing variables in JavaScript. Rather than modify variables manually in your code, use dat.GUI to modify them during execution.
  • three.js: A lightweight 3D engine. Three.js makes it easy to render graphics with canvas, svg, and WebGL.
  • stats.js: A JavaScript performance widget. Stats.js adds a simple info box to your page displaying frames per second (FPS) or, with a mouse click, the milliseconds required to render the frame.

Saturday, October 29, 2011

Saturday, September 24, 2011

Bootstrap, from Twitter

Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites. It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.

Tuesday, September 13, 2011


Tame (or "TameJs") is an extension to JavaScript, written in JavaScript, that makes event programming easier to write, read, and edit. Tame is very easy to use in Node and other V8 projects

Saturday, September 10, 2011


Icons for mobile apps


The Noun Project collects, organizes and adds to the highly recognizable symbols that form the world's visual language, so we may share them in a fun and meaningful way.

Friday, August 12, 2011

Performance Data from our Fieldrunners WebGL Demo

Using custom events in Google Analytics to gather client-side performance data.

Wednesday, July 27, 2011

nowjs for Node

Directly call remote functions in Javascript: NowJS creates a magic namespace 'now', accessible by server and client. Functions and variables added to now are automatically synced, in real-time. Call client functions from the server and server functions from client.

Monday, July 18, 2011

SceneJS - WebGL Scene Graph Library

SceneJS is an open source 3D engine for JavaScript which provides a JSON-based API for defining and manipulating 3D scenes on WebGL.

Thursday, July 14, 2011

Cocos2D JavaScript

Cocos2d-javascript is a 2D game/graphics engine based on cocos2d-iphone but designed to run in the web browser. It uses the latest features available in HTML 5 allowing real-time rendering of 2D graphics.

Monday, July 11, 2011


Server-side Google Closure with Node.js. A fork of node-goog (which seems dormant).

Sunday, June 26, 2011

Google App Engine Mini Profiler

gae_mini_profiler is a quick drop-in WSGI app that provides ubiquitous profiling of your existing GAE projects. It exposes both RPC statistics and standard profiling output for users of your choosing on your production site. Only requests coming from users of your choosing will be profiled, and others will not suffer any performance degradation.

Friday, June 24, 2011


SocketStream is a new full stack web framework built around the Single-page Application paradigm. It embraces websockets, in-memory datastores (Redis), and client-side rendering to provide an ultra-responsive experience.

Monday, June 13, 2011

Perceptual Image Difference Utility

PerceptualDiff is an image comparison utility that makes use of a computational model of the human visual system to compare two images.

Monday, June 6, 2011


Sitebricks is a simple set of libraries for web applications. Sitebricks focuses on early error detection, low-footprint code, and fast development. Powered by Guice, it also balances idiomatic Java with an emphasis on concise code.

Sunday, June 5, 2011

Apache Lucy

Apache Lucy is full-text search engine library written in C and targeted at dynamic languages. It is a 'loose C' port of Apache Lucene.

Thursday, May 26, 2011


Small command-line program to download videos from and a few more sites.

jiminoc/goose - GitHub

HTML content/article extractor

Sunday, May 22, 2011


Native scrolling for mobile web apps... or at least the closest thing to it! Scrollability is a single script, it's small, and it has no external dependencies. Drop it into your page, add a few CSS classes to scrollable elements, and scroll away.

The Dynamics of Scrolling | MacResearch

"This got me wondering how difficult it would be to reproduce Apple’s momentum scrolling on your own in JavaScript. Is the reason no web developers mimic native scrolling that it is too difficult, or is it just laziness or the expectation that it is very difficult that stops them? Or is JavaScript just not up to the task? To find out, I decided to try. About 3 hours and 100 lines of JavaScript later, I have my answer."

Saturday, May 14, 2011

Google App Engine Blog: Introducing ProtoRPC for writing App Engine Web Services in Python

ProtoRPC makes it easy to write consistent, reliable web interfaces that can be used, for example, to do the following:

  • Create AJAX URL end-points for use by dynamic web pages and forms.
  • Provide simple and understandable server-to-server communications.
  • Become a back-end for command-line tools or other non-web based clients.


mtr combines the functionality of the 'traceroute' and 'ping' programs in a single network diagnostic tool.

As mtr starts, it investigates the network connection between the host mtr runs on and a user-specified destination host. After it determines the address of each network hop between the machines, it sends a sequence ICMP ECHO requests to each one to determine the quality of the link to each machine. As it does this, it prints running statistics about each machine.

Monday, April 11, 2011

Crafty - JavaScript Game Engine

A lightweight, modular JavaScript game engine to easily produce high quality games. Includes a large variety of components such as animation, event management, redraw regions, collision detection, sprites and more.

Sunday, April 3, 2011

MaxSquare: a fast and simple algorithm for maximizing photo thumbnail sizes

MaxSquare is an algorithm which calculates the optimal grid size for a collection of n images such that each image is allocated the largest possible square cell.

Wednesday, March 30, 2011

Coded Exposure Photography (Flutter Shutter Deblur, SIGGRAPH 2006)

In a conventional single-exposure photograph, moving objects or moving cameras cause motion blur. The exposure time defines a temporal box filter that smears the moving object across the image by convolution. This box filter destroys important high-frequency spatial details so that deblurring via deconvolution becomes an ill-posed problem.

Rather than leaving the shutter open for the entire exposure duration, we "flutter'' the camera's shutter open and closed during the chosen exposure time with a binary pseudo-random sequence. The flutter changes the box filter to a broad-band filter that preserves high-frequency spatial details in the blurred image and the corresponding deconvolution becomes a well-posed problem. We demonstrate that manually-specified point spread functions are sufficient for several challenging cases of motion-blur removal including extremely large motions, textured backgrounds and partial occluders.

Monday, March 28, 2011

Remote git diffs with bbdiff

  1. See previous post about key exchange.
  2. Add the following to .gitconfig:
        tool = "bbdiff"
        prompt = false
    [difftool "bbdiff"]
        cmd = /home/mihaip/bin/bbdiff "$REMOTE" "$LOCAL"
  3. Create bbdiff on the remote machine with the following contents:
    source_machine=${SSH_CLIENT%% *}
    for arg in "$@"
      readlink -fn $arg
      if [[ $arg == /tmp/* ]]
        scp $arg mihaip@$source_machine:$arg
      echo -n " "
    done | xargs ssh mihaip@$source_machine /usr/local/bin/bbdiff --wait --resume

Saturday, March 26, 2011

Google Application Utilities for Python

Same set of utilities used to build and run internal Python apps at Google:

  • Simple application startup integrated with python-gflags.
  • Subcommands for command-line applications.
  • Option to drop into pdb on uncaught exceptions.
  • Helper functions for dealing with files.
  • High-level profiling tools.
  • Timezone-aware wrappers for datetime.datetime classes.
  • Improved TestCase with many of the same methods as unittest2, plus helpful flags for test startup.
  • google_test setuptools command for running tests.
  • Helper module for creating application stubs.

Friday, March 25, 2011


xStats provides simple charts to help monitor your code performance.

  • FPS: Frames rendered per second. The higher the number the better.
  • MS: Milliseconds needed to render a frame. The lower the number the better.
  • MEM: Megabytes of memory used. Make sure it doesn't keep incrementing.

Editing files remotely

  1. See previous post about key exchange and get_source_machine
  2. Install FUSE and SSHFS.
  3. Ideally, mount the remote directories you're interested to the same path on your Mac. Most recently I've used:
    sshfs mihaip@snowberry.local:/D \
        /D \
  4. Add the following to your .bashrc:
    bbedit() {
      for arg in "$@"
        readlink -fn $arg
        echo -n " "
      done | xargs ssh mihaip@$source_machine /usr/local/bin/bbedit

Growl notifications from other machines

  1. Install growlnotify
  2. Set up public keys so that the other machine can SSH into the Mac without prompting
  3. Add the following to .bashrc:
    get_source_machine() {
      echo ${SSH_CLIENT%% *}
    function growlnotify() {
      if [ "$AT_HOME" = "true" ]; then return; fi
      ssh mihaip@$source_machine /usr/local/bin/growlnotify \
          -n "command-notifier" \
          -m \"[$PWD]\" \"$1\" 2> /dev/null
  4. In the Growl PrefPane, the notifications can be styled for the command-notifier "Application." (I like Music Video)

Wednesday, March 23, 2011

Using the Google V8 Javascript Engine in Java

V8 Java Bridge that allows any JavaScript code to run and call back to any provided Java methods.

Monday, March 14, 2011

JVM Crash in Development App Engine server after Mac OS X Java SE 6 Update 4

Restoring the previous JDK (from Time Machine) to /System/Library/Java/JavaVirtualMachines/ and pointing Eclipse at it worked for me.

Sunday, March 13, 2011


Backbone supplies structure to JavaScript-heavy applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface.


Underscore is a utility-belt library for JavaScript that provides a lot of the functional programming support that you would expect in Prototype.js (or Ruby), but without extending any of the built-in JavaScript objects. It's the tie to go along with jQuery's tux.

Underscore provides 60-odd functions that support both the usual functional suspects: map, select, invoke — as well as more specialized helpers: function binding, javascript templating, deep equality testing, and so on. It delegates to built-in functions, if present, so modern browsers will use the native implementations of forEach, map, reduce, filter, every, some and indexOf.


CoffeeScript is a little language that compiles into JavaScript. Underneath all of those embarrassing braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.

The golden rule of CoffeeScript is: 'It's just JavaScript'. The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly (and vice-versa). The compiled output is readable and pretty-printed, passes through JavaScript Lint without warnings, will work in every JavaScript implementation, and tends to run as fast or faster than the equivalent handwritten JavaScript.

Friday, March 11, 2011


D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. As a trivial example, you can use D3 to generate a basic HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction.

Tuesday, March 8, 2011

Monday, March 7, 2011

Chef - Opscode

Chef is an open source systems integration framework built to bring the benefits of configuration management to your entire infrastructure.

Thursday, March 3, 2011


The boilerpipe library provides algorithms to detect and remove the surplus 'clutter' (boilerplate, templates) around the main textual content of a web page.

Instance/web API running at

Wednesday, March 2, 2011

visionmedia/express - GitHub

Fast (and small) server-side JavaScript web development framework built on node and Connect.

Sunday, February 27, 2011

Varnish: Notes from the Architect

"I have spent many years working on the FreeBSD kernel, and only rarely did I venture into userland programming, but when I had occation to do so, I invariably found that people programmed like it was still 1975."

Monday, February 14, 2011


"Watir, pronounced water, is an open-source (BSD) family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain. It is simple and flexible."

Used by Facebook.

Graphite - Enterprise Scalable Realtime Graphing

Graphite is a highly scalable real-time graphing system. As a user, you write an application that collects numeric time-series data that you are interested in graphing, and send it to Graphite's processing backend, carbon, which stores the data in Graphite's specialized database. The data can then be visualized through Graphite's web interfaces.

Used by Etsy.

Etsy also has StatsD (blog post) which is a daemon that increments/times can be sent to, which aggregates them and sends them to Graphite.

Friday, February 4, 2011

ack 1.94 -- better than grep, a source code search tool for programmers

"ack is a tool like grep, designed for programmers with large trees of heterogeneous source code."

Unicode code converter

Convert input text to various representations and escaping levels.

Also related: Text Escaping and Unescaping in JavaScript.

Sunday, January 16, 2011


Syntactic sugar for running async functions in sequence.

Also Do.