Tiago Scolari

bits for fun

s3kup: the s3 backup tool

I’ve created a tool creating backups on a s3 bucket, I called it s3kup. It’s written in GO and very straightforward to use. It’s somehow a rewrite of an old ruby gem I had for the same purpose. It’s a command that can take any input from a shell pipeline and store it in a versioned way in a s3 bucket. s3kup has 3 basic commands: push, pull and list. Continue reading

Speed up your bundler = personal rubygems proxy with cloudfront


If you think your bundle install takes too long, or have a distributed team around the globe, this may help you.

It’s possible to have a cloudfront server pointing to rubygems, and using it as your gems source server. (If you are not aware of what cloudfront is give a look at it)

On this configuration, cloudfront will fetch requests from rubygems.org, and keep them cached on the CDN, so you should expect the first bundle install to take very close time of using rubygems.org, but the second one and forward should have some performance increase. You can also manually set the cache time there.

On a new cloudfront server, at the AWS console, add rubygems.org as origin:

I’m not a rubygems api expert, I’ve captured bundler requests and tried to cache them with “behaviours” on cloudfront. I’m also caching everything else for 10 minutes. These configurations probably can be tuned, drop a comment if you have suggestions :)

Things to have in mind:

  • origin must match viewer’s protocol
  • all the behaviours must forward query strings

On the Gemfile, you need to change the source to the new proxy server:

# Gemfile
source 'http://mycfdomain.cloudfront.net'

note: Theoretically https should work, but due some redirection it didn’t work for me.


I’m using rvm gemset to reset scenarios between tests.

Using a rails 4 default gemfile:

  • using rubygems.org:
bundle  6.37s user 1.59s system 21% cpu 37.840 total
  • using cloudfront proxy (FIRST TIME, no cached content):
bundle  6.50s user 1.77s system 22% cpu 37.578 total
  • using cloudfron proxy (with cached content):
bundle  6.35s user 1.60s system 30% cpu 25.664 total

Using “real-world” project Gemfile:

  • using rubygems.org:
bundle  116.22s user 29.68s system 45% cpu 5:20.03 total
  • using cloudfront proxy (FIRST TIME, no cached content):
bundle  112.99s user 29.69s system 44% cpu 5:23.24 total
  • using cloudfron proxy (with cached content):
bundle  111.52s user 29.86s system 58% cpu 4:03.12 total

I think the difference on cached content is significative. It’s up to you to decide if it’s enough reason to pay a CF server for this.

Automatic git bisect


There are some situations that you found your build broken and need to know at what revision the “brokeness” was introduced.

git bisect is a great tool for that, basically you tell git at which revision the build was good (assuming HEAD is broken), and it does a binary search for the revision where the bug was introduced.

Continue reading

Keeping track of your deploys with capistrano and git

I’ve created a simple capistrano task to keep track of my deploys. When I deploy to a server, it will create a git tag and push it to origin. This way I can keep track of each deploy revision. after 'deploy:update_code', 'git:create_deploy_tag' namespace :git task :create_deploy_tag do puts "[git] creating new deploy tag" tag_name = "deploy--#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}" `git tag -a '#{tag_name}' -m 'Deploy: #{Time.now}' origin/production && git push origin --tags` end end p. Continue reading

Android: Camera and Image Gallery


Here is some simple steps to access the phone camera and image gallery. This will be a very simple app. There is only one view, it will hold 2 buttons for selecting the image (one from camera and another from the gallery) and a ImageView that will show the selected image. I’ll not talk about the layout here, what I did is ugly and looks like this:

Continue reading

Android Webapp in 3 Minutes

I’m going to use the rails application I created on the post How to Build a Mobile Rails 3.1 App to create a simple android app. You probably can do this in less than 3 minutes, I guess. ** UPDATE ** This guide is good to get you started, but I consider it deprecated. I think the end result gives a bad user experience, since it will won’t behave as an proper mobile app, and it won’t also behave as a webpage. Continue reading
Older posts