24 Pull Requests: An Open Source Participation Advent #

24 Pull Requests is a yearly initiative to encourage developers around the world to send a pull request every day in December up to Christmas. 24 Pull Requests is the site to help promote the project, highlighting why, how and where to send your pull requests.

TextMate 2 now on GitHub #

As announced on the Macromates blog, TextMate 2 source is now on GitHub.

Allan Odgaard:

I’ve always wanted to allow end-users to tinker with their environment, my ability to do this is what got me excited about programming in the first place, and it is why I created the bundles concept, but there are limits to how much a bundle can do, and with the still growing user base, I think the best move forward is to open source the program.

Starred.

Hyperspider – Declarative HATEOAS API crawler for Node.js #

Interesting project from Jed Schmidt to roll up resources in hypertext APIs:

Give it a list of url patterns, and it will recursively crawl your hypertext HTTP API, streaming back every matching endpoint.

var hyperspider = require("hyperspider")

var options = {
  host: "mytwitterclone.biz",
  path: [
    "/users/jed",
    "/users/jed/following",
    "/users/*"
  ]
})

hyperspider(options, function(err, data) {
  // data is an array with the result entities of 6 endpoints:
  // 1. /users/jedschmidt
  // 2. /users/jedschmidt/following
  // 3. /users/janl
  // 4. /users/cramforce
  // 5. /users/hblank
  // 6. /users/theophani
})

Source on GitHub.

Episode 0.8.4 – News roundup

Andrew and Wynn run down the news of the last month. Items mentioned in the show: Gitspective – Facebook style timeline for your GitHub feed Hammer.js – Easily add multi-touch to your websites TweetStream – Easily access the Twitter Streaming API t – Powerful command line interface for Twitter Sextant – view your Rails routes […]

Nodefront – Node.js-powered rapid front-end development utility #

Nodefront from Karthik Viswanathan aims to make a front-end developer’s life easier. Built in Node.js, Nodefront bundles a local web server for serving up HTML, CSS, and JavaScript assets and supports live reloading via web sockets. Additionally it ships with a command line interface:

  • nodefront compile – Compiles Jade and Stylus files to HTML and CSS. Can compile upon modification, serve files on localhost, and even automatically refresh the browser/styles when files are changed.

  • nodefront fetch – Automatically fetches CSS/JS libraries for use in your project. Provides an interactive mode to add new libraries.

  • nodefront insert – Inserts CSS/JS libraries directly into your HTML or Jade files.

  • nodefront minify – Minifies CSS and JS files. Can also optimize JPG and PNG images.

Karthik has put together a twenty minute screencast for a full demonstration.

Check out the project web site or source on GitHub for more.

Rack::CoreData – Automatically generate REST APIs for Core Data models #

An interesting project from Mattt to scaffold RESTful web services based on CoreData models using Rack.

require 'bundler'
Bundler.require

# Rack::CoreData requires a Sequel connection to a database  
DB = Sequel.connect(ENV['DATABASE_URL'] || "postgres://localhost:5432/coredata")

run Rack::CoreData('./Example.xcdatamodeld')

View the Source for this project on GitHub.

Episode 0.8.3 – Cloud 9 IDE with Ruben Daniels and Matt Pardee

Wynn caught up with Ruben and Matt from Cloud 9 to talk about what’s new with their IDE in the cloud. Items mentioned in the show: Ruben Daniels is the CEO of Cloud9. Matt Pardee is a developer & evangelist for Cloud9. Tim Caswell was on a previous episode is an employee at Cloud9. Cloud9 […]

Nodist – Node version manager for Windows #

Nodist from Marcel Klehr aims to be an easy way to switch between Node.js versions on Windows. Inspired by TJ’s n and aiming to improve on nvmw’s global-only switching, Nodist ships with a nice command line interface:

Usage:

    nodist                         List all installed node versions.
    nodist list
    nodist ls

    nodist <version>               Use the specified node version globally (downloads the executable, if necessary).
    nodist latest                  Use the latest available node version globally (downloads the executable, if necessary).

    nodist add <version>           Download the specified node version.
    nodist + <version>

    nodist run <version> -- <file> Run <file> with the specified node version (downloads the executable, if necessary).
    nodist r <version> -- <file>

    nodist rm <version>            Uninstall the specified node version.
    nodist - <version>

    nodist --help                  Display this help

    nodist -v                      Display nodist version

Examples:

    nodist 0.8.1                   Use node v0.8.1 globally
    nodist v0.5.10                 Use node v0.5.10 globally
    nodist r 0.8.1 -- foo.js -s    Run `foo.js -s` with node v0.8.1, regardless of the global version
    nodist - 0.5.10                Uninstall node v0.5.10

See the README for installation and usage.

Episode 0.8.2 – Ruby Motion, MacRuby and more with Laurent Sansonetti

Wynn and Sam caught up with Laurent Sansonetti to talk about MacRuby, RubyMotion, and more. Items mentioned in the show: Bully is Sam’s Pusher client for Objective-C. Get some Cheddar, Sam’s TODO app (soon in the App Store). Laurent Sansonetti, creator of RubyMotion (and MacRuby) MacRuby is an implementation of Ruby 1.9 on top of […]

Descriptive statistics – extend Ruby Enumerable for common stats methods #

Descriptive Statistics is a small gem from Derrick Parkhurst that provides a few common statistics methods to Ruby’s Enumerable:

> require 'descriptive_statistics'
 => true 
> data = [2,6,9,3,5,1,8,3,6,9,2]
 => [2, 6, 9, 3, 5, 1, 8, 3, 6, 9, 2] 
> data.number
 => 11.0 
> data.sum
 => 54 
> data.mean
 => 4.909090909090909 
> data.median
 => 5.0 
> data.variance
 => 7.7190082644628095 
> data.standard_deviation
 => 2.778310325442932 
> data.percentile(70)
 => 6.0

Browse the source or fork on GitHub.

Update: Francois-Guillaume Ribreau has ported the project to JavaScript as a NPM package.

Update 2: Gleicon Moraes has created a Python port.

Ruby Mass – introspection for the heap #

Paul Engel, whose CSONV we covered previously, has created Ruby Mass, a gem that helps you introspect the Ruby heap. Ruby Mass indexes, counts, and locates object references.

$ Mass.index Foo #=> {}

$ f = Foo.new
$ b1 = Foo::Bar.new
$ b2 = Foo::Bar.new
$ t = Thing.new

$ f.object_id #=> 2154166500
$ b1.object_id #=> 2154037400
$ b2.object_id #=> 2154126780
$ t.object_id #=> 2154372180

$ Mass.index Foo #=> {"Foo"=>[2154166500], "Foo::Bar"=>[2154037400, 2154126780]}
$ Mass.index Foo::Bar #=> {"Foo::Bar"=>[2154037400, 2154126780]}
$ Mass.index Thing #=> {"Thing"=>[2154372180]}
$ Mass.index #=> {"String"=>[2151797000, 2151797080, 2151797120, 2151797140, ... a lot of more classes and object_ids}
$ Mass.index OneMoreThing #=> {}

As always, check the README for usage. The source is on GitHub.

Mina – deploy your app over a single SSH connection #

Tools like Capistrano and Vlad have been popular for deploying applications to remote servers. Mina is a new entrant in the field that uses a single SSH session per server, cutting down on deploy time. Mina uses Rake and deploy routines are set up in config/deploy.rb:

require 'mina/git'

set :domain, 'your.server.com'
set :user, 'flipstack'
set :repository, 'flipstack'

task :deploy do
  deploy do
    # Preparations here
    invoke :'git:clone'
    invoke :'bundle:install'
  end
end

task :restart do
  queue 'sudo service restart apache'
end

Check out the project web site or source on GitHub for complete usage instructions, including test deploys with Rspec and other popular frameworks.

/via

Virtus – give your Ruby objects DataMapper-like attributes #

I’ve written a few wrappers for various JSON APIs, and each time I’ve had to make a decision about how to represent API data in Ruby. Ruby hashes and arrays work well but bracket['notation'], can be hard on the eyes and fingers. My go-to library for these types of objects is often Hashie, the hash toolkit from Intridea. Its Mash, Dash, Clash, and Trash, objects provide some syntactic sugar on top of Ruby’s Hash.

Thanks to Mike’s linkblog, another project has caught my eye. Virtus from Piotr Solnica extracts DataMapper’s Property API, for the times when you need to implement attributes on your objects yet maintain a bit more encapsulation. I love the module approach for defining properties:

module Name
  include Virtus

  attribute :name, String
end

module Age
  include Virtus

  attribute :age, Integer
end

class User
  include Name, Age
end

user = User.new(:name => 'John', :age => '30')

Check the excellent README or source on GitHub for more.

Zipkin – distributed tracing for service-based applications #

As more and more applications are composed of several or more services, finding all the bottlenecks between the data and the user is a tough problem in itself. Twitter has added to their growing list of open source projects with Zipkin, which provides a system for distributed tracing.

Zipkin architecture

Instrumented libraries in the stack send information to a Zipkin collector via Thrift. Data can then be queried and presented in Zipkin’s web interface.

screenshot

Check the README or source on GitHub for more.

Backstop – Simple HTTP service for submitting metrics to Graphite #

We’ve mentioned a couple of Graphite-related projects previously. Jason Dixon and Michael Gorsuch from Heroku have released Backstop, a simple HTTP-to-Graphite proxy to make it simple to send metrics. Using the /publish method, metrics and annotations can be posted that match any approved prefixes found in the PREFIXES environment variable, custom in the following example:

# Send a metric
RestClient.post("https://backstop.example.com/publish/custom",
   [{:metric => key, :value => value, :measure_time => Time.now.to_i}].to_json)

# Send an annotation
RestClient.post("https://backstop.example.com/publish/note",
   [{:metric => "foobar.release", :value => "v214", :measure_time => Time.now.to_i}].to_json)

Check the README for local usage and instructions for deploying to Heroku.

#81: Celluloid, concurrency, and more with Tony Arcieri

Wynn talked with Tony Arcieri, creator of Celluloid, about concurrency in Ruby and his thoughts on Erlang, Clojure, and design patterns. Items mentioned in the show Tony Arcieri, creator of Celluloid. Celluloid is painless multithreaded programming for Ruby. Celluloid:IO provides evented I/O for Celluloid actors. DCell lets you build distributed Celluloid apps over 0MQ. Adam […]

#80: Lua, Luvit, want some more of it, with Tim Caswell

Wynn caught up with Tim Caswell to talk about Luvit, his new project that provides Lua bindings for libuv. Items mentioned in the show: Adam is recently hitched to the lovely Heather. Tim Caswell is a long time friend of the show, creator of the How to Node blog. Lua is a powerful, fast, lightweight, […]

Sextant – view your Rails routes without waiting on Rake #

When given the option, I’ll always opt for text mode when completing a task. In Rails that usually means Rake. There’s a point in most Rails apps, however, when the time to boot Rails just to rake -T is painful. So when Richard Schneeman got tired of waiting on Rails to run rake routes, he created Sextant, a gem that lists your routes in development mode right in your browser.

screencap

Since your web server is presumably already booted, there’s no startup tax to see your routes. Check out Richard’s blog post or the source on GitHub for more.

SSPullToRefresh – Simple pull to refresh view for iPhone #

As I continue to dive into iOS development, I’m on the lookout for time saving Cocoa projects. Sam’s SSPullToRefresh is an easy, customizable way to add pull-to-refresh views like those made popular in Loren Brichter’s original Tweetie for iPhone app. SSPullToRefresh hides all the pulling and animating logic away, leaving you to implement what you care about – fetching and refreshing your view.

- (void)viewDidLoad {
   [super viewDidLoad];
   self.pullToRefreshView = [[SSPullToRefreshView alloc] initWithScrollView:self.tableView delegate:self];
}


- (void)refresh {
   [self.pullToRefreshView startLoading];
   // Load data...
   [self.pullToRefreshView finishLoading];
}

- (void)pullToRefreshViewDidStartLoading:(SSPullToRefreshView *)view {
   [self refresh];
}

You can use a couple of provided content views or you can subclass and implement your own. Check out the source on GitHub or see it in action in Cheddar.