Archive for the ‘FXRuby’ Category

Moving On

When Jamis Buck wrote last year about ceasing development on Capistrano, his post really struck a chord with me. If this post reminds you of that one, it’s because I re-read it before sitting down to compose this one. It was the next best thing to having Jamis on hand to give me a pep talk before I had to stand up and say something that I’ve been putting off saying for too long. As a bonus, I could visualize him calmly and quietly making one of those neat little string figures while I tried decide exactly what it was I wanted to say.

It is with mixed feelings that I announce that I’m stepping away from FXRuby development, effective immediately. I will no longer be accepting bug reports, support requests, feature requests, or general emails related to FXRuby. I will continue to follow the mailing list, but I am no longer the maintainer of this project.

When I started developing FXRuby back in late 2000, it was a lot of fun for me. I was still new to Ruby (most of us were, back then) and Ruby was in need of a good GUI toolkit, so working on FXRuby provided me with not only a good way to learn the ins and outs of the language, but also to get really plugged into the community. In recent years, however, working on FXRuby has become a chore. I’m a decade older, at a different place in my life and career, and there are frankly just too many other things that I’d rather be working on at this point. These feelings are compounded by the fact that FOX development has, as best I can tell, stalled out, and without anything new to look forward to on the FOX front there’s little motivation for me to continue working on FXRuby. So it’s time to make a clean break and call it quits.

I would like to take this opportunity to thank everyone who did participate in the FXRuby community over the years. Knowing that you found my work of some value means a lot to me, and I appreciate the encouragement that I received from you along the way. I was never successful at organizing a development team around FXRuby, something which I regret, but a number of people contributed patches or third-party tools and extensions to FXRuby. If I tried to name all of those contributors, I would invariably leave someone off the list by accident, so let me just say: Thanks, you guys; you know who you are. A special thanks as well to those of you who bought the book. And of course, I owe an immense debt of gratitude to Jeroen van der Zijp, without whom there would be no FOX toolkit, and thus no FXRuby.

Someone on the mailing list asked whether FOX and FXRuby are “pretty much dead.” I can’t speak for Jeroen or the FOX project. As for FXRuby, however, that’s up to you. FXRuby is, and always has been, an open source project. If you are interested in hacking on FXRuby, or even taking over maintenance of the project, please feel free to fork the project on GitHub and release updates as you see fit. The Wiki has a lot of information about setting up a development and build environment on Windows, Linux and Mac OS X, and if you have specific questions about the build chain I’ll do my best to help you get set up.

If no one steps forward to maintain FXRuby, that’s fine too. The code has been pretty stable, if not bug-free, for quite awhile now, and it may the case that the code’s “done” anyways. If you feel that way and want to continue using FXRuby, it’s not going anywhere. If on the other hand, you have some fresh new ideas about how to move ahead, go for it! I will be cheering you on from the sidelines.

In closing, thanks again for all of your support over the last ten years. I’m certainly not done with Ruby, and I’m looking forward to exploring other ways in which I can participate in the Ruby community in the future.

Wait, what was that last bit?

So some of you may have seen the news about Gemcutter.org changing its name to RubyGems.org and becoming the new default gem repository for the Ruby community. I’m not completely clear yet on all the pros and cons of this move, but I do have to admit that the new site is pretty to look at. As a maintainer, I like the idea of being able to just type “gem push fxruby” (or whatever the command syntax is) and being done with it. So I think this will probably turn out to be a good thing.

Buried a few paragraphs down in the news, however, is this tidbit:

So, what does this mean for RubyForge? The Ruby-specific functionality and data will be moved into RubyGems.org, and the parts that other hosting sites (GitHub, Google Code, SourceForge) can do better will be pruned away.

In the comments, I asked for clarification on exactly what RubyForge services will be going away, and Tom Copeland’s reply seems to indicate (to me) that the answer is “everything”:

… We’re putting together a schedule for standing down (or making read-only) various bits of RubyForge. The thing is that now there are much better options for hosting code/forums/lists/files/etc, so that stuff is going to be retired. I think back in 2003 it made sense for the Ruby community to have a dedicated site for hosting that stuff. Now I don’t think it does… I think GitHub/Google Code/SourceForge can all do a better job at that, and Ruby Central doesn’t have to expend resources/time/money supporting functionality that others are doing better.

This is troubling to me since several FXRuby-related services (such as the web page hosting, bug tracker, and mailing lists) are handled by RubyForge, and have been for a long time now. For me, it’s not merely a question of, say, finding a new place to host the mailing lists. It’s also making a decision about what to do with the archives, and dealing with all of the non-readers who will go out their way to try to subscribe to the old lists even when they’re clearly marked as inactive and then send e-mails to me to ask why that’s so. But I know that Tom and company are sensitive to these concerns, and we’ll figure out a way to make the transition work as painlessly as possible, so I’m going to try not to be a grumpy old man about it.

So in the meantime, I’m beginning to consider what my post-RubyForge options are. Setting up a dedicated Redmine installation, as Jim Weirich has done for his projects, is an attractive option as it provides one-stop shopping (and I’ve had some experience with setting up Redmine for other projects already). Another option is to go with different sites targeted at the different services, like entp’s Lighthouse for bug tracking, maybe Google Groups for the mailing list hosting, and maybe piggybacking the static web site content off of my personal web site somehow (ugh). What about you, dear reader? If you’re hosting one of the 8,500 projects at RubyForge, what plans are you contemplating for RubyForge’s looming retirement?

Newly Supported Build Platforms for FXRuby (Coming Soon)

A long while has passed since the last release of FXRuby (in March 2009) and a couple of new platforms have appeared on the Ruby scene in the meantime. This post provides a brief status update on how support for those platforms is coming along.

One of those platforms is the new MinGW-based Ruby installer for Windows, which is quickly approaching its first release candidate. This is a really exciting development and while it’s not quite yet the official Ruby distribution on Windows, I don’t think that day is far off.

I actually quietly released a MinGW-compatible gem for FXRuby 1.6.19 a month or so ago, but there’s a little problem with it, which is that it’s only compatible with Ruby 1.8.6. If you’re running the MinGW build of Ruby 1.9.1, this gem isn’t going to work for you. That’s not a problem in and of itself, but it is a problem because the RubyGems installation process has no built-in smarts to distinguish between gems that only work with one Ruby version or another. Before someone jumps on that: Yes, I’m aware of the requiredrubyversion attribute for the gem specification. What I mean is, there’s no way to say, “I want to install the FXRuby gem for my platform, but make sure you get the one that was compiled for Ruby 1.9.1 and not the one compiled for Ruby 1.8.6.” The requiredrubyversion attribute seems to only be used to prevent you from installing an incompatible gem–it’s not something that the gems are indexed on.

The recommendation from Luis Lavena of the RubyInstaller project is to build what he calls a “fat” gem (as described here and here), one that includes multiple builds of FXRuby and that selects the “right” one at load time. This will naturally increase the gem’s size, but hey, disk space is cheap and it’s a proven solution to the problem. So I’m looking into this approach now and hope to incorporate it into my build process soon.

Another new platform is Mac OS 10.6 (aka Snow Leopard). For an operating system that’s just a little over a month old, you’d be surprised at how many people are already looking for an FXRuby gem for Snow Leopard. (Well, maybe I shouldn’t be surprised, given the Mac love in the Ruby community). This has been a little tricky because some of the tricks that I’d used in the past to build universal binaries on OS 10.5 (Leopard) didn’t work quite the same way under 10.6, but I think I’ve just solved that. If you’d like to help me test this, you can download a pre-release version of that gem here. Note that this is intended for use that the Ruby 1.8.7 that comes pre-installed with Snow Leopard. If you’ve built your own Ruby (as many folks do), this might work for you too, but if it does that’s just a nice bonus.

Once I’ve resolved the problems involved in supporting these two platforms, I’m planning to release FXRuby version 1.6.20. There won’t be that many functional improvements for those of you already using FXRuby 1.6.19, but it will help to prove out the new build process and re-stabilize things for future releases. I’ve also been doing a lot of work behind the scenes recently (since the move to GitHub) to make it easier for people to hack on FXRuby and contribute code back to the project, but that’s a subject for another post.

Free FXRuby Course Online at RubyLearning.org

Satish Talim has announced that RubyLearning.org will be offering a free online course entitled “FXRuby: A Quick Start”, beginning March 14, 2009. RubyLearning.org is, among other things, the recipient of a 2008 Shorty Award in Education.

Building Standalone FXRuby Applications with Exerb

Distributing FXRuby-based applications to end-users who don’t have Ruby (or FXRuby) installed on their computers can be a challenge. Fortunately, there are a number of freely available tools for building “standalone” versions of Ruby applications. In this post, we’re going to focus on how to use Exerb, developed by Yuya Kato, to build standalone FXRuby applications on Windows.

The first step is to download and install the latest Exerb distribution (version 4.2.0, as of this writing). It’s packaged as a ZIP file, which you’ll need to extract into some convenient place on your hard drive. Once that’s done, change directories into the exerb-4.2.0 directory and run the setup.rb script.

Now, to actually go through the process of building a standalone FXRuby application, let’s start with a simple example. We’ll use the hello.rb example program from the FXRuby source code distribution. The first step is to generate a “recipe” file for your Ruby application, which is basically a listing of all the files that Exerb should use to build the executable. You’ll use the mkexy tool to do this.

ruby -r exerb/mkexy hello.rb

The mkexy tool runs your application in a custom version of Ruby to analyze which libraries it requires while it’s running. Once you exit the application, mkexy spits out a recipe file (for this example, hello.exy) in the current working directory.

Now that you have a recipe, you’re ready to run Exerb to generate the executable.

exerb hello.exy

Note that the executable that Exerb creates is quite large, as it bundles both a copy of the Ruby interpreter as well as the FXRuby library code. When I did this experiment, the executable weighed in at close to 9 Mb. You can distribute this executable to other people who don’t have Ruby or FXRuby installed on their computers.

Now let’s look at a slightly more complicated example, the hello2.rb program. The complication is that this example uses an external file, a PNG icon that it loads from disk at runtime, as shown in this excerpt:

This is unfortunately something that Exerb doesn’t handle very well, but there is a workaround. What we must first do is dump the contents of the PNG icon to a Ruby string, and store the contents in a regular .rb file. Here’s some code to do that:

Now we need to modify the bit in hello2.rb that loads the icon data, so that it instead loads this Ruby code instead:

Now, run the mkexy tool as before to generate a recipe file (hello2.exy) and then exerb to generate the executable.

ruby -r exerb/mkexy hello2.rb exerb hello2.exy

There are at least a couple of other tools out there for building standalone Ruby applications, including Erik Veenstra’s RubyScript2Exe and Jeremy Hinegardner’s Crate. I’m not at all familiar with how those tools work, but if you’ve had luck building standalone FXRuby applications with either of these tools, I’d love to hear about your experience.

FXRuby 1.6.17 Now Available

Just in time for Christmas, a new release of FXRuby. It’s been almost six months since the last release, which is way too long to go between releases (even when it’s just for minor bug fixes). A summary of all the changes for this release can be found in the change log, but the most important change has to do with addressing some problems that were introduced when Ruby’s garbage collection algorithm was changed.

Online Training Course for FXRuby, YAML and ActiveRecord

  • levitra abuse
  • caverta levitra cialis veega lozenges propecia
  • viagra and cialis cheap
  • target pharmacy coupon
  • late period took clomid
  • chronic leg muscle pain
  • dog ate viagra tablet any danger
  • foreign websites viagra cialis levitra allpills
  • osteoporosis menopause
  • cialis drug generic propecia
  • retin-a cream
  • finasteride propecia and proscar
  • anemia and muscle pain
  • buy xenical and propecia online
  • tramadol cod saturday delivery
  • can a woman take levitra
  • clomid and multiple births
  • lower back muscle pain
  • xeloda breast cancer
  • denver fosamax attorneys
  • stop smoking medicine
  • kaiser pharmacy
  • tramadol withdrawal symptoms
  • levitra testamonials
  • order propecia on line
  • viagra india
  • does viagra causes indigestion
  • viagra patent lawsuit levitra
  • 100mg tramadol
  • patient assitance form for xeloda
  • tramadol withdrawal symptoms
  • avastin and xeloda
  • soma on line
  • uk viagra sales
  • ordering generic cialis from india
  • rx pharmacy cc
  • california levitra vardenafil hcl
  • cialis generic canada
  • viagra pill
  • roche drug xeloda
  • risperodol interactions with cialis viagra levitra
  • viagra online shop
  • cialis soft tablets
  • smoking cessation drugs
  • cialis prices
  • taxotere xeloda and tykerb
  • will propecia 1mg work
  • buy tadalafil online
  • cialis 5mg cheap
  • levitra description
  • viagra for doggies
  • us pharmacy cialis
  • westchester pharmacy
  • signs that propecia is working
  • levitra headache
  • buy propecia without a prescription
  • soma carisoprodol
  • where to buy the drug xeloda
  • levitra line site
  • shawala levitra
  • viagra ocular side effects
  • is cialis better than viagra
  • cialis how to prescribe
  • viagra cialis desire
  • xeloda pill
  • board canadian pharmacy
  • over the counter viagra alternatives
  • 6mg or 5mg propecia
  • cialis bathtub ads
  • levitra bloodpressure
  • levitra sex
  • viagro cialis holland
  • cialis now
  • generic propecia sales
  • flowers to send uk q propecia
  • acne scarring houston
  • aura soma
  • how to stop smoking
  • xeloda vomiting phenergan
  • purchase cialis
  • fda and human growth hormone
  • cialis and food consumption
  • cialis pictures results
  • feline acne
  • generic propecia fenesteride
  • cure for erectile disfunction
  • cialis free sample
  • lapatinib xeloda nejm
  • generic propecia effective
  • cialis eli lilly
  • menopause relief
  • levitra half life
  • hair loss remedy
  • cure for propecia side effects
  • tadalafil mexico
  • cialas
  • other side benefits of propecia
  • xeloda medicare
  • cialis viagra propecia levitra erectile dysfunction
  • pain pill addiction
  • severe acne
  • cheap prescription propecia
  • cialis 20 mg
  • ingredients in tramadol
  • clomid ovulation signs
  • breast cancer treated with xeloda
  • viagra on line uk
  • tadalafil generic apcalis
  • buying cialis online
  • hair propecia
  • women taking levitra
  • success rate of propecia for women
  • safe viagra alternatives
  • order levitra
  • cialis without a prescription
  • mail order for viagra tablets
  • cheap xeloda
  • alcohol with viagra
  • cialis cut in half
  • apcalis dysfunction erectile levitra viagra
  • cialis overnight
  • levitra couches spray paint
  • pet health pharmacy
  • hair growth with viagra
  • cialis user groups
  • tramadol hydrochloride
  • is generic propecia fda approved
  • pain medicine
  • best deal for propecia
  • synthroid pravachol nasacort propecia
  • purchase cialis online
  • arthritis pain treatment
  • uk propecia
  • online pharmacies for propecia finasteride
  • propecia for male baldness
  • zoloft levitra
  • cialis for woman
  • what ed cures work
  • followup post propecia
  • lowest prices cialis
  • buy cialis on line
  • natural viagra alternatives
  • best doses for propecia
  • is levitra safer than viagra
  • hip groin pain treatment
  • natural arthritis pain relief
  • price of xeloda at target
  • generic propecia mastercard
  • tadalafil generic cialis
  • try viagra for free
  • Ruby Learning has just announced the availability of an online training course for building GUI applications in Ruby, using FXRuby:
    You kept asking for it and so here it is – the new short, intensive, online course that helps you create UI’s using FXRuby and with YAML and ActiveRecord (with Migrations) helps you access a database.
    According to the announcement, registration is now open and the course begins on November 1 (so sign up now if you’re interested!). I don’t have any ties to this organization and have never participated in one of their courses, but if you have any feedback about this course I’d like to hear it.

    They’re Always Friendly and They’re Ready to Please

    I periodically use Google’s Blog Search tool to look for references to FXRuby, and today’s search turned up a couple of recent posts on a Chinese language blog. Curious to know what it was that this blogger was writing, and me not being able to read Chinese, I ran the pages through Google’s Translate service to see if I could get some idea.

    As is often the case with machine translation, the results were more humorous than enlightening. The closing line of the first entry translates as:

    Seems too long, put another log on the open bar.
    And then there’s this gem from the second post:
    The structure is so clear, I think if that is what MFC of the poor children who will have to see after that what the MFC threw it easy.
    All joking aside, the good news is that someone in China is taking the time to blog about FXRuby, and about the book (maybe they even paid for it!). It’s gratifying to think that people in other countries are reading what I’ve written.

    Easy Charts in FXRuby with the Google Chart API

    InfoQ has just published an article written by Matthew Bass that introduces the Google Chart API and the gchartrb library, which you can use to programmatically generate URLs for use with Google Chart. It’s very easy to use this library to generate charts in your FXRuby applications. First, install the gchartrb gem:

    $ sudo gem install gchartrb
    You’ll need to poke around the gchartrb documentation to decide just what kinds of charts are supported; for this example, we’ll just use a bar chart example from Matthew’s article:

    def bar_chart
      GoogleChart::BarChart.new('600x200', 'My Chart', :vertical) do |bc|
        bc.data 'Trend 1', [5,4,3,1,3,5], '0000ff'
        bc.data 'Trend 2', [1,2,3,4,5,6], 'ff0000'
        bc.data 'Trend 3', [6,5,4,4,5,6], '00ff00'
      end
    end

    The toescapedurl method for the BarChart object returns a URL from which we can retrieve the chart image data in PNG format. We can in turn use that data to construct an FXPNGImage, and place it inside an FXImageFrame:

    FXImageFrame.new(self, nil, :opts => LAYOUT_FILL) do |f|
      f.image = FXPNGImage.new(app, open(bar_chart.to_escaped_url, "rb").read)
    end

    The result is a nice little bar chart, as shown here:

    google_charts_demo.png

    For reference, here’s the complete program:

    FXRuby in the News

    The FXRuby book has been available for a few weeks now and some of the early reviews are beginning to come in, so I wanted to do a quick roundup of what people are saying about it:

    • Peter Cooper reviewed the book for the popular Ruby Inside blog, saying “Windows and Linux Ruby developers could find FOX, FXRuby and this book an excellent path into developing GUI applications with Ruby.”
    • Werner Schuster of InfoQ interviewed me about FOX, and the implementation of FXRuby. This article includes a special exclusive chapter from the new book.
    • Jesper de Jong reviewed the book and gave it 8 out of 10 horseshoes, writing “I like the way the book is set up; if you’re new to FXRuby, like I was when I started reading the book, then the first part is a nice and easy tutorial, and the second part is a good reference to most of FXRuby’s features if you’re using it in your own applications. So the book is useful for beginners and experienced users alike.”

    If you’re interested in reviewing the book for your web site, blog, podcast, newsletter or public access television show, please let me know!