<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-413710918055930893</id><updated>2011-11-27T16:43:54.337-08:00</updated><title type='text'>Ruby Expedition</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-5498855699898709635</id><published>2011-05-22T13:09:00.000-07:00</published><updated>2011-05-22T13:09:55.339-07:00</updated><title type='text'>Getting back into Ruby</title><content type='html'>My bad. I've been doing lots of stuff with Ruby on and off over the last few years. I haven't written much here. I'll try to change that soon.&lt;br /&gt;&lt;br /&gt;I'm re-acquainting myself with github. It looks like the last time I made a commit there was 2 years ago. I'm clearing that space now and refreshing it.&amp;nbsp; I will post an update here when I have dropped some new scripts there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-5498855699898709635?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/5498855699898709635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2011/05/getting-back-into-ruby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/5498855699898709635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/5498855699898709635'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2011/05/getting-back-into-ruby.html' title='Getting back into Ruby'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-4338702328644700546</id><published>2010-04-03T20:38:00.000-07:00</published><updated>2010-04-03T20:40:30.101-07:00</updated><title type='text'>Saving window position with FXRegistry and using those settings at startup</title><content type='html'>In my last post I described my discovery of where the FXRegistry settings are saved in the Windows Registry. &amp;nbsp;I used the 'imageviewer.rb' sample/example program code to help me figure out how to read/write these settings.&lt;br /&gt;&lt;br /&gt;I started off by simply using the x, y, width, height settings in my test app. &amp;nbsp;I found that the width and height settings were getting saved and retrieved correctly because the window size (when the app started) always matched what it was when it last closed. (good) &amp;nbsp;However, the window always started in the middle of the screen. (not so good) &amp;nbsp;Why is that?&lt;br /&gt;&lt;br /&gt;Many frustrating hours later of searching and tinkering, I eventually thought to start playing with the "show( PLACEMENT_SCREEN )" line of code in the application. &amp;nbsp;That was it!&lt;br /&gt;&lt;br /&gt;If you read the &lt;a href="http://www.fxruby.org/doc/api/classes/Fox/FXTopWindow.html"&gt;FXTopWindow API doc&lt;/a&gt;, you'll see a description of the &lt;b&gt;Initial window placement&lt;/b&gt; options. &amp;nbsp;In particular, I found these&amp;nbsp;three&amp;nbsp;interesting:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;PLACEMENT_SCREEN - place it centered on the screen&lt;/li&gt;&lt;li&gt;PLACEMENT_VISIBLE - place window to be fully visible&lt;/li&gt;&lt;li&gt;PLACEMENT_DEFAULT - place it at the default size and location&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;So, I replaced the 'show' command option in imageviewer.rb and here's what I noticed. (BTW, if you try this with the same sample program &lt;b&gt;make sure&lt;/b&gt; you &amp;nbsp;quit the program using CTRL+Q. Otherwise the settings won't get saved!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The imageviewer code includes PLACEMENT_SCREEN, and regardless of what 'position' settings you quit the app with, it will always open in the&amp;nbsp;centre&amp;nbsp;of the screen - just as advertised.&lt;br /&gt;&lt;br /&gt;I changed the line to use PLACEMENT_DEFAULT, and the window now opened exactly where I left it when it closed. &amp;nbsp;Yay! &amp;nbsp;That's exactly what I was expecting the code to do but it wasn't. &amp;nbsp;Anywhere in the primary or secondary monitor or even with the window app partially off the screen completely - it keeps appearing exactly where it last was.&lt;br /&gt;&lt;br /&gt;Then my 'tester' brain kicked in (because I'm a tester by trade, not a programmer) and I wondered if there was a way to prevent a user from exiting the app off-screen (i.e. where you can't see most of the app window at all) and having it open in the same spot, partially hidden off screen? &amp;nbsp;It seemed like a lot of icky code to check the x &amp;amp; y coordinates and enforce some kind of 'good' placement settings. &amp;nbsp;And it gets ickier when you consider that every monitor has different resolution settings, and multiple monitors and all that bother. &amp;nbsp;blah.&lt;br /&gt;&lt;br /&gt;So I tried PLACEMENT_VISIBLE. &amp;nbsp;This one was neat. &amp;nbsp;When I exited the app anywhere on screen, it opened the next time exactly where I left it. (good) &amp;nbsp;Then I tried exiting the app with the window partially or mostly hidden off screen, and when I start it the next time it pops on screen &lt;i&gt;close &lt;/i&gt;to where it was, except I can see the whole window -- i.e. it's "visible". &amp;nbsp;Therefore, working as advertised! (good!)&lt;br /&gt;&lt;br /&gt;I moved the app to my second monitor and exited the app and it appeared in the second monitor too. &amp;nbsp;The difference between this setting and PLACEMENT_DEFAULT is that with 'default' I can save the coordinates off-screen and that's where the window will next appear, but with 'visible' the window always appears in a way where you can see the whole app UI.&lt;br /&gt;&lt;br /&gt;Cool! &amp;nbsp;Problem solved. &amp;nbsp;I don't have to write and maintain a whole bunch of complex code to idiot-proof a minor, undocumented feature of my app. &amp;nbsp;=)&lt;br /&gt;&lt;br /&gt;The only thing left is to hopefully update the imageviewer.rb code so that it includes a different show/placement line so that it uses the x/y position settings it saves. &amp;nbsp;I'll forward this note to Lyle to see what he thinks.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-4338702328644700546?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/4338702328644700546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/04/saving-window-position-with-fxregistry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4338702328644700546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4338702328644700546'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/04/saving-window-position-with-fxregistry.html' title='Saving window position with FXRegistry and using those settings at startup'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-5086322530359028095</id><published>2010-04-03T19:46:00.000-07:00</published><updated>2010-04-03T19:55:23.283-07:00</updated><title type='text'>FXRegistry and the Windows Registry</title><content type='html'>Someone pointed me to the FXRegistry class when I was faced with the problem of trying to save/retrieve settings from the&amp;nbsp;FXRuby app I'm writing.&lt;br /&gt;&lt;br /&gt;I read the &lt;a href="http://www.fxruby.org/doc/api/classes/Fox/FXRegistry.html"&gt;FXRuby API docs&lt;/a&gt; but they didn't tell me much. &amp;nbsp;An internet search brought me to the &lt;a href="http://fox-toolkit.org/registry.html"&gt;Fox-Toolkit.org documentation page&lt;/a&gt;, and while more informative, I still didn't have clear examples of how to do this.&lt;br /&gt;&lt;br /&gt;Turns out the &lt;a href="http://www.fxruby.org/doc/examples.html"&gt;FXRuby User's Guide Examples Page&lt;/a&gt;&amp;nbsp;includes a program (imageviewer.rb) that uses FXRegistry to save/retrieve some settings. &amp;nbsp;That was beginning to help but I still had lots of questions. I found another example in chapter 12 of the FXRuby book ("FXRuby: Create Lean and Mean GUIs with Ruby" by Lyle Johnson). Section 12.3 talks about resizing layouts and I didn't care for that, but I did care about the fact that it saves and reads the settings from the registry. &amp;nbsp;The code for &lt;a href="http://media.pragprog.com/titles/fxruby/code/splitter.rb"&gt;splitter.rb is available online&lt;/a&gt;. (NOTE: this splitter.rb app is &lt;b&gt;&lt;i&gt;different&lt;/i&gt;&lt;/b&gt;&amp;nbsp;from the splitter.rb app you find in the FXRuby examples page and directory on your hard drive.)&lt;br /&gt;&lt;br /&gt;What did I learn from all this? &amp;nbsp;Settings are magically saved &lt;i&gt;somewhere&lt;/i&gt;, but no one could tell me exactly where in MS Windows. (I'm currently running/testing this on Windows XP.) &amp;nbsp;So I opened up '&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;regedit&lt;/span&gt;', ran the FXRuby apps and looked for the saved settings.&lt;br /&gt;&lt;br /&gt;Here's what I found.&lt;br /&gt;&lt;br /&gt;The 'splitter.rb' app saved the settings in: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;\HKEY_CURRENT_USER\Software\FoxDefault\Application\Settings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The 'imageviewer.rb' app saved the settings in: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;\HKEY_CURRENT_USER\Software\FoxTest\ImageViewer\...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Okay. So, I copied the registry commands from imageviewer.rb to my test app and ran it. &amp;nbsp;Where did the settings get saved? &amp;nbsp;Turns out they were saved in the same location as the splitter.rb. &amp;nbsp;Why? How do I change that? &amp;nbsp;How do I control &lt;i&gt;where&lt;/i&gt; the settings go?&lt;br /&gt;&lt;br /&gt;I noticed that there were other settings under the 'FoxTest' key in the Registry. &amp;nbsp;I ran a lot of sample code that I found on the net, and several of them must have written to the registry.&lt;br /&gt;&lt;br /&gt;I stared back and forth at the code for the 3 apps (mine, splitter and imageviewer) until it hit me - I found the difference and the answer I was looking for!&lt;br /&gt;&lt;br /&gt;If you look at the bottom of the imageviewer code, you will see the following line:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;application = FXApp.new("ImageViewer", "FoxTest")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I look at the splitter code, it looks slightly different:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;FXApp.new do |app|&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SplitterExample.new(app)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;app.create&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;app.run&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My source code looked like:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;application = FXApp.new&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aha! There it is!&lt;br /&gt;&lt;br /&gt;The imageviewer code specifies the application name in the 'FXApp.new' creation line and that is used in the FXRegistry key names. &amp;nbsp;The splitter code and my code didn't specify any names so it gets saved to "FoxDefault\Application".&lt;br /&gt;&lt;br /&gt;So, I changed my code to now read:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;application = FXApp.new( "TestApp", "FoxTest")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And I found the settings saved in:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;\HKEY_CURRENT_USER\Software\FoxTest\TestApp\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yay! &amp;nbsp;I now know where the FXRegistry settings are saved in Windows Registry and how to change the location. &amp;nbsp;Cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-5086322530359028095?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/5086322530359028095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/04/fxregistry-and-windows-registry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/5086322530359028095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/5086322530359028095'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/04/fxregistry-and-windows-registry.html' title='FXRegistry and the Windows Registry'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-8787405026611312641</id><published>2010-03-30T12:00:00.000-07:00</published><updated>2010-03-30T12:00:03.599-07:00</updated><title type='text'>FXRuby 'FRAME' type examples</title><content type='html'>I created a good working UI using foxGUIb 1.0.0 for an app that I've wanted to create for a while now. &amp;nbsp;The problem I have with the source code generated is that it's hard to customise. &amp;nbsp;When something doesn't look quite right, I'm competing with several layers for clarity and what I see in the generated source code doesn't match what I see built with the tool.&lt;br /&gt;&lt;br /&gt;I gave up trying to make it work for me and decided to just start from scratch with plain FXRuby. &amp;nbsp;I'm using the foxGUIb layout as my 'spec' or template to build the app using simpler code. &amp;nbsp;The problem now, of course, is that I don't know FXRuby and am learning it as I go. &amp;nbsp;Google is my friend, coupled with the many examples available from the FXRuby docs.&lt;br /&gt;&lt;br /&gt;While working with&amp;nbsp;FXGroupBox, I was trying to figure out what the different frameStyle types did. e.g. FRAME_GROOVE,&amp;nbsp;FRAME_LINE, &amp;nbsp;FRAME_RAISED,&amp;nbsp;FRAME_RIDGE, &amp;nbsp;FRAME_SUNKEN, FRAME_THICK, and&amp;nbsp;FRAME_NORMAL&lt;br /&gt;&lt;br /&gt;Google turned up &lt;a href="http://media.pragprog.com/titles/fxruby/code/labelexample3.rb"&gt;this example&lt;/a&gt; from the "FXRuby: Create Lean and Mean GUIs with Ruby" book. &amp;nbsp;I love online examples! =)&lt;br /&gt;&lt;br /&gt;Can you find the error in the code?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-8787405026611312641?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/8787405026611312641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/03/fxruby-frame-type-examples.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/8787405026611312641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/8787405026611312641'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/03/fxruby-frame-type-examples.html' title='FXRuby &apos;FRAME&apos; type examples'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-4505996805897930829</id><published>2010-03-02T19:14:00.000-08:00</published><updated>2010-03-02T19:29:12.271-08:00</updated><title type='text'>Enabling checkboxes in FXRuby</title><content type='html'>While playing around with FXRuby, I tried to create a form window where you could have an "Include All?" check box at the top that automatically enables/disables all the other options (check boxes) below.&lt;br /&gt;&lt;br /&gt;This turned out to be non-obvious to code for a non-programmer like me.  None of the FXRuby examples include code that does something like this.  Google didn't help and neither did the FXRuby book. (Although in all fairness, I only skimmed through the book and didn't read the whole thing.)&lt;br /&gt;&lt;br /&gt;I posted a request for some help to the FXRuby forum and a kind soul wrote up an example to do just that.  Rather than include the sample code in an email, he posted it online at: &lt;a href="http://pastebin.com/rPKJLC9r"&gt;http://pastebin.com/rPKJLC9r&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'd never heard of Pastebin.com until now. Seems like a cool place to drop random chunks of code that you can have others look over and help you get working.  I posted the link here so I can remember where to find it next time.&lt;br /&gt;&lt;br /&gt;Oh, and the FXRuby code example was perfect.  Just what I needed.  The sample code was an over-simplified version of what I needed to do but it was enough to help me understand the relationship between the objects and commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-4505996805897930829?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/4505996805897930829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/03/enabling-checkboxes-in-fxruby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4505996805897930829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4505996805897930829'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/03/enabling-checkboxes-in-fxruby.html' title='Enabling checkboxes in FXRuby'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-4718788351367846825</id><published>2010-02-24T08:50:00.000-08:00</published><updated>2010-02-24T09:28:49.464-08:00</updated><title type='text'>Creating UI's with Ruby</title><content type='html'>I began with Ruby years ago by writing scripts to help me test a web app.  I used &lt;a href="http://watir.com/"&gt;WATIR&lt;/a&gt; for that.  I will likely write more about Watir another time.&lt;br /&gt;&lt;br /&gt;It took me a while to figure out how to write and structure the scripts using whatever examples I found online.  It wasn't until I read Brian Marick's "&lt;span style="font-weight: bold;"&gt;Everyday Scripting with Ruby&lt;/span&gt;" that I really understood how to structure a ruby program.  Excellent book by the way - I highly recommend it!&lt;br /&gt;&lt;br /&gt;Over the years I accumulated quite the army of command-line programs/scripts and one thing I've wanted to do was figure out how to put a pretty UI/front-end on some of these scripts.&lt;br /&gt;&lt;br /&gt;Apparently with Ruby, you have a few different options - TK, FXRuby, Shoes, etc.&lt;br /&gt;&lt;br /&gt;I decided to settle on FXRuby since it's the only one that happens to be supported out-of-the-box with a clean Ruby install.  (Watch, I bet they'll remove it from a future distribution/release now that I've said that.)&lt;br /&gt;&lt;br /&gt;FXRuby is kind of neat.  The &lt;a href="http://www.fxruby.org/"&gt;main home page&lt;/a&gt; has some good documentation and examples to help get you started.&lt;br /&gt;&lt;br /&gt;I was able to easily create some simple apps, but then it gets kind of tough.  Working with FXRuby reminds me of the time I took a course in Japanese, some 20 years ago.  Nice language.  I picked up the alphabets, sentence structure and syntaxes and some of the vocabulary.  I got the basics but just couldn't piece together big sentences/conversations.  It just got too complicated for me.  I suppose if I'd gone to Japan or had more opportunity to practice that it would have gotten easier, but I didn't and it didn't.&lt;br /&gt;&lt;br /&gt;FXRuby's like that.  Looks simple on the surface, but make no mistake, you need to know how to &lt;span style="font-style: italic;"&gt;program&lt;/span&gt; to piece together a working app!  The examples are helpful, but what I want to do is somehow always a bit more complicated than the available examples.  Sigh.  If only it were easier to pull together a UI for such a friendly programming language.&lt;br /&gt;&lt;br /&gt;I discovered &lt;a href="http://fox-tool.rubyforge.org/"&gt;foxGUIb&lt;/a&gt; a few days ago.  That tool really helped me figure out the relationships between the various layout styles and elements to bring together a UI.  Unfortunately, I don't think I can use the code it generated, so I now have a pretty prototype with no working code underneath.&lt;br /&gt;&lt;br /&gt;Oh well.  Here's hoping that with practice it will get easier to do this sort of thing.  I've browsed all of the available GUI toolkits and they're all the same to me.  They start off with easy, Ruby'ishly-simple examples that try to hook you - then "WHAM!", insert programming jargon, hooks, classes and structures and "voila! there you go."  Easy as 1, 2, googolplex.&lt;br /&gt;&lt;br /&gt;Ruby I like.  All of the available toolkits to help you build UI's still seem very programmerish to me.  Not cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-4718788351367846825?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/4718788351367846825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/02/creating-uis-with-ruby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4718788351367846825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/4718788351367846825'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/02/creating-uis-with-ruby.html' title='Creating UI&apos;s with Ruby'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-3071598994511900364</id><published>2010-02-24T08:41:00.000-08:00</published><updated>2010-02-24T08:50:33.306-08:00</updated><title type='text'>5 Chapters of O’Reilly’s Ruby Best Practices – Free!</title><content type='html'>Came across a tweet today:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="status-body"&gt;&lt;strong&gt;&lt;a href="https://twitter.com/zeljkofilipin" class="tweet-url screen-name"&gt;zeljkofilipin&lt;/a&gt;&lt;/strong&gt;                      &lt;span class="actions"&gt;&lt;div&gt;      &lt;a id="status_star_9568718597" class="fav-action non-fav" title="favorite  this tweet"&gt;  &lt;/a&gt; &lt;/div&gt;&lt;/span&gt;         &lt;span class="entry-content"&gt;5 Chapters of O’Reilly’s &lt;a href="https://twitter.com/search?q=%23Ruby" title="#Ruby" class="tweet-url hashtag" rel="nofollow"&gt;#Ruby&lt;/a&gt; Best Practices –  Free! &lt;a href="http://bit.ly/aFhTcE" class="tweet-url web" rel="nofollow" target="_blank"&gt;http://bit.ly/aFhTcE&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Of course, I followed the link and discovered the RubyInside web site... and that yes, O'Reilly has made the first 5 chapters of 'Ruby Best Practices' available in PDF form online for free.&lt;br /&gt;&lt;br /&gt;I browsed them.  Boring.  Way to suck the life and passion out of a fun and cool programming language.&lt;br /&gt;&lt;br /&gt;I've collected a bunch of Ruby ebooks in PDF and CHM (Windows help file) format in my travels over the last few years.  I haven't read a single one of them.  Or rather, the benefit (for me) is in helping me do a quick electronic search through the text to see if there's something that will help me with whatever current programming problem I'm working on.&lt;br /&gt;&lt;br /&gt;I have a few books (sorry environmentalists, but I still prefer paper) that I use for reference and have a few that I still plan to read, but in general I've learnt programming by doing it.  Which is to say that I don't really know how to program so much as do creative and well-documented hacking. ;)&lt;br /&gt;&lt;br /&gt;I've got more to learn, but only as much as I need to learn to complete whatever projects I'm working on.  I'm not a programmer by trade so I will defer to the experts when I need to get some real work done.  God bless online forums!  =)&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-3071598994511900364?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/3071598994511900364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2010/02/5-chapters-of-oreillys-ruby-best.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/3071598994511900364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/3071598994511900364'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2010/02/5-chapters-of-oreillys-ruby-best.html' title='5 Chapters of O’Reilly’s Ruby Best Practices – Free!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-3036081038944625961</id><published>2009-08-19T20:50:00.000-07:00</published><updated>2009-08-19T20:53:50.791-07:00</updated><title type='text'>Rubular</title><content type='html'>ooooo... came across this just now by accident.  Really cool!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rubular.com/"&gt;Rubular&lt;/a&gt; - a Ruby regular expression editor.&lt;br /&gt;&lt;br /&gt;This is the first Ruby-centric regex checker that I've found.  Handy reference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-3036081038944625961?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/3036081038944625961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2009/08/rubular.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/3036081038944625961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/3036081038944625961'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2009/08/rubular.html' title='Rubular'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-2937489198764313313</id><published>2009-08-13T21:25:00.000-07:00</published><updated>2009-08-19T20:50:54.319-07:00</updated><title type='text'>Ugh!</title><content type='html'>Google is a blessing and a disappointment at the same time sometimes.  I got distracted looking for a routine today to solve a particular question I had.  I was looking for a simple (?) mathematical algorithm.  I found many pages on the Math - they were okay, but only helpful to a point.  And then I found some pages with sample Ruby code on them - great!&lt;br /&gt;&lt;br /&gt;Until I actually tried the code.  And read the code.  And then gagged myself with a spoon and completely rewrote the code.  I ended up with less than half of the total lines of code that I originally found on the 'net.  (BTW, I still don't know what the other half of the code was trying to do.  Really.)&lt;br /&gt;&lt;br /&gt;Why is it that almost all of the Ruby code samples out there (that I have come across) are written by non-Ruby programmers?  Their code is junk.  I'm sorry but anyone who takes Java, Perl or C  code (or whatever) and thinks they can do some simple translation to Ruby is sadly mistaken.&lt;br /&gt;&lt;br /&gt;It took me about 15 minutes of staring at a For-Next loop to discover that I could rewrite it with a .each do loop.  I was confused by the For-Next -- I hadn't seen one of those since the early 90's.  It was just really surreal code, you know?  Here I was looking at non-Ruby code that worked in Ruby.  Weird.&lt;br /&gt;&lt;br /&gt;Did it solve my problem?  Kinda sorta.  Rewriting the code into something intelligible gave me enough insight to write the remaining code I needed to answer my question.&lt;br /&gt;&lt;br /&gt;I debated whether or not to include some examples here (of the shoddy Ruby code) but I don't think I want to give any attention to some of the many poor programmers out there.  They clearly don't deserve any more mention than Google has already provided.  I'll think about posting some of my examples here when I get some free time though ... for balance.&lt;br /&gt;&lt;br /&gt;Note to the Ruby posers out there:  Just stop.  Please.  You're embarrassing yourselves.  It ain't a bandwagon.  If you don't get it, please stay away from the programming language translators.  Ruby ain't like the other languages - it puts humans first, not the machine.  Talk in &lt;span style="font-style: italic;"&gt;human&lt;/span&gt; terms, not computer jargon.  Ugh.&lt;br /&gt;&lt;br /&gt;I would have preferred to have gotten no (Google) hits and just posted the question to one of the helpful Ruby forums instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-2937489198764313313?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/2937489198764313313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2009/08/ugh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/2937489198764313313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/2937489198764313313'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2009/08/ugh.html' title='Ugh!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-1707608132091128194</id><published>2009-07-19T21:04:00.001-07:00</published><updated>2009-07-19T21:05:09.614-07:00</updated><title type='text'>Handy Ruby Quick Reference</title><content type='html'>Found this on the web last night:&lt;br /&gt;&lt;br /&gt;http://www.zenspider.com/Languages/Ruby/QuickRef.html&lt;br /&gt;&lt;br /&gt;Very handy in a pinch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-1707608132091128194?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/1707608132091128194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2009/07/handy-ruby-quick-reference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/1707608132091128194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/1707608132091128194'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2009/07/handy-ruby-quick-reference.html' title='Handy Ruby Quick Reference'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-413710918055930893.post-606440389189022502</id><published>2009-06-03T19:59:00.000-07:00</published><updated>2009-06-03T20:06:13.217-07:00</updated><title type='text'>This is not the start</title><content type='html'>It started 4 years ago with an idea.  3 years ago I discovered and started using &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;.  Really cool language.  About 4 months ago I came to decide that I'd like to learn how Ruby on Rails works.  2 months ago I discovered RubyLearning.org.&lt;br /&gt;&lt;br /&gt;I will be using this blog as a placeholder for all the ideas that I get on my journey to learn how to develop a web app and see where the experience takes me.&lt;br /&gt;&lt;br /&gt;It already began 15 minutes ago.  I'll bring you up to speed as I go along.  I gotta run..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/413710918055930893-606440389189022502?l=ruby-expedition.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ruby-expedition.blogspot.com/feeds/606440389189022502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ruby-expedition.blogspot.com/2009/06/this-is-not-start.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/606440389189022502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/413710918055930893/posts/default/606440389189022502'/><link rel='alternate' type='text/html' href='http://ruby-expedition.blogspot.com/2009/06/this-is-not-start.html' title='This is not the start'/><author><name>Paul</name><uri>http://www.blogger.com/profile/16826575269870573990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
