The Journalist's Cage

And this gray spirit yearning in desire to follow knowledge like a sinking star...

HomeBlogTagsArticles

Calendar

January 2007
SuMoTuWeThFrSa
 123456
78910111213
14151617181920
21222324252627
28293031

Recent Bookmarks

Tags

Archives


RSS

Timed events in Ruby/GTK

Wii Watch Screenshot I've been trying to get my hands on a Nintendo Wii since the release last month. I haven't had much luck, and I'm not willing to pay a higher price to get one from e-bay or from the numerous retailers that offer overpriced bundles. To help me keep an eye on Wii availability, I made a simple notification utility that uses xpBargain's Wii Locator RSS feed. My utility checks the RSS feed every five minutes and displays the results in a compact notification window.

I was initially just going to keep a browser window open at the Wii Locator page and use the Firefox ReloadEvery extension to refresh it every five minutes, but that would waste a lot of screen space and be harder to read at a glance. I decided to use Ruby and GTK just to keep things simple. Coding simple data lists with a GTK treeview is more trouble than it is worth, so I decided to generate simple html and dump it into a GtkMozEmbed widget.

Making this sort of utility is relatively trivial in GTK, and I managed to write most of it without having to refer to the API documentation. I used REXML to parse the RSS feed and then I generate the HTML by hand. I could have converted the RSS to HTML with XSL, but that probably would have been overkill for such a simple throw-away app.

Everything seemed to work, but I ran into a small problem. Ruby's simple threading system doesn't work with GTK's main loop. To make a Ruby script perform an action every 300 seconds without stalling the rest of the program, I would typically do something like this:

Thread.new do
  loop do
    process_data
    sleep 300
  end
end

Unfortunately, that particular approach makes the program hang. After a little bit of research, I figured out how to perform timed events on a loop with GTK. The timeout_add method will evaluate a block at intervals when the program is otherwise idle. The block will continue to repeat at roughly the specified interval as long as the block returns the boolean true value when it is evaluated. In my simple Wii availability tracker, I used the following code:

Gtk.timeout_add(300 * 1000) do
  process_data
  true
end

It seems like the only places that have Wiis available right now are selling overpriced bundles. I probably wont be able to get one at a reasonable price until January, but at least my new utility will make it easier.


Posted on 2006-12-233 comments



Comments

nintendo wii

Hey Ryan did you ever get your nintendo wii?

Posted by Nintendo Wii at Sat Mar 08 03:01:43 PST 2008

when you do get it visit http://www.gorillaswap.com to find some cool games

Posted by Jay at Sat Mar 08 03:02:46 PST 2008

Watch what prices http://bestshoppy.com/happyshoppy/toys-videogames/video-games-console/nintendo/nintendo-wii-console/cat_167.html

Posted by Nintendo at Thu Jun 12 21:51:28 PDT 2008

Add a Comment

Name:

E-mail: (Optional, Not shown)

Subject: (Optional)

Text in image:

Comment: