I made a little Sinatra app called ghissues. It’s a dashboard view of all issues in private repos in your organizations on GitHub.
Because GitHub gives you:
You can use it here:
You can view the source and contribute here:
I made a little Sinatra app called ghissues. It’s a dashboard view of all issues in private repos in your organizations on GitHub.
Because GitHub gives you:
You can use it here:
You can view the source and contribute here:
BTW — I started working at 37signals in April. They’re still looking for another programmer…!
Lots of links. It’s been too long!
However, there is a downside: Pow doesn’t play nicely with Apache (or any server listening on port 80). Life isn’t all greenfield, if in the course of the day you need to work on PHP or CGI legacy apps Pow is not so simple. Pow creates a firewall rule that redirects port 80 to its port; to access Apache you need to either toggle the firewall rule on and off or move Apache to a different port all together. And now you’re running two web servers. There has to be a better way.
Experimental Terminal platform built on WebKit + node.js. Currently only for Mac, though the prototype works 90% in any WebKit browser.
Guard is a command line tool to easily handle events on files modifications (FSEvent / Inotify / Polling support).
Download github issues for offline access
Terminitor automates your development workflow setup. Less time setting up, more time getting things done.
Send, track and analyze. Receive, parse and store.
I’d like to share a stack of gems that I’ve been using this year. Hopefully they will give people a bit of help while developing a new Rails 3 app.
Since Heroku doesn’t care what you push to it as long as it is in the master branch on their end, why not generate the assets in a throwaway branch and push that up?
HTML bundle for TextMate
The unix process model is a powerful way to approach running your web app. Procfile gives us a way to declare process types, and Foreman gives us an easy way to run the app’s processes in both development and deployment environments.
Ever wondered what HTTP requests the Ruby gem you are using to connect to a third party API is making? Use HTTP Spy to see what is going on behind the scenes
This is an extraction of the `auto_link` method from rails. The `auto_link` method was removed from Rails in version Rails 3.1. This gem is meant to bridge the gap for people migrating.
Simple Ruby wrapper for the GitHub v2 API and feeds
Easily use any Plain Old Ruby Object as the model for Rails form helpers.
Starbucks practices extremely predatory site selection for their stores: they’ll intentionally move in right across the street from or immediately next door to independent coffee shops, in an unnecessarily aggressive effort to drive them all out of business. It puts the bad ones out of business, but it actually helps the good ones.
Netflix knocked over a new milestone Monday: It now has more subscribers than the largest cable TV operator in the U.S.
Another word for this problem is cleverness: to quote another one of the C hackers, “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.”
Option gathering made easy
If you’ve been using rails for a while now you may be familiar with Active Record’s query cache. The query cache is a powerful part of Active Record which reduces unnecessary SQL calls and provides general speed improvements, especially when dealing with associations. The problem with the query cache, however, is when retrieving two identical records from the database two in-memory objects will still be created.
The easiest way to share localhost over the web.
Maybe I’m weird (actually, there’s no maybe about it) but when I first heard about Rails 3.1 getting CoffeeScript and Sass out of the box, I wanted to see how it worked and how smooth the process would be. So like quite a few people on IRC I’ve seen, I installed edge Rails (currently 3.1.0-beta) and got playing. (Yes, it’s PRE-RELEASE. Expect mischief!)
I’m glad David’s stepping into these sorts of discussions again. He seemed to fade away during the year before Rails 3 came out, leaving a lot of the “thought leadership” to Yehuda Katz. Now he’s back on top form and talking sense – long may it last.
HireFire automatically “hires” and “fires” (aka “scales”) Delayed Job (and soon Resque too!) workers on Heroku. When there are no queue jobs, HireFire will fire (shut down) all workers. If there are queued jobs, then it’ll hire (spin up) workers. The amount of workers that get hired depends on the amount of queued jobs (the ratio can be configured by you). HireFire is great for both high, mid and low traffic applications. It can save you a lot of money by only hiring workers when there are pending jobs, and then firing them again once all the jobs have been processed. It’s also capable to dramatically reducing processing time by automatically hiring more workers when the queue size increases.
Cloud Foundry, a VMware-led project is the world’s first open Platform as a Service (PaaS) offering. Cloud Foundry provides a platform for building, deploying, and running cloud apps using Spring for Java developers, Rails and Sinatra for Ruby developers, Node.js and other JVM frameworks including Grails.
Over the past 8 years, we’ve used many tools for project communication and planning and we tried very hard to not write our own. The latest combination was Basecamp and Pivotal Tracker. Basecamp was great for discussion and communication. Pivotal Tracker was great for user stories and emergent planning.
However, we’ve grown tired of having one tool that designers love, one tool that developers love, and no tool that clients love.
Syntactic suger for http://pow.cx/
A TextMate Bundle for CoffeeScript
Most followed users on github by city.
Node powered Rack server
Zero-configuration Rack server for Mac OS X
The Git TextMate Bundle
Trigger the first ten Bookmarks Bar items with Ctrl+1 through Ctrl+0 (on OS X; it’s Alt on Windows, Meta on Linux).
Eco lets you embed CoffeeScript logic in your markup. It’s like EJS and ERB, but with CoffeeScript inside the . Use it from Node.js to render your application’s views.
Permit (freely encourage) your developers to engage with the OSS community around each project. They, and your company, will get two primary benefits: You will gain a more intimate understanding of the projects, and you will have social and productive relationships with the other core developers and contributors in the community. It’s easy to ask a friend to help solve a problem. The first step is to contribute to their project; friendship and partnership will follow.
A plugin to duck-punch asset packager and provide middleware to work on Heroku with a ROFS.
As it happens, my generic advice on Rails testing hasn’t changed substantially, even though the tools I use on a daily basis have.
Today we’re taking that a step further, enabling you to share recommendations with the world right in Google’s search results. It’s called +1—the digital shorthand for “this is pretty cool.” To recommend something, all you have to do is click +1 on a webpage or ad you find useful. These +1’s will then start appearing in Google’s search results.
It doesn’t take a genius to realise that testing is a very personal matter. From Test::Unit purists to RSpec evangelists, everyone has their own take on testing Ruby code. And whilst we believe that not only there are no silver bullets in most of the problems in software development but personal preferences make it unlikely that there will ever be any, we’d like to share our thoughts about testing in this series of posts. We hope it will be as enjoyable for you to read as it was for us to write.
BrowserMob Provides FREE Website Monitoring and Load Testing [Used by github]
JSONView for chrome is an extension that helps you to parse and view JSON documents
Ruby’s net/http is setup to never verify SSL certificates by default. Most ruby libraries do the same. That means that you’re not verifying the identity of the server you’re communicating with and are therefore exposed to man in the middle attacks. This gem monkey-patches net/http to force certificate verification and make turning it off impossible.
Rails 3 Client Side Validations
A Smalltalk-like Method Finder for Ruby. Provided with a receiver, a desired result and possibly some arguments, it will list all methods that produce the result when called on the receiver with the arguments.
an add-on library that implements several middleware (such as JSON and XML parsers) and helps you build an awesome stack that covers most of your API-consuming needs.
A new look and feel for Test::Unit output — Test::Unit Reporter (New)
Allow FormHelper#form_for to specify the :method as a direct option instead of through the :html hash
Add `config.force_ssl` configuration which will load `Rack::SSL` middleware if set to true
Added Base.http_basic_authenticate_with to do simple http basic authentication with a single class method call
An example for a StatusMenu application written in MacRuby
Out of the box CarrierWave provides a consistent interface to process images using RMagick, MiniMagick or ImageScience. Resizing and cropping is supported for all three image processing engines but setting the quality or removing personal data is not supported. Thankfully, CarrierWave provides an easy way to extend the default functionality so we can do more.
So, this token authentication got me thinking. Instead of sending an encoded string with session information to flash, which in turn sends it to the server, which in turn hacks it into an actual session, I could just send the user’s authentication token along! No sever-side hacks required – it’s all built in into devise already!
Mom: Yeah. I’m doing more and more of that lately. I’m learning from my mistakes, and beginning to use Google.
Here’s a talk I gave at Future of Web Apps 2010 in London. In this talk, I walk through the steps of creating a web app including modeling, sketching, HTML, Photoshop explorations, and moving from static mockups to live running code. Each step is illustrated with a real example, including some live sketching and live HTML. I also wanted to give a sense of how we think about apps at 37signals, as a stack of different levels that we can iterate on individually.
If I ask you to visualize a software product, a picture of the interface probably comes to mind. From the user’s perspective, the interface is the product. For us on the development side, the product is more than that. It’s the interface, the code, the connections from code to UI, the separations of concerns and the boundaries between features.
Object-Hash Mapping for Redis
A ruby client library for the redis key value storage engine
TL;DR: Redis is fucking awesome.
pushState + ajax = pjax. pjax loads HTML from your server into the current page without a full reload. It’s ajax with real permalinks, page titles, and a working back button that fully degrades.
An interactive online marketplace where you can learn to code directly in the browser
Monitor your service’s availability through a simple, clean DSL
A friendly wrapper for launchctl
Solr-powered search for Ruby objects
Tokeninput is a jQuery plugin which allows your users to select multiple items from a predefined list, using autocompletion as they type to find each item. You may have seen a similar type of text entry when filling in the recipients field sending messages on facebook.
Teach your forms some manners
With HelloFax, you can send faxes, sign documents and fill out forms… all from your computer.
Y Combinator on Tuesday showed off its latest class of start-ups at its Mountain View, CA, headquarters, offering an extra-large sampler pack of developer tools; social apps; lots of services for markets like real estate, doctors and parents; and, of course, a few of its trademark productivity apps.
Headless HTMLUnit powered browser for Capybara
The New York Times pricing seems designed not to get people to subscribe digitally, but rather to discourage existing subscribers from cancelling their print subscriptions. I think the chart above validates that view: they apparently have no interest in competing for digital-only dollars.
Reverse engineer server configuration
We’re here to help you make your own newspapers. You can use our online tool to upload and arrange your words and pictures or you can use the site to send us a PDF. We print every Tuesday afternoon, and you’ll get your papers in about a week.
Rent shared spaces, empty desks, conference rooms, or entire offices by the day, week, or month.
Serve is a small Rack-based web server and rapid prototyping framework for Web applications (specifically Rails apps). It is designed to compliment web application development and enforce a strict separation of concerns between designer and developer. Using Serve allows the designer to work in a separate prototype project, while the developer can work on the actual application and utilize resources from the prototype as needed. This allows the designer to focus on presentation and flow, while the developer can focus on implementation.
Building a business around maximizing your individual happiness is not particularly useful or admirable. That is my position, and I’m well aware that it may be unpopular with some.
I don’t work for reddit anymore (as of about a week ago, although I didn’t get as much fanfare as raldi did), but I can tell you that they’re giving Amazon too much credit here. Amazon’s EBSs are a barrel of laughs in terms of performance and reliability and are a constant (and the single largest) source of failure across reddit.
A lot of people missed my talk so I recorded it in my office as soon as I got home from Austin. It covers mainly moderation tips and ideas for building tools for more effective moderation.
Generate memes from http://memegenerator.net
A digest of my recent links on Pinboard:
Kevin Kelly, Founding Executive Editor of Wired Magazine and noted technologist, presents ideas from latest book, What Technology Wants. “[T]echnology as a whole is…a living, evolving organism that has its own unconscious needs and tendencies.”
Free Cron and Background Jobs for Heroku
Redis-backed service for fast autocompleting – extracted from SeatGeek
A couchdb connector for backbone with support for real time changes.
The drive-by technorati are well-informed, curious and always probing. They’re also hiding… hiding from the real work of creating work that matters, connections with impact and art that lasts. I love to hear about the next big thing, but I’m far more interested in what you’re doing with the old big thing.
Rack middleware to pygmentize your code blocks
Strategies for cleaning databases in Ruby. Can be used to ensure a clean state for testing.
Resque plugin to autoscale your workers on Heroku
Variant of ImageScience that does not require RubyInline
I just checked my server’s /var/log/auth.log and found that I’m getting over 500 failed password/break-in attempt notifications per day! My site is small, and its URL is obscure. Is this normal? Should I be taking any measures?
A build of Apache CouchDB optimized for iPad, iPhone, and iPod Touch
Replaces Net::HTTP with a subclass that routes all requests to a Rack application
Simple Object Orientation and charming syntax on top of Erlang
run Rack applications in-process, without a server
Xcode 4 was released today, and we have 6 free screencasts available to help you quickly make the transition and learn time-saving keyboard shortcuts along the way
Today Apple released Xcode 4. We’re pretty excited over here because Xcode 4 is the first Xcode release to support git natively. What’s even more, new projects default to git repos!
Again, you can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.
Make iOS App Trailers
SlimScrooge heavily optimises your database interactions
Why is it that over 50 million individuals have downloaded this simple game? Many paid a few dollars or more for the advanced version. More compelling is the fact that not only do huge numbers download this game, they play it with such focus that the total number of hours consumed by Angry Birds players world-wide is roughly 200 million minutes a DAY, which translates into 1.2 billion hours a year. To compare, all person-hours spent creating and updating Wikipedia totals about 100 million hours over the entire life span of Wikipedia (Neiman Journalism Lab). I say these Angry Birds are clearly up to something worth looking into.
A number of people asked about the technical aspects of the great Delicious exodus of 2010, and I’ve finally had some time to write it up.
Goliath is a non-blocking Ruby web server framework
A Cocoa / Objective-C wrapper around SQLite
Intelligent caching, no observers necessary
Cucumber steps for driving out command line applications. The command line application can be anything, a compiled C program, a Java program, a Perl script – anything.
Collect and analyze your web traffic in real-time using our fast, reliable hosted system.
A new business in the Flatiron district of Manhattan called General Assembly is not a university, but its founders hope it will seem like one. The 20,000-square-foot space offers desks, Internet access, classes and other services for entrepreneurs.
As announced on the mailing list, we have just released Sinatra 1.2.0. Let’s have a closer look at the new features.
This morning we needed to write a Cucumber scenario to test that a user could log into the system using Google Apps.
Timeago is a jQuery plugin that makes it easy to support automatically updating fuzzy timestamps (e.g. “4 minutes ago”).
One of the things that I was not aware of until recently is how handy MongoDB’s object ids actually are. Below are a few tips based on some things I have been doing lately.
Track changes to your models’ data. Good for auditing or versioning
Rails plugin that silences Postgresql connection adapter verbose output
An on-the-fly processing/encoding framework written as a Rack application.
Years ago when Seinfeld was a new television show, Jerry Seinfeld was still a touring comic. At the time, I was hanging around clubs doing open mic nights and trying to learn the ropes. One night I was in the club where Seinfeld was working, and before he went on stage, I saw my chance. I had to ask Seinfeld if he had any tips for a young comic. What he told me was something that would benefit me a lifetime…
When I was at the Crate and Barrel store helping a woman find a set of drinking glasses I had a short conversation with her about what sort of glasses she was interested in. There are so many glasses at the Crate. In this 5 minute conversation I helped her hone in on the right glasses. Making this one $9.99 sale taught me loads more than a graphic design book had ever done. I remembered this later as I designed the UI for the website.
If you can’t or you’re completely sure you have a valid reason to skip your callbacks, you probably tried something like removing the callback method but found out that didn’t work anymore.
Our newest creation is called AWS CloudFormation. Using CloudFormation, you can create an entire stack with one function call. The stack can be comprised of multiple Amazon EC2 instances, each one fully decked out with security groups, EBS (Elastic Block Store) volumes, and an Elastic IP address (if needed). The stack can contain Load Balancers, Auto Scaling Groups, RDS (Relational Database Service) Database Instances and security groups, SNS (Simple Notification Service) topics and subscriptions, Amazon CloudWatch alarms, Amazon SQS (Simple Queuue Service) message queues, and Amazon SimpleDB domains.
jQuery File Upload Plugin
Copycopter lets you edit live copy in your web app. Setup is simple and managing copy is simple, flexible and forgiving.
Because you understand that test/behavior driven development and continuous integration make your web applications easier to develop with fewer bugs. We run your Selenium tests 10x faster in parallel, cut your infrastructure overhead, increase the velocity of your agile development process, run browsers in the cloud, deliver live test video, provide secure tunnels and live/breath Selenium testing.
Waypoints is a small jQuery plugin that makes it easy to execute a function whenever you scroll to an element
Conditionally roll out features with redis + memcache.
a lightweight jQuerified HTML editor
An excellent development aid. Will run “EXPLAIN” before each of your select queries in development, and provides a display which makes them easy to browse. In this fork, gemified and compatible with Rails 2 + 3.
Without Readability and innovative small businesses like it, the App Store is nothing. What’s an App Store without Apps? A way to sell Apple’s over-hyped and underused applications like Pages for iPad?
The discussion shouldn’t be whether Apple can enforce this policy, but whether they should. And if you look at what this does to developer relations, big and small, it’s easier to argue that this is likely to result in more harm than good to the iOS platform.
I think to build a great company you need to have a well defined hypothesis based on a theory for a market’s evolved future.
And I think the most effective way to enter that market is to build a company like a scientist testing the theory. As an experiment.
As many of you may know IdentityMap was merged recently into ActiveRecord.
minitest provides a complete suite of testing facilities supporting
TDD, BDD, mocking, and benchmarking.
These are icons I drew for my personal needs. They are all in vector and drawn on this page with Raphaël
You can now configure and access any of your S3 buckets as a “website.” When a request is made to the root of your bucket configured as a website, Amazon S3 returns a root document. Not only that, if an error occurs your users receive an HTML error document instead of an XML error message. You can also provide your own error documents for use when a 4xx-class error occurs.
PgSearch builds ActiveRecord named scopes that take advantage of PostgreSQL’s full text search
If I could only have one thing this year, it would be to eliminate that
meme from the collective consciousness.
Try this. Set a timer to go off once every hour. When that timer beeps, ask yourself “Is what I am doing right now important?” If it is, continue. If not, stop what you were doing and put your twenty four hours into something that matters.
zepto.js is a minimalist inlinable framework for mobile WebKit browsers, with a jQuery-like chaining syntax
Redis based queues and workers
A Scope & Engine based clean and powerful and customizable and sophisticated paginator for Rails 3
We learned pretty early that WePay users who have interacted at least once with a WePay representative are happier with the service, transact more, and are more likely to refer friends.. When you register for WePay, you don’t get an e-mail from “no-reply@WePay.com,” you get an e-mail from “email@example.com.” If you reply, it goes directly to her, and she responds.
CouchOne and Membase Merge Companies and Technologies to Create the First Comprehensive, End-to-End NoSQL Database
For the most part, you could upgrade from Ruby 1.8.x and remain blissfully unaware of the many updates and improvements within the language – but what fun would that be?
alias_method_chain is frequently abused in the Rails world, but it wouldn’t exist if there wasn’t a valid use case.
Our customers or prospective customers often ask us how we do a performance audit (it’s our most popular service). I thought I should write a blog post that will both answer their question, so I can just reply “read all about it at this URL” and share our methodology with readers a little bit. This fits well with our philosophy of openness. It also shocks people sometimes — “you’re giving away the golden goose!” Not really. What you hire us for is our experience, not a recipe that anyone can follow.
Let’s say you want to have a log of all outgoing emails in your Rails 3 app. Thanks to some pretty sweet notification support in the Mail gem, it’s really simple. Here’s an example using Mongoid:
Initially, I was logging the entire contents of the email, but that included attachments as well. So, now I’m just logging the body. I wonder if there’s a better choice of what to log, though…
I’ve cleaned out my GitHub watched repos quite a bit. My newsfeed just had way too much going on. Something needed to be done. Before cleaning things up, I decided to bookmark all of the repos I had been watching on pinboard:github. If you’re interested, have a browse through those links. There are some really great projects buried in there.
It’s hairy, scary, maybe even downright abominable. Here I’ll try and explain why I think our current tool chains are inadequate, and where I think we should be going to fix it.
Due to some fancy-pants metaprogramming in AbstractController::Callbacks, it’s hard to see what’s going on.
While working on a Sinatra-based JSON web service that gets very heavy traffic, I wanted to find a way to short-circuit requests and avoid most of the stack if a resource hasn’t been modified.
Earlier this week Google launched an algorithmic change that will tend to rank scraper sites or sites with less original content lower. The net effect is that searchers are more likely to see the sites that wrote the original content. An example would be that stackoverflow.com will tend to rank higher than sites that just reuse stackoverflow.com’s content. Note that the algorithmic change isn’t specific to stackoverflow.com though.
Our company had too many features and this created confusion amongst our customer base. This in turn led to enough customer support issues that we couldn’t innovate on the product, we were too busy fixing things.
Oh, and the next time you see a warning used instead of undo, send the designer of the application/website a nice e-mail suggesting that they implement an “undo” feature instead. Send them a link to this article. Let’s see if we can’t change the way people design on the web—and in the process make everyone’s computing life more humane and less frustrating in one little way. Let the war on warnings begin!
I hesitate to name 2011 the Year of Operator Billing, because there are many technical and political issues that must be solved before a unified system can be deployed across Europe and North America, and that’ll take more than a year. But operator billing is definitely coming.
Should is a dangerous word. It conveys a sense of obligation. Failure to follow through with things you should do leads to guilt. Guilt is demotivating.
Say you’re using Heroku to host a staging version of your app that uses Devise for authentication. You want to keep unwanted visitors out of your staging app, but your app only uses authentication for certain features. You want to block outsiders from accessing the app entirely. Since Heroku doesn’t allow you whitelist IP addresses in your webserver config, you might want to try HTTP basic access authentication to provide top-level authentication. Doing this in Rails is pretty straightforward.
While the #to_i calls look a bit unappealing, it’s important that Range#step is called over numbers, or else it would have to call #succ 86400 times between iterations!
What I saw in Google’s WiFi´s effort were different “professors” running around with different ideas, trying to line up Google resources behind them only to rise and fall with unfinished projects. Initiatives like WiFi San Francisco, municipal WiFi throughout USA never took off because of lack of company wide support. And WiFi is but one example.
So if you’re comfortable with the concept of using a queueing system to run background jobs, and are ready to go to the next level of scalability, performance, and robustness, where to from here? It’s time to get your hands dirty with a serious queueing tool: RabbitMQ.
An issue popped up on Twitter this past week that caused the web site to be generally unusable for many users. It appears as if attempts to scroll were unbearably slow and caused the site to be unresponsive.
Not sure if this is the correct way to go about testing rake tasks but it works pretty well.
When we first launched the lab, we released a jQuery plugin that automatically preloads all images referenced in CSS files. We’ve found the script to be incredibly helpful in developing snappy applications where images are always ready when we need them. This post describes a significant update to the script which will make it even easier to integrate in existing projects.
Google has recently announced their intention to remove the H.264 video codec from its Chrome browser.
Simple, fast, and powerful. Optimizely is a dramatically easier way for you to improve your website through A/B testing. Create an experiment in minutes with our easy-to-use visual interface with absolutely no coding or engineering required.
If you’re using Rails 2.3.8 for your application and thought that you were safe after May’s comedy of errors produced three point updates in as many days, think again. Unfortunately there’s a little bug that can lead to parameters being altered or potentially even truncated without warning.
So, a while ago I write a Ruby YUI Compressor Wrapper which is still available and works great (although it could use a newer jar file) as far as I know… [but] on a new project I’m working on *I just need a inline YUI compressor* and I dont give a damn about anything else like bundling, globbing or whatever. So I ended up throwing together this little (~50 lines less comments) Ruby YUI Compressor to do my dirty work.
Trying to hire Ruby developers in Chicago is hard right now. Really hard. Like, I think every single one of them is happily engaged in their work. This is great for Chicago Ruby developers. This is frustrating for people trying to ramp-up their teams with local Ruby talent. How did we get here? How do we get out of this problem?
…brings tabs to your native Finder and more!