Skip to main content

Ruby's classes are dynamic

One way cool feature of Ruby is that classes can be modified dynamically. I got a chance to use this feature today when I needed to change the output format of the Logger class in Rails (the default format is suboptimal IMHO). I simply had to append to environment.rb:

require 'logger'
class Logger
def format_message(severity, timestamp, msg, progname)
"#{severity} #{timestamp} #{msg}\n"
end
end

and, voila, the method 'format_message' was modified.

As a sidenote: By the time I write this the example for changing the log format given in the Rails wiki does not work. And what's worse, if you put non-working code into your environment.rb WebBrick will, of course, not come up.

Comments

Popular posts from this blog

Python script to set genre in iTunes with Last.fm tags

Now that I have started to seriously use iTunes I figured it might be nice to have the genre tag set in a meaningful way. Since I have a reasonably large collection of mp3s doing that manually was out of question - I wrote me a Python script to do that. There seems to be a large demand for such a functionality (at least I found a lot of questions on how to automatically set the genre tag) so maybe someone else finds the script useful. It is pasted below. General Strategy The basic idea is to use Last.fm's tags for genre tagging. In iTunes the genre tag is IMO best used when it only contains one single genre, i.e. something like "Electronica", not something like "Electronica / Dance". On the other hand dropping all but one tag would lose a lot of information, so I decided to use the groupings tag for additional information that is contained in the list of tags that an artist has on Last.fm. In the example above that would be something like "Electronica, Dan

Running the iTunes genre tagger script with OS X Automator

Due to public demand here's a little recipe how to run last post's mp3 tagger without using the command line on OS X: Open Automator Start a new "Application" project Drag the "Run Shell Script" action into the right workflow panel, set the "pass input" drop-down to "as arguments" and edit the script to (see screenshot below): for f in "$@" do /opt/local/bin/python /Users/michaelmarth/Development/Code/mp3tagger/tag_groupings.py -d "$f" done (you will have to adapt the paths to your local setup) Save the application and happily start dropping mp3 folders onto the application's icon.