Category: Technology

Realtime Log Visualization

By Darian Shimy, December 10, 2009 2:00 pm

Erlend Simonsen put out a program called gltail that creates a graphical representation of your log files.

Screen shot 2009-12-10 at 2.04.53 PM

I saw this a long time ago, but last night I finally started playing with it. It works quite well. I needed to make a small change to support an SSH gateway which you can get here: http://github.com/dshimy/gltail.  On OS X, getting started was simple:

$ git clone git://github.com/dshimy/gltail.git
$ sudo gem install ruby-opengl file-tail

If you want the dots to bump each other, you need to install the Chipmunk physics library:

$ cd vendor/Chipmunk-4.1.0/ruby
$ ruby extconf.rb
$ sudo make install

Beyond that, tweak the configuration file and enjoy.

New Twitter Account

By Darian Shimy, October 26, 2009 2:53 pm

So as I mentioned earlier, I no longer show up in Twitter results.  I tried to get it fixed, but it’s not worth my time anymore.  I created another Twitter account with the same username.  The old account was renamed.  So if you were remotely interested in the minutia of what I was doing, you will need to re-follow me.

http://twitter.com/dshimy

I am still not in the results, but I heard it might take a while for new accounts to find their way.

Update: I’ve made it to search!

pubsubhubbub Support

By Darian Shimy, October 21, 2009 3:04 pm

pubsubhubbub_logoJust added support for pubsubhubbub with a WordPress Plugin.  Interested to see if my posts will appear in Google Reader any faster.  Probably not, but it can’t get much slower.  Which hubs are you using?

SQL Logging to script/console

By Darian Shimy, October 10, 2009 9:37 pm

When running a Rails console session, a true time saver is directing the ActiveRecord logs to STDOUT instead of the log file.  This is easily accomplished adding the following to your ~/.irbrc file:

if rails_env = ENV['RAILS_ENV']
  # Called after the irb session is initialized and Rails has
  # been loaded (props: Mike Clark).
  IRB.conf[:IRB_RC] = Proc.new do
    ActiveRecord::Base.logger = Logger.new(STDOUT)
    ActiveRecord::Base.instance_eval { alias :[] :find }
  end
end

If someone knows the original author of these lines, let me know and I’ll give them proper attribution.

Error Handling with XML and Authlogic

By Darian Shimy, October 10, 2009 12:12 am

I was helping a friend integrate an API into the application. He is running Rails 2.3.4 with Authlogic. His authentication check method was the following:

1
2
3
4
5
6
7
8
def require_user
  unless current_user
    session[:return_to] = request.request_uri
    flash[:notice] = "You must be logged in to access this page"
    redirect_to new_user_session_url
    return false
  end
end

Although this worked great for the HTML requests, the XML requests were getting HTML response with a redirect to the login page. Not what we were looking for. Instead, the require_user method needed to be aware of the mime-type and return an appropriate response.

Here is the block that responds to the mime-type. Instead of getting an HTML response to an XML request, an XML error reponse with the correct HTTP status code is returned.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def require_user
  unless current_user
    respond_to do |format|
      format.html {
        session[:return_to] = request.request_uri
        flash[:notice] = "You must be logged in to access this page"
        redirect_to new_user_session_url
      }
      format.xml {
        user = User.new
        user.errors.add_to_base("Authentication is required.")
        render :xml => user.errors, :status => 401
      }
      end
    return false
  end
end

Hex Color Picker

By Darian Shimy, October 9, 2009 5:30 pm

One thing missing from the color picker in OS X is the ability to see the hex code for a color.  An absolute must for web development.  Luckily, there is a handy extension to add a pane to the color picker to view the hex code.

colorpicker

Capistrano – Deploying a Branch

By Darian Shimy, October 8, 2009 7:00 am

When deploying from Capistrano, I like to have the following in my ‘deploy.rb’ file:

set :scm, "git"
set :repository, "git@www.example.com:project.git"
set :git_shallow_clone, 1
set :deploy_via, :remote_cache

This allows speeds deployments by keeping a versions checked out on the server in ‘shared/cached-copy’. When it comes to deploying, it is always best to deploy from a branch instead of the master/head/trunk. To handle this, add the following:

set :branch, fetch(:branch, “master”)

When you deploy, run the following:

$ cap deploy -S branch=REL_1.0

If you don’t specify the branch, the master is used.

Capistrano – Email on Deployment

By Darian Shimy, October 7, 2009 7:00 am

It’s a good practice to send a notification to certain people when a new version is deployed. This process can easily be automated in Capistrano. Add the following file to the ‘lib’ directory with the filename ‘cap_mailer.rb’:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
require 'rubygems'
require 'actionmailer'
 
ActionMailer::Base.smtp_settings = {:address => "localhost", :port => 25, :domain => 'example.com'}
 
class CapMailer < ActionMailer::Base
  def deploy_notification(options)    
    message = "Deployment\n\n"
    options.each_pair do |k,v|
      message << "  #{k}: #{v}\n"
    end
 
    recipients "notify-deployment@example.com"
    from       'noreply@example.com'
    subject    "Deployment to #{options[:rails_env]}"
    body       message
  end
end
 
module CapistranoMailer
  def send(options)
    CapMailer.deliver_deploy_notification(options) 
  end
end
 
Capistrano.plugin :mailer, CapistranoMailer

In the ‘deploy.rb’ file, add the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require 'lib/cap_mailer'
require 'etc'
 
namespace :deploy do
  desc "Sends an email upon successful deployment"
  task :notify do
    mailer.send(
      :rails_env => rails_env,
      :deploy_to => deploy_to,
      :branch => branch,
      :application => application,
      :repository => repository,
      :deployment_time => Time.new.to_s,
      :deployer_username => Etc.getlogin)
  end
end
 
after "deploy", "deploy:notify"
after "deploy:migrations", "deploy:notify"

Capistrano – Install Gems Remotely

By Darian Shimy, October 6, 2009 7:00 am

Capistrano does not have out-of-the-box support for installing gems on your servers. You may not need this if you are packing them, but some of us would like to run the equivalent of ‘rake gems:install’. To do this in capistrano, add the following to your deploy.rb file:

namespace :gems do
  desc "Install gems"
  task :install, :roles => :app do
    run "cd #{current_release} && #{sudo} rake RAILS_ENV=#{rails_env} gems:install"
  end
end

Capistrano – Adding Help to Deployments

By Darian Shimy, October 5, 2009 7:00 am

If you don’t do something everyday, you tend to forget how to do it. The same is with the deployments. To help this, you can easily add a help section to Capistrano in your ‘config/deploy.rb’ file. Here is a sample:

desc "Print usage/help information"
task :help do
    puts "Usage: cap <task> -S stage=[staging|production] -S branch=<branch_name>"
    puts ""
    puts "Examples:"
    puts "----------------------------------------------------------------------"
    puts "  Production:"
    puts "    $ cap deploy:migrations -S stage=production"
    puts ""
    puts "  Staging:"
    puts "    $ cap deploy:migrations"
    puts ""
    puts "  Production with branch:"
    puts "    $ cap deploy:migrations -S stage=production -S branch=rel_001"
    puts ""
    puts "  Staging with branch:"
    puts "    $ cap deploy:migrations -S branch=rel_001"
end

When you forget how to do something, just run the following:

$ cap help
 
Usage: cap <task> -S stage=[staging|production] -S branch=<branch_name>
  * executing `help'
Examples:
----------------------------------------------------------------------
  Production:
    $ cap deploy:migrations -S stage=production
 
  Staging:
    $ cap deploy:migrations
 
  Production with branch:
    $ cap deploy:migrations -S stage=production -S branch=rel_001
 
  Staging with branch:
    $ cap deploy:migrations -S branch=rel_001

Panorama Theme by Themocracy