<?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-3105545392197418648</id><updated>2011-11-27T16:55:53.755-08:00</updated><category term='Reference'/><category term='JRoR'/><category term='Nits'/><category term='OffRails'/><category term='JRuby'/><category term='Tricks'/><category term='Meta'/><category term='Brown'/><title type='text'>Angry Ruby</title><subtitle type='html'>just because I use it doesn't mean I have to like it</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-3705500423675855793</id><published>2009-08-04T05:29:00.001-07:00</published><updated>2009-08-04T05:30:26.315-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>Ruby stands or falls with JRuby?</title><content type='html'>Headius makes an &lt;a href="http://blog.headius.com/2009/07/jrubys-importance-to-ruby-and-erubycon.html"&gt;interesting argument&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I believe that JRuby is the most crucial technology for Ruby's future right now. Regardless of how fast or how solid the C or C++ based Ruby implementations get, the vast majority of large organizations are *never* going to run them. That's the truth. If we can leverage JRuby to grab 1-2% of the Java market, we'll *double* the size of the Ruby community. If we completely lose the Java platform to alternatives, Rubyists may not have the luxury of remaining Rubyists in the future. It's that big a deal.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-3705500423675855793?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/3705500423675855793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=3705500423675855793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3705500423675855793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3705500423675855793'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2009/08/ruby-stands-or-falls-with-jruby.html' title='Ruby stands or falls with JRuby?'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5566498611894633532</id><published>2008-10-31T16:53:00.000-07:00</published><updated>2008-10-31T16:58:08.719-07:00</updated><title type='text'>Headius on FFI</title><content type='html'>As usual &lt;a href="http://blog.headius.com/2008/10/ffi-for-ruby-now-available.html"&gt;Headius is the shit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;FFI stands for Foreign Function Interface. FFI has been implemented in various libraries; one of them, libffi, actually serves as the core of JNA, allowing Java code to load and call arbitrary C libraries. libffi allows code to load a library by name, retrieve a pointer to a function within that library, and invoke it, all without static bindings, header files, or any compile phase.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Take that SWIG! Although IIRC, .NET (including Mono) had some this sort of coolness as well.&lt;br /&gt;&lt;br /&gt;To break it down&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;A simple FFI script calling the C "getpid" function:&lt;br /&gt;&lt;br /&gt;require 'ffi'&lt;br /&gt;&lt;br /&gt;module GetPid&lt;br /&gt;  extend FFI::Library&lt;br /&gt;&lt;br /&gt;  attach_function :getpid, [], :uint&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5566498611894633532?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5566498611894633532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5566498611894633532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5566498611894633532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5566498611894633532'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/10/headius-on-ffi.html' title='Headius on FFI'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1970458638703823959</id><published>2008-10-12T17:12:00.000-07:00</published><updated>2008-10-12T17:14:59.480-07:00</updated><title type='text'>Nanite: Ruby Cloud Computing</title><content type='html'>Over on &lt;a href="http://www.rubyinside.com/nanite-self-assembling-cluster-of-ruby-daemons-1245.html"&gt;Ruby Inside&lt;/a&gt; Peter blogs on &lt;a href="http://github.com/ezmobius/nanite/tree/master/README"&gt;Nanite&lt;/a&gt; which really looks interesting -- not that I'll have any time to play around with it anytime soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1970458638703823959?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1970458638703823959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1970458638703823959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1970458638703823959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1970458638703823959'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/10/nanite-ruby-cloud-computing.html' title='Nanite: Ruby Cloud Computing'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1308466856625895236</id><published>2008-10-05T09:49:00.000-07:00</published><updated>2008-10-05T09:50:55.248-07:00</updated><title type='text'>Ruby HTTP Client Performance</title><content type='html'>Courtesy of &lt;a href="http://www.rubyinside.com/ruby-18s-dismal-nethttp-performance-1226.html"&gt;Ruby Inside&lt;/a&gt; there is a pretty interesting &lt;a href="http://apocryph.org/analysis_ruby_18x_http_client_performance"&gt;analysis of Ruby 1.8.x client performance&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Ruby’s Net::HTTP implementation blows. It’s a bit better in 1.8.7 with the new 16K buffer size, but the timeout implementation has got to go. Even with timeout eliminated, Net::HTTP is trounced by the pure-Ruby rfuzz and the native/Ruby blend curb, suggesting that timeout notwithstanding, there are other inefficiencies in Net::HTTP. Looking at the protocol.rb code, I’m struck by how painfully inefficient the implementation is with buffers. rfuzz and curb minimize buffer copies and my rfuzz streaming HTTP extension reuses the same buffer for multiple calls, while Net::HTTP is happily appending and sliceing away at arrays.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1308466856625895236?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1308466856625895236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1308466856625895236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1308466856625895236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1308466856625895236'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/10/ruby-http-client-performance.html' title='Ruby HTTP Client Performance'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7142066352955995166</id><published>2008-09-24T07:38:00.000-07:00</published><updated>2008-09-24T07:45:43.210-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nits'/><title type='text'>Headius and the Elephant</title><content type='html'>At Cisco we used to have the phrase "No Technology Religion" on our badges and although this is easier said than done, it is the thought that counts (to double up on cliches).&lt;br /&gt;&lt;br /&gt;It is the religious fervor (intolerance of diversity and the belief in one path to enlightenment vs. many ways to climb the mountain) that seems to be one of the differences. between between the Python &amp; Ruby communities:&lt;br /&gt;&lt;br /&gt;The is illustrated in the &lt;a href="http://blog.headius.com/2008/09/elephant.html"&gt;The Elephant&lt;/a&gt; from earlier this month:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I don't see this in the Python community, for example, which might surprise some Rubyists. Pythonistas seem to have positively embraced both IronPython and Jython. There's no side-chatter at the conferences about the evils of anything with a J in it. There's no mocking slides, no jokes at Jython or IronPython developers' expense. No "Python elite" cliques actively working to shut Jython or IronPython out, or to discourage others from considering them. The community as a whole--Guido included--seems to be genuinely thankful for implementation diversity. Even if one of them does have a J in it.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7142066352955995166?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7142066352955995166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7142066352955995166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7142066352955995166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7142066352955995166'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/09/headius-and-elephant.html' title='Headius and the Elephant'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-6171755189183762855</id><published>2008-07-01T17:20:00.000-07:00</published><updated>2008-07-01T17:21:30.877-07:00</updated><title type='text'>Matasano on Ruby Vuln Handling</title><content type='html'>A &lt;a href="http://www.matasano.com/log/1079/rubys-vulnerability-handling-debacle/"&gt;must read&lt;/a&gt; if you need something to be angry about.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Developers relying on any of these frameworks are then faced with a difficult choice: wait an indeterminate amount of time for a good release from the official maintainers (and remain vulnerable in the meantime), or apply a patch from a third-party which may not plug all the security holes, or may include unforeseen bugs. This is clearly a problem. In the meantime maintainers have to scramble to get ruby back to a good state that actually plugs the holes while people complain. Everyone loses.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-6171755189183762855?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/6171755189183762855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=6171755189183762855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6171755189183762855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6171755189183762855'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/07/matasano-on-ruby-vuln-handling.html' title='Matasano on Ruby Vuln Handling'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7985408167728050753</id><published>2008-05-26T14:54:00.000-07:00</published><updated>2008-05-26T14:57:04.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>21 Ruby Tricks</title><content type='html'>Haven't blogged here forever (mostly using Python these days, although I did break into some JRuby a couple of weeks back to avoid Java coding) but definitely check out &lt;a href="http://www.rubyinside.com/21-ruby-tricks-902.html"&gt;21 Ruby Tricks from Peter Cooper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Regex, Array Joins, file operations, and more&lt;br /&gt;Good stuff..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7985408167728050753?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7985408167728050753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7985408167728050753' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7985408167728050753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7985408167728050753'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/05/21-ruby-tricks.html' title='21 Ruby Tricks'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-3500156902741160744</id><published>2008-04-27T20:32:00.000-07:00</published><updated>2008-04-27T20:40:42.081-07:00</updated><title type='text'>Headius on the Peril</title><content type='html'>&lt;a href="http://headius.blogspot.com/2008/04/promise-and-peril-for-alternative-ruby.html"&gt;The Promise and Peril of Alternative Implementations&lt;/a&gt; is a must read, if only for his detailed summary of the Ruby implementations out there, but on the peril's:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JRuby&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Compatibility is *hard*. I'm not talking a little hard, I'm talking monumentally hard. Ruby is a very flexible, complicated language to implement, and it ships with a number of very flexible, complicated core class implementations. Very little exists in the way of specifications and test kits, so what we've done with JRuby we've done by stitching together every suite we could find. And after all this time, we still have known bugs and weekly reports of minor incompatibilities. I don't think an alternative implementation can ever truly become "compatible" as much as "more compatible". We're certainly the most compatible alternative impl, and even now we've got our hands full fixing bugs. Then there's Ruby 1.9 support, coming up probably in JRuby 1.2ish. Another adventure.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IronRuby&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;But there's some peril here too. IronRuby is largely still being developed in a vacuum. Perhaps in order to have secrets to announce at "the next big conference" or perhaps because Microsoft's own policies require it, IronRuby's development process proceeds largely from all-internal commits, all-internal discussions, and all-internal emails that periodically result in a blob of code tossed over the fence to external contributors. The OSS story has improved, since those of us on the outside can actually get access to the code, but the necessary two-way street still isn't there. That's going to slow progress, and eventually could make it impossible for IronRuby to keep up as resources are moved to other projects at Microsoft. JRuby has managed to sustain for as long as it has with only two fulltime developers entirely because of our community and openness, and indeed JRuby would never have been possible without a fully OSS process.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Say I wonder if anyone has written a Ruby implementation in Python, hehe&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Have you started working on your Ruby implementation yet? All the cool kids are doing it. It's remarkable how many implementations of Ruby are in the works right now. It remains to be seen whether the ecosystem can support such diversity in the long term, but at the very least they're introducing splendid variation. And there's a lot more to do with Ruby in terms of performance, scaling, and "getting things done". Ruby's future is looking bright, in no small part due to the many implementations. How's your favorite language looking?&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-3500156902741160744?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/3500156902741160744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=3500156902741160744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3500156902741160744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3500156902741160744'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/04/headius-on-peril.html' title='Headius on the Peril'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5250924948410740581</id><published>2008-04-25T23:09:00.000-07:00</published><updated>2008-04-25T23:19:59.891-07:00</updated><title type='text'>Sad to Say It But I miss Ruby</title><content type='html'>So I'm writing a quick CRUD app for work and I decided to go with Django mainly because of the power of the built in Admin interface. This is not a real app. I just wanted to get some data in a database and maybe generate some simple reports, so Rails didn't make sense. It would take too long. Plus, following the Django tutorial for the umteenth time during the last couple of years gave me 80% of the functionality I needed in just a few hours. Yeah Django migrations are non-existent and there is not Model inheritance, but since this isn't a real app (basically something quick where a wiki or Excel wouldn't do) I was left with no choice.&lt;br /&gt;&lt;br /&gt;But I definitely miss the density of Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5250924948410740581?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5250924948410740581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5250924948410740581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5250924948410740581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5250924948410740581'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/04/sad-to-say-it-but-i-miss-ruby.html' title='Sad to Say It But I miss Ruby'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7339916314768470110</id><published>2008-03-03T19:18:00.000-08:00</published><updated>2008-03-03T19:38:03.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Brown'/><title type='text'>Yeah, I'd Give Greg Brown Sixty Bucks</title><content type='html'>And I'm not being sarcastic, either. Maybe it would just be a vicarious pleasure because with 3 kids, a year oold Honda Minivan and overpriced Skokie house there is no way in hell I could live on $2000/month. Or maybe because there's a bunch of cool Python (non-web) libraries that should be ported to Ruby. If I'm willing to give Obama $50 I'm certainly willing to give &lt;a href="http://www.oreillynet.com/ruby/blog/2008/03/id_love_to_quit_my_job_sort_of.html"&gt;Greg Brown $60 To work on Open Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I find myself in a rather unique situation: Single, living alone in a small studio apartment, only taking a class or two here and there, and basically living off of small contracts. It’s not that I’m not offered big gigs, or that I couldn’t go back to school full time if I really wanted to, I just find I enjoy living a simple lifestyle that lets me spend a lot of time on community oriented projects, especially Ruby stuff.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7339916314768470110?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7339916314768470110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7339916314768470110' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7339916314768470110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7339916314768470110'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/03/yeah-id-give-greg-brown-sixty-bucks.html' title='Yeah, I&apos;d Give Greg Brown Sixty Bucks'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-2899588298375751558</id><published>2008-02-23T17:34:00.000-08:00</published><updated>2008-02-23T17:37:58.318-08:00</updated><title type='text'>RUSH is On To Something</title><content type='html'>Courtesy of &lt;a href="http://www.rubyinside.com/rush-a-ruby-shell-that-abstracts-system-operations-into-ruby-ones-765.html"&gt;Ruby Inside&lt;/a&gt; I ran across &lt;a href="http://adam.blog.heroku.com/past/2008/2/19/rush_the_ruby_shell/"&gt;Rush: The Ruby Shell&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;What we really want - the modern way - is to query the unix system (filesystem, processes, network, services) as if they were a database. This avoids the fragility of text pipes, the complexities of firing up a complete new environment on each system call, and would allow unit tests of system-level code.&lt;br /&gt;&lt;br /&gt;This is why I've created rush. It's a replacement for bash and ssh which uses Ruby syntax. More than that: it IS ruby. Imagine an irb shell in which you can do everything you can do at the unix command line, but without any backticks. That's the vision; what I've got so far is a good start in that direction.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-2899588298375751558?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/2899588298375751558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=2899588298375751558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2899588298375751558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2899588298375751558'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/02/rush-is-on-to-something.html' title='RUSH is On To Something'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-6031743379991332521</id><published>2008-02-08T05:25:00.000-08:00</published><updated>2008-02-08T05:28:02.690-08:00</updated><title type='text'>RubyCHeatSheetPalooza</title><content type='html'>&lt;a href="http://www.rubyinside.com/ruby-cheat-sheet-734.html"&gt;Courtesy of Ruby Inside&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-6031743379991332521?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/6031743379991332521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=6031743379991332521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6031743379991332521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6031743379991332521'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/02/rubycheatsheetpalooza.html' title='RubyCHeatSheetPalooza'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5730930625579872276</id><published>2008-01-01T12:37:00.000-08:00</published><updated>2008-01-01T12:42:58.875-08:00</updated><title type='text'>Now this guy is really angry (and also switching back to Python)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://zedshaw.com/logo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://zedshaw.com/logo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zedshaw.com/rants/rails_is_a_ghetto.html"&gt;Rails is a Ghetto&lt;/a&gt; is even harsher than anything I've written here:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;This is that rant. It is part of my grand exit strategy from the Ruby and Rails community. I don’t want to be a “Ruby guy” anymore, and will probably start getting into more Python, Factor, and Lua in the coming months. I’ve got about three or four more projects in the works that will use all of those and not much Ruby planned.&lt;br /&gt;&lt;br /&gt;This rant is full of stories about companies and people who’ve either pissed in my cheerios somehow or screwed over friends. I can back all of them up from emails, IRC chat logs, or with witnesses. Nothing in here is a lie unless it’s really obviously a lie through exaggeration, and there’s a lot of my opinion as well.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hat Tip: &lt;a href="http://www.oreillynet.com/ruby/blog/2008/01/zeds_so_expletive_awesome.html"&gt;Mr. Brown&lt;/a&gt; and &lt;a href="http://www.almostserio.us/articles/2007/12/31/zed-is-so-ghetto"&gt;response to Zed&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hey wasn't Zed in Pulp Fiction?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5730930625579872276?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5730930625579872276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5730930625579872276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5730930625579872276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5730930625579872276'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2008/01/now-this-guy-is-really-angry-and-also.html' title='Now this guy is really angry (and also switching back to Python)'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1253791008338822843</id><published>2007-11-28T22:25:00.000-08:00</published><updated>2007-11-28T22:39:21.808-08:00</updated><title type='text'>Where is the PSI for Ruby?</title><content type='html'>About every 6 months a Google recruiter will run across my LinkedIn page and try to trick me into starting the grueling 2-3 month interview process. Why anyone with a job already would put themselves through this is beyond me, but it did get me thinking about Python again and to catch up on my &lt;a href="http://pypi.python.org/pypi"&gt;Python Package Index Feed&lt;/a&gt; (which kicks RubyForge's ass, BTW) and I ran across the &lt;a href="http://www.psychofx.com/psi/trac/wiki/"&gt;Python System Information&lt;/a&gt;. I had to write this sort of stuff (and more) in Ruby about 6 months ago. That is the different between Python (and grudgingly Perl, gag) and Ruby. Some sort of mainstream task is probably already done (and relatively)&lt;br /&gt;&lt;br /&gt;Not that I'm complaining&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &gt;&gt;&gt; import psi&lt;br /&gt;&lt;br /&gt;  &gt;&gt;&gt; a = psi.arch.arch_type()&lt;br /&gt;  &gt;&gt;&gt; a&lt;br /&gt;  &lt;psi.arch.ArchMacOSX object type='Darwin'&gt;&lt;br /&gt;  &gt;&gt;&gt; isinstance(a, psi.arch.ArchMacOSX)&lt;br /&gt;  True&lt;br /&gt;  &gt;&gt;&gt; isinstance(a, psi.arch.ArchDarwin)&lt;br /&gt;  True&lt;br /&gt;  &gt;&gt;&gt; a.sysname&lt;br /&gt;  'Darwin'&lt;br /&gt;  &gt;&gt;&gt; a.nodename&lt;br /&gt;  'laptop'&lt;br /&gt;  &gt;&gt;&gt; a.release&lt;br /&gt;  '8.9.1'&lt;br /&gt;  &gt;&gt;&gt; a.version&lt;br /&gt;  'Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386'&lt;br /&gt;  &gt;&gt;&gt; a.machine&lt;br /&gt;  'i386'&lt;br /&gt;&lt;br /&gt;  &gt;&gt;&gt; psi.loadavg()&lt;br /&gt;  (0.705078125, 0.73046875, 0.7626953125)&lt;br /&gt;&lt;br /&gt;  &gt;&gt;&gt; import os&lt;br /&gt;  &gt;&gt;&gt; mypid = os.getpid()&lt;br /&gt;  &gt;&gt;&gt; mypid&lt;br /&gt;  13903&lt;br /&gt;  &gt;&gt;&gt; p = psi.process.Process(mypid)&lt;br /&gt;  &gt;&gt;&gt; p.command&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1253791008338822843?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1253791008338822843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1253791008338822843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1253791008338822843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1253791008338822843'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/11/where-is-psi-for-ruby.html' title='Where is the PSI for Ruby?'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5918525226920501976</id><published>2007-10-12T14:57:00.000-07:00</published><updated>2007-10-12T15:00:49.061-07:00</updated><title type='text'>Cool Ruby Logfile Visualization Tool</title><content type='html'>Check out &lt;a href="http://www.fudgie.org/"&gt;glTail.rb&lt;/a&gt; (there is even a movie) that I stumbled across courtesy of &lt;a href="http://www.rubyinside.com/gltail-sexy-log-file-visualization-using-ruby-627.html"&gt;Peter Cooper over on Ruby Inside&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;glTail is a great little Ruby script by Erlend Simonsen (aka Fudgie) that uses OpenGL and Ruby to visualize the events taking place in log files in real time. An example video on the official site shows requests coming into an HTTP server, each represented by a "ball" which is thrown across the screen. The script uses net-ssh to connect to a server and then libopengl-ruby to output the graphics. Parsers are included for processing Apache, Rails, IIS and Postfix log files. Nice work! The code is merely a couple hundred lines of Ruby, so if you've fancied putting together a basic OpenGL app, it's worth looking at it for that reason too.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I can't wait to try it on a few gigs of firewall logs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5918525226920501976?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5918525226920501976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5918525226920501976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5918525226920501976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5918525226920501976'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/10/cool-ruby-logfile-visualization-tool.html' title='Cool Ruby Logfile Visualization Tool'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-3037032818131408872</id><published>2007-09-28T07:50:00.000-07:00</published><updated>2007-09-28T07:57:16.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><title type='text'>Trying out jrubyc</title><content type='html'>Following up the &lt;a href="http://headius.blogspot.com/2007/09/compiler-is-complete.html"&gt;good news&lt;/a&gt;, I pulled down trunk, and compiled a stupid 2 line script. This obviously is no test of the compiler, but the first time I've used jrubyc. Above and beyond the normal JRUBY environment stuff, to execute classes you have to add jna.jar and jruby.jar to your CLASSPATH.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-g4:~/jruby/jruby/trunk/jruby/bin mdfranz$ java bobo&lt;br /&gt;1.1&lt;br /&gt;java&lt;br /&gt;franz-g4:~/jruby/jruby/trunk/jruby/bin mdfranz$ ls -al bobo.class &lt;br /&gt;-rw-r--r--   1 mdfranz  mdfranz  2866 Sep 28 09:43 bobo.class&lt;br /&gt;franz-g4:~/jruby/jruby/trunk/jruby/bin mdfranz$ cat bobo.rb &lt;br /&gt;puts JRUBY_VERSION&lt;br /&gt;puts RUBY_PLATFORM&lt;br /&gt;franz-g4:~/jruby/jruby/trunk/jruby/bin mdfranz$ echo $CLASSPATH&lt;br /&gt;:/Users/mdfranz/java/lib/hsqldb.jar:/Users/mdfranz/java/db-derby-10.3.1.4-bin/lib/derby.jar:/Users/mdfranz/java/db-derby-10.3.1.4-bin/lib/derbytools.jar:.:/Users/mdfranz/jruby/jruby/trunk/jruby/lib/jruby.jar:/Users/mdfranz/jruby/jruby/trunk/jruby/lib/jruby.jar:/Users/mdfranz/jruby/jruby/trunk/jruby/lib/jna.jar&lt;br /&gt;franz-g4:~/jruby/jruby/trunk/jruby/bin mdfranz$ echo $JRUBY_HOME&lt;br /&gt;/Users/mdfranz/jruby/jruby/trunk/jruby&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-3037032818131408872?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/3037032818131408872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=3037032818131408872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3037032818131408872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3037032818131408872'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/trying-out-jrubyc.html' title='Trying out jrubyc'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1349280944363587440</id><published>2007-09-26T23:42:00.000-07:00</published><updated>2007-09-26T23:53:54.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>If you are angry enough you might get a book!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MPIoEEC-IC0/RvtTYsCwGMI/AAAAAAAAAJY/qZCWydeCsn8/s1600-h/olabook.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_MPIoEEC-IC0/RvtTYsCwGMI/AAAAAAAAAJY/qZCWydeCsn8/s200/olabook.png" alt="" id="BLOGGER_PHOTO_ID_5114773485413996738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So I was pleased to learn that I will be receiving a review copy of &lt;a href="http://apress.com/book/view/9781590598818"&gt;Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java&lt;/a&gt;. Thanks &lt;a href="http://ola-bini.blogspot.com/"&gt;Ola&lt;/a&gt; if you had anything to do with it!&lt;br /&gt;&lt;br /&gt;No time (and probably not qualified) right now to do a real review, but I will say that Chapter 6 (Java Integration) and the Appendix B (JRuby Reference) are probably worth the 21 bucks for the e-version of the book, even if you don't plan on doing any JRoR work right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1349280944363587440?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1349280944363587440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1349280944363587440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1349280944363587440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1349280944363587440'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/if-you-are-angry-enough-you-might-get.html' title='If you are angry enough you might get a book!'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MPIoEEC-IC0/RvtTYsCwGMI/AAAAAAAAAJY/qZCWydeCsn8/s72-c/olabook.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-2282268847356022306</id><published>2007-09-25T17:58:00.000-07:00</published><updated>2007-09-25T18:32:20.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Nits'/><title type='text'>JRuby Enum Constants and my irrational fear of ::'s</title><content type='html'>So development on &lt;a href="http://peertab.blogspot.com/"&gt;PeerTAB&lt;/a&gt; is rolling along. Sort of. I am continuing to play with JXTA via JRuby.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So in Java&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;manager = new NetworkManager(NetworkManager.ConfigMode.EDGE, "HelloWorld");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;But of course in JRuby&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;include_class "net.jxta.platform.NetworkManager"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;m = NetworkManager.new(NetworkManager.ConfigMode.EDGE, "HelloWorld")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;fails with&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;irb(main):010:0&gt; NetworkManager.ConfigMode&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NoMethodError: undefined method `ConfigMode' for Java::NetJxtaPlatform::NetworkManager:Class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from (irb):10:in `binding'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:150:in `eval_input'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `signal_status'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:147:in `eval_input'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `each_top_level_statement'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `loop'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `catch'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `eval_input'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `start'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from :1:in `catch'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from /home/jxta/jruby-1.0.1/lib/ruby/1.8/irb.rb:69:in `start'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        from :1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So the question then I how do I get these &lt;a href="http://threatmind.net/jxta/doc/api/net/jxta/platform/NetworkManager.ConfigMode.html#enum_constant_summary"&gt;enum constants?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So interestingly enough&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;irb(main):020:0&gt; NetworkManager.constants&lt;br /&gt;=&gt; ["ConfigMode"]&lt;br /&gt;irb(main):021:0&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But that did get me anywhere and it was only until I ran across &lt;a href="http://lastmind.net/2007/02/using-java-enum-constants-in-jruby.html"&gt;this blog post&lt;/a&gt; that I figured it out.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;irb(main):011:0&gt; NetworkManager::ConfigMode&lt;br /&gt;=&gt; Java::NetJxtaPlatform::NetworkManager::ConfigMode&lt;br /&gt;irb(main):012:0&gt; NetworkManager.constants&lt;br /&gt;=&gt; ["ConfigMode"]&lt;br /&gt;irb(main):013:0&gt; NetworkManager.constants.class&lt;br /&gt;=&gt; Array&lt;br /&gt;irb(main):014:0&gt; NetworkManager::ConfigMode::EDGE&lt;br /&gt;=&gt; #&lt;java::netjxtaplatform::networkmanager::configmode:0x1ff92f5 java_object="EDGE"&gt;&lt;br /&gt;irb(main):015:0&gt;&lt;br /&gt;&lt;br /&gt;And I know part of the problem is I refuse to use :: unless I'm forced to because it seems way too Perl-ish and ugly. And yeah, I've heard there is something called C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-2282268847356022306?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/2282268847356022306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=2282268847356022306' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2282268847356022306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2282268847356022306'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/jruby-enum-constants-and-my-irrational.html' title='JRuby Enum Constants and my irrational fear of ::&apos;s'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1919727582376573751</id><published>2007-09-24T18:12:00.000-07:00</published><updated>2007-09-24T18:31:48.745-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><title type='text'>Interesting Bruce Tate Podcast</title><content type='html'>I listened to &lt;a href="http://paranode.com/%7Etopfunky/audio/2007/rails-055-erubycon-bruce-tate.mp3"&gt;Robert Stephenson's interview with Bruce Tate&lt;/a&gt; while washing dishes tonight and it was certainly a treat and certainly kept my mind occupied while cleaning up the minestrone remnants:&lt;br /&gt;&lt;br /&gt;Among the highlights:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How development in Rails (and I would add comparable frameworks such as Django) allows smaller teams to communicate more effectively (and frequently) with clients than would be possible with "traditional" languages such a Java.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The high correlation between offshoring/outsourcing and traditional (waterfall) development models (if you outsource something you have to be more rigorous in the your specification, your unit testing, integration, etc.)&lt;/li&gt;&lt;li&gt;Lots of talk about JRuby and positing that much of the work we do is essentially scripting. Use of JRuby with Business Rules Engines/DSLs (such as &lt;a href="http://labs.jboss.com/drools/"&gt;Drools&lt;/a&gt;) which is something I've wanted to play around with yet. As well as using a Java scripting languages to access cool APIs.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Check it out...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1919727582376573751?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1919727582376573751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1919727582376573751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1919727582376573751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1919727582376573751'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/interesting-bruce-tate-podcast.html' title='Interesting Bruce Tate Podcast'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7677858490930460382</id><published>2007-09-11T08:30:00.000-07:00</published><updated>2007-09-11T08:39:47.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nits'/><title type='text'>I didn't want indentation to break my code?</title><content type='html'>I haven't done an "angry" post for a while and since I don't want to close down this blog, so I'll posit there is something unique about the Ruby community which compels folks to &lt;a href="http://www.h3rald.com/articles/10-reasons-to-learn-ruby/"&gt;write lame defenses of their favorite language&lt;/a&gt; the way that doesn't seem to occur for other languages. I never saw this with Python or Perl, but it mostly seems to ooze from converts from Java/C++ or God-forbid PHP.&lt;br /&gt;&lt;br /&gt;There, done, filled my quota!&lt;br /&gt;&lt;br /&gt;P.S. - for "h3rald" or anyone else, you won't have any problem with Python if you use a decent editor like Vim and have it &lt;a href="http://www.threatmind.net/secwiki/VimConfig"&gt;configured properly.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7677858490930460382?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7677858490930460382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7677858490930460382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7677858490930460382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7677858490930460382'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/i-didnt-want-indentation-to-break-my.html' title='I didn&apos;t want indentation to break my code?'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-6055017236541283891</id><published>2007-09-08T07:07:00.000-07:00</published><updated>2007-09-08T10:12:25.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>The Future of Ruby is JRuby?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MPIoEEC-IC0/RuLX7GY1FQI/AAAAAAAAAHg/nWKdoalsQ1s/s1600-h/jruby.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_MPIoEEC-IC0/RuLX7GY1FQI/AAAAAAAAAHg/nWKdoalsQ1s/s320/jruby.png" alt="" id="BLOGGER_PHOTO_ID_5107882337718572290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;While fighting with ActiveRecord-JDBC (I thought Derby was built in JDK 1.6, but I still have to copy the derby .jar's into jruby/lib ???) this morning I ran across &lt;a href="http://ola-bini.blogspot.com/"&gt;Ola Bini'a Blog&lt;/a&gt; and an &lt;a href="http://ologix.com/JRubyJavaBin200708.pdf"&gt;a great prezo on JRuby&lt;/a&gt;. If you read between the lines (I obviously didn't see/hear the prezo) but Ola seems to be suggesting the future of Ruby is indeed JRuby. Slide after slide there are aspects of C-Ruby that are broken (and will not be fixed in 1.9)  but where Java is superior :  GC, performance (maybe), multi-core, internationalization, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-6055017236541283891?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/6055017236541283891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=6055017236541283891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6055017236541283891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6055017236541283891'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/excellent-up-to-date-jruby-prezo.html' title='The Future of Ruby is JRuby?'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MPIoEEC-IC0/RuLX7GY1FQI/AAAAAAAAAHg/nWKdoalsQ1s/s72-c/jruby.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7924545234837478254</id><published>2007-09-03T19:14:00.000-07:00</published><updated>2007-09-04T11:35:07.320-07:00</updated><title type='text'>Ruby Only Netbeans Builds: Nothing to Be Angry About</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MPIoEEC-IC0/RtzAImY1FMI/AAAAAAAAAHA/qmbX_-CbHJM/s1600-h/netbeans.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_MPIoEEC-IC0/RtzAImY1FMI/AAAAAAAAAHA/qmbX_-CbHJM/s400/netbeans.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5106167331507475650" /&gt;&lt;/a&gt;&lt;br /&gt;I've never used IDEs that much (with the exception of Visual C# a while back} but I downloaded the &lt;a href='http://deadlock.netbeans.org/hudson/job/ruby/'&gt;latest build of the the Netbeans Ruby IDE.&lt;/a&gt; and it was amazing how fast it loaded without all that useless Java crap that causes the progress bar to take soooo long on the full-featured Netbeans 6.0 preview releases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7924545234837478254?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7924545234837478254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7924545234837478254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7924545234837478254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7924545234837478254'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/ruby-only-netbeans-builds-nothing-to-be.html' title='Ruby Only Netbeans Builds: Nothing to Be Angry About'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MPIoEEC-IC0/RtzAImY1FMI/AAAAAAAAAHA/qmbX_-CbHJM/s72-c/netbeans.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1659835779365350428</id><published>2007-09-02T17:47:00.000-07:00</published><updated>2007-09-04T11:32:30.388-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>Absolutely Worthless JRoR Benchmark: Tomcat 5.5 vs. Glassfish v3</title><content type='html'>So for grins (not worth much else, was looking for something to pass the time before my kids went to sleep) I decided to compare initial page load times for the hello world between Tomcat and Glassfishv3 using the &lt;a href="http://weblogs.java.net/blog/arungupta/archive/2007/08/first_jruby_on.html"&gt;Arun Gupta's tutorial app&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Tomcat 5.5.23&lt;/u&gt;&lt;br /&gt;Initial Load:  3.229s&lt;br /&gt;Subsequent Loads: 0.115 0.323 0.323s&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Glassfish v3&lt;/u&gt;&lt;br /&gt;Inital Load: 9.671s&lt;br /&gt;Subsequent Loads: 3.005 0.554 0.594s&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Webrick&lt;/u&gt;&lt;br /&gt;Initial Load: 1.278s&lt;br /&gt;Subsequent Loads: 0.559s 0.623&lt;br /&gt;&lt;br /&gt;For Webrick is the time to boot it was about 3-4 times as long as it took to start Tomcat and deploy app through the manager (no more than 10 seconds) but for Glassfish, deployments took anywhere from 29-52 seconds.&lt;br /&gt;&lt;br /&gt;Not like it really matters, but the hardware/software: VMWare Debian 4.0 JRE1.6 running on aging AMD K7-1.5 with 1.2GB RAM.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-g4:~ mdfranz$ time wget  http://192.168.100.91:8080/hello/say/hello&lt;br /&gt;--19:30:56--  http://192.168.100.91:8080/hello/say/hello&lt;br /&gt;         =&gt; `hello.4'&lt;br /&gt;Connecting to 192.168.100.91:8080... connected.&lt;br /&gt;HTTP request sent, awaiting response... 200 OK&lt;br /&gt;Length: 86 [text/html]&lt;br /&gt;&lt;br /&gt;19:30:59 (1.61 MB/s) - `hello.4' saved [86/86]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;real    0m3.229s&lt;br /&gt;user    0m0.002s&lt;br /&gt;sys     0m0.009s&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1659835779365350428?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1659835779365350428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1659835779365350428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1659835779365350428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1659835779365350428'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/absolutely-worthly-jror-benchmark.html' title='Absolutely Worthless JRoR Benchmark: Tomcat 5.5 vs. Glassfish v3'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1079964719734333342</id><published>2007-09-02T13:03:00.000-07:00</published><updated>2007-09-07T18:46:18.620-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>JRuby and Embedded Derby: First Steps</title><content type='html'>Before tackling &lt;a href="http://rubyforge.org/projects/jruby-extras"&gt;ActiveRecord-JDBC&lt;/a&gt; I thought I'd play around with &lt;a href="http://db.apache.org/derby/papers/DerbyTut/embedded_intro.html"&gt;the embedded version of Apache Derby&lt;/a&gt; with JRuby.  This actually took me a lot longer that it should of, mostly because its been months since I've done anything with JRuby and years since I've touched JDBC. But here are the basic steps, which probably aren't that much difference from any other JDBC in JRuby:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'java'&lt;br /&gt;include_class "java.sql.Connection"&lt;br /&gt;include_class "java.sql.DriverManager"&lt;br /&gt;include_class "java.sql.ResultSet"&lt;br /&gt;include_class "java.sql.Statement"&lt;br /&gt;driver = org.apache.derby.jdbc.EmbeddedDriver.new()&lt;br /&gt;conn = DriverManager.getConnection("jdbc:derby:derbyDB;create=true")&lt;br /&gt;conn.setAutoCommit(false)&lt;br /&gt;s = conn.createStatement()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Some of the things that tripped me up, as I was trying to convert the simple Java example to JRuby:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Class.forName(driver).newInstance()&lt;/span&gt;&lt;span style="font-size:85%;"&gt; nonsense, I guess I've never run across this convention before but probably not surprising since I'm not a Java developer&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;org.apache.derby.impl.jdbc.EmbedSQLException: Derby system shutdown&lt;/span&gt;&lt;span style="font-size:85%;"&gt; - yes you should do  a &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;DriverManager.getConnection("jdbc:derby:;shutdown=true") &lt;span style="font-family:times new roman;"&gt;and yes it apparently always throws an exception&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Getting useful &lt;a href="http://db.apache.org/derby/docs/10.3/devguide/cdevconcepts41275.html"&gt;results sets&lt;/a&gt; back is where I spent most of my time. Fortunately Derby documentation (like most Apache projects) are among of the best of any, whether commercial or Open Source APIs.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Since Blogger mangles source code so badly, see the code over on my &lt;a href="http://www.threatmind.net/secwiki/JRuby/Derby"&gt;wiki&lt;/a&gt;. Next I'm going to try &lt;a href="http://hsqldb.org/"&gt;HSQLDB&lt;/a&gt; because it supports a larger set of rails migrations using ActiveRecord-JDBC  than Derby, but  the  &lt;a href="http://hypersonic.rubyforge.org/"&gt;Hypersonic gem&lt;/a&gt; definitely had problems on OSX due to issues with &lt;a href="http://www.cmt.phys.kyushu-u.ac.jp/%7EM.Sakurai/cgi-bin/fw/wiki.cgi?page=YAJB"&gt;YAJB&lt;/a&gt;. But me sneaking suspicions is that that library is for C-Ruby and not JRuby. Doh!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1079964719734333342?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1079964719734333342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1079964719734333342' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1079964719734333342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1079964719734333342'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/getting-jruby-and-embedded-derby-to.html' title='JRuby and Embedded Derby: First Steps'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-384979129964372611</id><published>2007-09-01T05:48:00.000-07:00</published><updated>2007-09-07T18:46:23.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRoR'/><title type='text'>JRuby/Rails on Glassfish Actually Works!</title><content type='html'>So traffic was so bad on Thursday I popped open my Powerbook on the Edens spur (I swear it took me an hour to go 3 miles) and listened to &lt;a href="http://javaposse.com/index.php?post_id=246577"&gt;Java Posse 138&lt;/a&gt; which had a lengthy (but quite excellent interview with several Sun developers from &lt;a href="https://glassfish.dev.java.net/"&gt;Glassfish&lt;/a&gt;. Java Posse is an excellent podcast. I wish there was something of comparable quality on Ruby, but no time for that rant.&lt;br /&gt;&lt;br /&gt;Besides the performance improvements (indeed the startup time is quite amazing compared to JBOSS, Geronimo, or Sun's appserver) they mentioned running JRuby apps and I ran across this &lt;a href="http://weblogs.java.net/blog/arungupta/archive/2007/08/first_jruby_on.html"&gt;blog entry on running interpreted rails apps within Glassfish v3 and the Grizzly connector&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had to make few changes to get it working to Linux-ify the tutorial (had to create a symlink within glassfish/lib to point to the jruby directory) but it was relatively straightforward on Debian 4.0, (JRuby 1.0.1 and jdk1.6.0_02)&lt;br /&gt;&lt;br /&gt;Here the slight differences:&lt;br /&gt;&lt;br /&gt;I set the environment variables in .bashrc&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;JAVA_HOME=~/jdk6&lt;br /&gt;JRUBY_HOME=~/java/jruby&lt;br /&gt;GLASSFISH_HOME=~/java/glassfish&lt;br /&gt;PATH=$PATH:$JAVA_HOME/bin/:$JRUBY_HOME/bin:$GLASSFISH_HOME/bin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Install rails (added --no-ri)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# jruby -S gem install rails -y --no-ri --no-rdoc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Modify glassfish/config/asenv.conf instead of asenv.bat&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;JRUBY_HOME="/root/java/jruby"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Make asadmin exectuable (chmod u+x/700)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-384979129964372611?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/384979129964372611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=384979129964372611' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/384979129964372611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/384979129964372611'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/09/jrubyrails-on-glassfish-actually-works.html' title='JRuby/Rails on Glassfish Actually Works!'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7064871582649096939</id><published>2007-08-25T10:48:00.000-07:00</published><updated>2007-09-01T17:20:58.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OffRails'/><title type='text'>Ruby Statistics Functions</title><content type='html'>The &lt;a href="http://rubyforge.org/projects/statarray/"&gt;StatArray class&lt;/a&gt; provides some basic statistical operations to be used on arrays:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;irb(main):001:0&gt; require 'rubygems'&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):002:0&gt; require 'statarray'&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):003:0&gt; a = [1,2,3,4,6]&lt;br /&gt;=&gt; [1, 2, 3, 4, 6]&lt;br /&gt;irb(main):004:0&gt; sa = a.to_statarray&lt;br /&gt;=&gt; [1, 2, 3, 4, 6]&lt;br /&gt;irb(main):005:0&gt; sa.mean&lt;br /&gt;=&gt; 3.2&lt;br /&gt;irb(main):007:0&gt; sa.median&lt;br /&gt;=&gt; 3&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7064871582649096939?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7064871582649096939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7064871582649096939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7064871582649096939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7064871582649096939'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/08/ruby-statistics-functions.html' title='Ruby Statistics Functions'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-2432766357178101193</id><published>2007-08-08T07:59:00.000-07:00</published><updated>2007-08-11T17:34:53.723-07:00</updated><title type='text'>Ruby and Syslog</title><content type='html'>As &lt;a href="http://glu.ttono.us/articles/2007/07/25/ruby-syslog-readme"&gt;others have also pointed out&lt;/a&gt; there is no ri documentation for the syslog module but there is a lot of useful stuff in the ext/syslog directory.&lt;br /&gt;&lt;br /&gt;But here is the most basic example I can come up with:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;irb(main):007:0&gt; mdfranz@franz-t61:~$ irb&lt;br /&gt;irb(main):001:0&gt; require 'syslog'&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):002:0&gt; Syslog.open('labradoodle')&lt;br /&gt;=&gt; &lt;#Syslog: opened=true, ident="labradoodle", options=3, facility=8, mask=255&gt;&lt;br /&gt;irb(main):003:0&gt; Syslog.crit('w00f w00f')&lt;br /&gt;=&gt; &lt;#Syslog: opened=true, ident="labradoodle", options=3, facility=8, mask=255&gt;&lt;br /&gt;irb(main):004:0&gt; Syslog.close&lt;br /&gt;=&gt; nil&lt;br /&gt;irb(main):005:0&gt; Syslog.crit('w00f w00f')&lt;br /&gt;RuntimeError: must open syslog before write&lt;br /&gt;        from (irb):5:in `crit'&lt;br /&gt;        from (irb):5&lt;br /&gt;        from :0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And /var/log/syslog&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Aug  8 10:03:22 franz-t61 labradoodle[3688]: w00f w00f&lt;br /&gt;Aug  8 10:04:24 franz-t61 kernel: [ 9700.304000] iwl4965: REPLY_ADD_STA failed&lt;br /&gt;Aug  8 10:06:27 franz-t61 kernel: [ 9823.088000] iwl4965: REPLY_ADD_STA failed&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-2432766357178101193?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/2432766357178101193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=2432766357178101193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2432766357178101193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/2432766357178101193'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/08/ruby-and-syslog.html' title='Ruby and Syslog'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5095087370899672585</id><published>2007-08-05T17:23:00.000-07:00</published><updated>2007-09-01T17:21:28.866-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Debian + FXRI + Rubygems is Englightenment!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MPIoEEC-IC0/RrZsHiGRPsI/AAAAAAAAAF4/nPdgS9C_SQc/s1600-h/fxri.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_MPIoEEC-IC0/RrZsHiGRPsI/AAAAAAAAAF4/nPdgS9C_SQc/s320/fxri.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5095378905084280514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So &lt;a href="http://blogfranz.blogspot.com/2007/05/my-failed-attempt-at-instant-ruby.html"&gt;unlike OSX&lt;/a&gt; &lt;a href="http://raa.ruby-lang.org/project/fxri/"&gt;FXRI&lt;/a&gt; on Debian (Etch) is a snap. This assumes you are running a self compiled 1.8.6 install with gems. All I had to do was apt-get install the following packages:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;libfox-1.6-0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;libfox-1.6-dev&lt;br /&gt;&lt;br /&gt;All you really need is the *-dev of course. Which resulted in the following additional packages being installed:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt; libcupsys2-dev libexpat1-dev libfontconfig1-dev libfox-1.6-0 libfox-1.6-dev&lt;br /&gt; libfox-1.6-doc libfreetype6-dev libgcrypt11-dev libgnutls-dev&lt;br /&gt; libgpg-error-dev libjpeg62-dev liblzo-dev libopencdk8-dev libpng12-dev&lt;br /&gt; libpopt-dev libtasn1-3-dev libtiff4-dev libtiffxx0c2 libxcursor-dev&lt;br /&gt; libxfixes-dev libxft-dev libxrender-dev x11proto-fixes-dev&lt;br /&gt; x11proto-render-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And then&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@franz-t61:~/Desktop/Downloads/ruby-1.8.6# gem install fxri&lt;br /&gt;Need to update 3 gems from http://gems.rubyforge.org&lt;br /&gt;...&lt;br /&gt;complete&lt;br /&gt;Install required dependency fxruby? [Yn]  Y&lt;br /&gt;Select which gem to install for your platform (i686-linux)&lt;br /&gt;1. fxruby 1.6.11 (ruby)&lt;br /&gt;2. fxruby 1.6.11 (mswin32)&lt;br /&gt;3. fxruby 1.6.10 (mswin32)&lt;br /&gt;4. fxruby 1.6.10 (ruby)&lt;br /&gt;5. Skip this gem&lt;br /&gt;6. Cancel installation&lt;br /&gt;&gt; 1&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt;Successfully installed fxri-0.3.6&lt;br /&gt;Successfully installed fxruby-1.6.11&lt;br /&gt;Installing ri documentation for fxruby-1.6.11...&lt;br /&gt;Installing RDoc documentation for fxruby-1.6.11...&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;And even more amazingly, all the fifteen thousand of the API docs (builtins and gems) are there! Now the only thing weird was I had to fix the path env in the fxri start script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5095087370899672585?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5095087370899672585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5095087370899672585' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5095087370899672585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5095087370899672585'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/08/debian-fxri-rubygems-is-englightenment.html' title='Debian + FXRI + Rubygems is Englightenment!'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MPIoEEC-IC0/RrZsHiGRPsI/AAAAAAAAAF4/nPdgS9C_SQc/s72-c/fxri.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5785306956208789775</id><published>2007-06-24T13:16:00.000-07:00</published><updated>2007-06-25T11:56:15.719-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Brown'/><title type='text'>Finally Something Interesting from Gregory Brown</title><content type='html'>&lt;a href="http://angryruby.blogspot.com/2007/05/gsoc-rubyland-or-finally-something.html"&gt;Continuing on a theme&lt;/a&gt;, Gregory Brown actually has a nice tutorial called &lt;a href="http://www.oreillynet.com/pub/a/ruby/2007/06/21/how-to-build-simple-console-apps-with-ruby-and-activerecord.html?page=1"&gt;How to Build Simple Console Apps with Ruby and ActiveRecord&lt;/a&gt;, although I confess I have no idea what his opening sentences even mean:&lt;br /&gt;&lt;span id="intelliTxt"&gt;&lt;blockquote&gt;If you're coming into Ruby via Rails, you've probably noticed that there is a whole lot to learn within the framework itself. In fact, the integration between Rails (the framework) and Ruby (the programming language) is so tight, that it might be tough to easily see where Rails ends and Ruby begins. In terms of productivity and learning curve, this is a great feature. It means that you can learn both at once without encountering the chicken and egg problem you might find elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;So Struts (the framework) and Java (the language) is not so tightly integrated? And Django (the framework) and Python (the language) are not so tightly integrated? And this is a &lt;b&gt;feature?&lt;/b&gt;. I'm confused.&lt;br /&gt;&lt;br /&gt;Maybe this is like the "Red Hat Linux" phenomenon where folks thought Linux was RedHat and RedHat was Linux.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5785306956208789775?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5785306956208789775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5785306956208789775' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5785306956208789775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5785306956208789775'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/finally-something-interesting-from.html' title='Finally Something Interesting from Gregory Brown'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5545257184386453674</id><published>2007-06-23T23:01:00.000-07:00</published><updated>2007-09-01T17:21:39.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='OffRails'/><title type='text'>Timing out Child Processes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MPIoEEC-IC0/Rn4O66s61kI/AAAAAAAAAEg/kXmosiZCugw/s1600-h/ruby-timeout.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_MPIoEEC-IC0/Rn4O66s61kI/AAAAAAAAAEg/kXmosiZCugw/s400/ruby-timeout.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5079513835073361474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I finally ran across &lt;a href="http://www.cs.cmu.edu/%7Esrini/15-441/F06/lectures/r05-ruby.pdf"&gt;a short Ruby powerpoint lecture&lt;/a&gt; by a CMU grad student to get me on the right track. Basically I wanted to spawn a process that me eventually killed (or disappears magically) after a certain amount of time. The answer is to use &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html"&gt;Timeout&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is my code. Notice I got rid of the fork.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;require 'time'&lt;br /&gt;require 'timeout'&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def time_cmd(command,timeout)&lt;br /&gt;    cmd_output = []&lt;br /&gt;    puts "Entering time_cmd at #{Time.now.tv_sec}"&lt;br /&gt;    begin&lt;br /&gt;        status = Timeout.timeout(timeout) do&lt;br /&gt;            p = IO.popen(command) do |f|&lt;br /&gt;                puts "pid: #{$$}"&lt;br /&gt;                f.each_line do |g| &lt;br /&gt;                    cmd_output &lt;&lt; g &lt;br /&gt;                    system("ps aux | grep netstat")                    &lt;br /&gt;                end&lt;br /&gt;                system("ps aux | grep netstat")&lt;br /&gt;            end&lt;br /&gt;        end&lt;br /&gt;        pp status&lt;br /&gt;    rescue Timeout::Error&lt;br /&gt;        puts "\n#{command} completed at #{Time.now.tv_sec}"&lt;br /&gt;        return cmd_output&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts "pid: #{$$}"&lt;br /&gt;puts time_cmd("netstat -dwh 1",3)&lt;br /&gt;system("ps aux | grep netstat")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;With the following output&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-g4:~/dev/playin/ruby mdfranz$ ./angrytimeout.rb &lt;br /&gt;pid: 3658&lt;br /&gt;Entering time_cmd at 1182709241&lt;br /&gt;pid: 3658&lt;br /&gt;root      3659   2.2  0.0    27332    368  p2  S+    1:20PM   0:00.01 netstat -d&lt;br /&gt;root      3659   1.3  0.0    27332    368  p2  S+    1:20PM   0:00.01 netstat -d&lt;br /&gt;root      3659   0.1  0.0    27332    368  p2  S+    1:20PM   0:00.01 netstat -d&lt;br /&gt;root      3659   0.0  0.0    27332    368  p2  S+    1:20PM   0:00.01 netstat -d&lt;br /&gt;&lt;br /&gt;netstat -dwh 1 completed at 1182709244&lt;br /&gt;            input        (Total)           output&lt;br /&gt;   packets  errs      bytes    packets  errs      bytes colls drops&lt;br /&gt;         0     0          0          0     0          0     0     0&lt;br /&gt;         0     0          0          0     0          0     0     0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What I still haven't figured out how to do is get the process id of what is spawned by the popen so that I could Process.kill it if I needed to. I know I have been able to do this but it must have been with the &lt;a href="http://docs.python.org/dev/lib/module-subprocess.html"&gt;Python subprocess module.&lt;/a&gt; which of course is more full featured.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5545257184386453674?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5545257184386453674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5545257184386453674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5545257184386453674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5545257184386453674'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/timing-out-child-processes.html' title='Timing out Child Processes'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MPIoEEC-IC0/Rn4O66s61kI/AAAAAAAAAEg/kXmosiZCugw/s72-c/ruby-timeout.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-4016034603410614856</id><published>2007-06-17T22:11:00.000-07:00</published><updated>2007-06-25T11:58:47.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nits'/><title type='text'>More Stupid Ruby Tricks: has_key("hell")</title><content type='html'>What is missing from the title. The bloody question mark! It serves me right for trying to code when fried from various domestic chores. The "undefined method" exception (like many cryptic Ruby error messages) wasn't terribly helpful either, or at least in my reduced  state of competency, but maybe blogging on it will get it through my thick skull that method names that return booleans have a question mark suffix. I really don't see the point. How many (I'm sure some smartass will say TCL or some happy-ass functional language I could care less with that starts with an H or L) other languages have this idiom that confuses idiots.  This seems seems unnecessary and certainly violates the "principle of least surprise" or perhaps I'm misapplying the term.&lt;br /&gt;&lt;pre&gt;irb(main):003:0&gt; d = {}&lt;br /&gt;=&gt; {}&lt;br /&gt;irb(main):004:0&gt; d[0] = 1&lt;br /&gt;=&gt; 1&lt;br /&gt;irb(main):005:0&gt; d[5] = 2&lt;br /&gt;=&gt; 2&lt;br /&gt;irb(main):006:0&gt; d&lt;br /&gt;=&gt; {5=&gt;2, 0=&gt;1}&lt;br /&gt;irb(main):008:0&gt; d.has_key(5)&lt;br /&gt;NoMethodError: undefined method `has_key' for {5=&gt;2, 0=&gt;1}:Hash&lt;br /&gt;     from (irb):8&lt;br /&gt;     from :0&lt;br /&gt;irb(main):009:0&gt; d.has_key?(5)&lt;br /&gt;=&gt; true&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-4016034603410614856?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/4016034603410614856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=4016034603410614856' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4016034603410614856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4016034603410614856'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/more-stupid-ruby-tricks-haskeyhell.html' title='More Stupid Ruby Tricks: has_key(&quot;hell&quot;)'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-6127342884314636551</id><published>2007-06-14T06:21:00.000-07:00</published><updated>2007-06-14T06:34:45.851-07:00</updated><title type='text'>Ruby from A Python Perspective</title><content type='html'>&lt;a href="http://jjinux.blogspot.com/2007/06/ruby-python-programmers-perspective.html"&gt;JJinuxLand&lt;/a&gt;  has a nice (if meandering) blog on differences between Python &amp;amp; Ruby.  Even better, the comments there didn't seem to insecure hissy-fits like on &lt;a href="http://www.oreillynet.com/ruby/blog/2007/06/why_are_there_no_ruby_jobs.html#comments"&gt;the OReilly Blog&lt;/a&gt;. Good to see some mature behavior from the Ruby crowd, for a change. Oh wait, maybe these were mostly Python folks. That explains it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-6127342884314636551?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/6127342884314636551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=6127342884314636551' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6127342884314636551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6127342884314636551'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/ruby-from-python-perspective.html' title='Ruby from A Python Perspective'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1136696230830687541</id><published>2007-06-09T12:46:00.000-07:00</published><updated>2007-06-09T13:00:53.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><title type='text'>Nice Blog on JRuby + JMX</title><content type='html'>While stumbling around trying to replicate a &lt;a href="http://blogfranz.blogspot.com/2007/06/hello-jxta.html"&gt;JXTA Hello world type application&lt;/a&gt; in JRuby, I ran across a well-written tutorial by &lt;a href="http://jmesnil.net/weblog/"&gt;Jeff Mesnil&lt;/a&gt; on how to &lt;a href="http://jmesnil.net/weblog/2007/03/23/jmx-scripts-using-jruby/"&gt;script JMX with JRuby&lt;/a&gt; as well a &lt;a href="http://jmesnil.net/weblog/2007/05/31/jmx-scripts-using-jruby-part-ii/"&gt;part II&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module JMX&lt;br /&gt;    require 'java'&lt;br /&gt;&lt;br /&gt;    include_class 'java.util.HashMap'&lt;br /&gt;    include_package 'java.lang.management'&lt;br /&gt;    include_package 'javax.management'&lt;br /&gt;    include_package 'javax.management.remote'&lt;br /&gt;&lt;br /&gt;    url = JMXServiceURL.new "service:jmx:rmi:///jndi/rmi://localhost:3000/jmxrmi"&lt;br /&gt;    connector = JMXConnectorFactory::connect url, HashMap.new&lt;br /&gt;    mbsc = connector.mbean_server_connection&lt;br /&gt;&lt;br /&gt;    memory_mbean = ManagementFactory::newPlatformMXBeanProxy mbsc, "java.lang:type=Memory",&lt;br /&gt;        MemoryMXBean::java_class&lt;br /&gt;&lt;br /&gt;    memory_mbean.verbose = !memory_mbean.verbose&lt;br /&gt;    puts "verbose = #{memory_mbean.verbose}"&lt;br /&gt;&lt;br /&gt;    memory_mbean.gc&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1136696230830687541?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1136696230830687541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1136696230830687541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1136696230830687541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1136696230830687541'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/nice-blog-on-jruby-jmx.html' title='Nice Blog on JRuby + JMX'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-7212297411777405640</id><published>2007-06-06T20:13:00.000-07:00</published><updated>2007-06-25T11:56:45.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Brown'/><title type='text'>Why are there no Awk Jobs?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MPIoEEC-IC0/RmgFU6s61aI/AAAAAAAAADQ/_uGNkI8jHgo/s1600-h/django.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_MPIoEEC-IC0/RmgFU6s61aI/AAAAAAAAADQ/_uGNkI8jHgo/s400/django.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5073310837146047906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oreillynet.com/pub/au/2593"&gt;My buddy&lt;/a&gt; over on &lt;a href="http://www.oreillynet.com/ruby/"&gt;OReilly Ruby Blog&lt;/a&gt;  &lt;a href="http://www.oreillynet.com/ruby/blog/2007/06/why_are_there_no_ruby_jobs.html"&gt;posed the profound question why there are no Ruby jobs?&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Although I was shocked that Dice (for Chicago) just brought up 32 hits. Amazing, far more than the last time I checked. Compared to 41 for Python, 202 for Perl, 784 for Java, and 351 for C#. And don't forget awk. Five whole jobs in Chicagoland.&lt;br /&gt;&lt;br /&gt;To quote:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I guess it could be a lot of things, any of the below or a combination might be to blame:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Lack of good marketing for non-web oriented Ruby&lt;/li&gt;&lt;li&gt;Assumption that Ruby is not general purpose as a side effect of the success of RoR’s marketing&lt;/li&gt;&lt;li&gt;Technical issues that I can’t think of that make it an inferior choice to other languages&lt;/li&gt;&lt;li&gt;Ruby adoption might be in nature slower than Rails adoption, but on it’s way&lt;/li&gt;&lt;li&gt;MRI isn’t robust enough for the ‘enterprise’, so companies are waiting on JRuby&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/blockquote&gt;Shitty documentation. Lack of decent built-in APIs.  Rubyforge sucking big-time compared to CPAN or Cheese Shop. All the Japanese? Everything starting with R. Not coming default on Real OS's (OSX doesn't count, spare me). Being cute? Not being used in the application infrastructure of any Real OS's. (FreeBSD is an anomaly in that it doesn't require Perl, all the other distros I can think of Require at least Perl and some like Ubuntu, Python). All the crap about programming being fun? A significantly large number of Ruby-ists (or RoR-ists) that use OSX? Should I go on?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Alls of these equate to non-ENTERPRISE.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Waiting for JRuby? Please. &lt;i&gt;That is so rich&lt;/i&gt;  I almost spit my fruit bar onto the screen. And I think JRuby is cool. Maybe that nobody does any "real work" (meaning the pays $$, blogging doesn't count)  in Ruby.  Well,  except maybe &lt;a href="http://www.matasano.com/log/731/matasano-we-are-still-hiring/"&gt;Matasano&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-7212297411777405640?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/7212297411777405640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=7212297411777405640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7212297411777405640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/7212297411777405640'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/why-are-there-no-awk-jobs.html' title='Why are there no Awk Jobs?'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MPIoEEC-IC0/RmgFU6s61aI/AAAAAAAAADQ/_uGNkI8jHgo/s72-c/django.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-6055537985080093520</id><published>2007-06-06T18:56:00.000-07:00</published><updated>2007-06-09T12:55:10.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Running Ruby on Ancient Solaris Boxes</title><content type='html'>If you think I hate Ruby, well I hate Solaris even more.  It's lack of GNU. Hell, it's lack about about anything useful built-in. It's like *BSD on steroids.&lt;br /&gt;&lt;br /&gt;But believe it or not I (sort of) even managed to get Ruby 1.8.6 built and (sort of) running on an old 2.6 and 2.8 box today. It nearly killed the 2.6 box (an Ultra-5) but here's how I did it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make sure you at least have gcc, GNU Make, and a version of of GNU Grep in your path somewhere. You probably need more. The latter were things that I know I tripped up on.&lt;/li&gt;&lt;li&gt;Rip out most of the directories in ext. All I had &lt;span style="font-style: italic;"&gt;left&lt;/span&gt; in mine were: enumerator, etc, fcnctl, io, pty, racc, socket, socket, stringio, strscan, syck, thread.&lt;/li&gt;&lt;li&gt;If you need to use YAML, change the first require in&lt;span style="font-family:courier new;"&gt; yaml.rb&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;require 'yaml/stringio'&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;There may be a less radical (or lazy) way to solve the external library problem (like install readline and ncurses and everything else that wouldn't build) but I didn't want to bother, because I don't want to deal with any external libraries. I will admit, that given the minimal features built into Ruby (a good thing!) it was probably much easier to get Ruby built than Python on these old boxes. However, Python probably has a lot better detection of libraries. It certainly has a lot more &lt;span style="font-family:courier new;"&gt;./configure&lt;/span&gt; options that are useful and that actually get used.&lt;br /&gt;&lt;br /&gt;But be warned, all I ran was a simple hello world app and parsed a YAML file, so it will be interesting to see what works and what sends these boxes to a timely death.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-6055537985080093520?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/6055537985080093520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=6055537985080093520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6055537985080093520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/6055537985080093520'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/06/running-ruby-on-ancient-solaris-boxes.html' title='Running Ruby on Ancient Solaris Boxes'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-4228489262146488468</id><published>2007-05-30T13:11:00.000-07:00</published><updated>2007-06-25T11:59:45.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reference'/><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Nits'/><title type='text'>Stupid Ruby Behaviors: Episode 1 (The Injury)</title><content type='html'>Because only &lt;a href="http://en.wikipedia.org/wiki/Moon_face"&gt;"moon faced" kids like me&lt;/a&gt; would ever write a script that both read from &lt;span style="font-family:courier new;"&gt;STDIN&lt;/span&gt; &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; use &lt;span style="font-family:courier new;"&gt;ARGV&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-macbook:~ mdfranz$ ruby moonface.rb&lt;br /&gt;ddddddd&lt;br /&gt;ddddddd&lt;br /&gt;franz-macbook:~ mdfranz$ ruby moonface.rb me&lt;br /&gt;moonface.rb:2:in `gets': No such file or directory - me (Errno::ENOENT)&lt;br /&gt;      from moonface.rb:2&lt;br /&gt;&lt;br /&gt;mefranz-macbook:~ mdfranz$ cat moonface.rb&lt;br /&gt;print ARGV&lt;br /&gt;moonface = gets&lt;br /&gt;print moonface&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What gives? See &lt;a href="http://www.ruby-doc.org/core/classes/Kernel.html#M005974"&gt;gets documentation&lt;/a&gt; for the answer.&lt;br /&gt;&lt;br /&gt;The solution is to use &lt;span style="font-family: courier new;"&gt;$stdin.gets&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-4228489262146488468?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/4228489262146488468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=4228489262146488468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4228489262146488468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4228489262146488468'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/stupid-ruby-behaviors-episode-1-injury.html' title='Stupid Ruby Behaviors: Episode 1 (The Injury)'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1829604154791172229</id><published>2007-05-29T09:15:00.000-07:00</published><updated>2007-05-29T09:21:51.651-07:00</updated><title type='text'>Nice Page: A Comparative Look at Some Ruby Idioms</title><content type='html'>Renaud Waldura has a nice page called &lt;a href="http://renaud.waldura.com/doc/ruby/idioms.shtml"&gt;A Comparative Look at Some Ruby Idioms&lt;/a&gt; that compares Java, Perl, and Ruby versions of stuff like&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Constructors &amp;amp; Accessors&lt;/li&gt;&lt;li&gt;Function Pointers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Exception handling&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Iterators&lt;/li&gt;&lt;li&gt;Variable Argument Lists&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Useful because for many of us the some Ruby Ways are rather strange if you are coming from another language.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1829604154791172229?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1829604154791172229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1829604154791172229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1829604154791172229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1829604154791172229'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/nice-page-comparative-look-at-some-ruby.html' title='Nice Page: A Comparative Look at Some Ruby Idioms'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-4428228750523735704</id><published>2007-05-28T15:01:00.000-07:00</published><updated>2007-06-09T12:55:19.867-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Unlocking Dark Secrets of rdoc/ri</title><content type='html'>So if you are not using the one-click installer (like anyone who compiles from source ) on Windows, ri/fxri is pretty useless. Not only don't your GEMs show, but anything else you've compiled doesn't either.&lt;br /&gt;&lt;br /&gt;So how do you fix this?&lt;br /&gt;&lt;br /&gt;Install it with rdoc -R from within the directory that has the .rb&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# rdoc -R oniguruma.rb&lt;br /&gt;    oniguruma.rb: mcc..........c....c.....&lt;br /&gt;Generating RI...&lt;br /&gt;&lt;br /&gt;Files:   1&lt;br /&gt;Classes: 4&lt;br /&gt;Modules: 1&lt;br /&gt;Methods: 19&lt;br /&gt;Elapsed: 2.334s&lt;br /&gt;&lt;/pre&gt;Make sure it is there with ri -l&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-g4:/my/src/oniguruma-1.1.0/lib root# ri -l | grep Oni   &lt;br /&gt;Oniguruma&lt;br /&gt;Oniguruma::ORegexp&lt;br /&gt;Oniguruma::ORegexp::escape&lt;br /&gt;Oniguruma::ORegexp::last_match&lt;br /&gt;Oniguruma::ORegexp::new&lt;br /&gt;Oniguruma::ORegexp#==&lt;br /&gt;Oniguruma::ORegexp#casefold?&lt;br /&gt;Oniguruma::ORegexp#eql?&lt;br /&gt;Oniguruma::ORegexp#inspect&lt;br /&gt;Oniguruma::ORegexp#kcode&lt;br /&gt;Oniguruma::ORegexp#options&lt;br /&gt;Oniguruma::ORegexp#source&lt;br /&gt;Oniguruma::ORegexp#to_s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On a related note &lt;a href="http://blog.segment7.net/articles/category/rdoc"&gt;segment7&lt;/a&gt; has some nice blog entries on documentation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-4428228750523735704?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/4428228750523735704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=4428228750523735704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4428228750523735704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/4428228750523735704'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/unlocking-dark-secrets-of-rdocri.html' title='Unlocking Dark Secrets of rdoc/ri'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5023728961922276610</id><published>2007-05-28T14:08:00.000-07:00</published><updated>2007-05-28T14:23:17.136-07:00</updated><title type='text'>GSoC, RubyLand, or Finally Something Useful from Oreilly Ruby Blog</title><content type='html'>Instead of the normal vapid content like &lt;a href="http://www.oreillynet.com/ruby/blog/2007/03/why_was_rails_only_possible_wi.html"&gt;this&lt;/a&gt;,  &lt;a href="http://www.oreillynet.com/ruby/blog/2007/05/gsoc_announcing_rubyland.html"&gt;this announcement&lt;/a&gt; about &lt;a href="http://rubyforge.org/projects/rubyland/"&gt;RubyLand&lt;/a&gt; was actually sort of interesting as an example of solving small tasks using  &lt;a href="http://rubyforge.org/projects/eventmachine/"&gt;EventMachine&lt;/a&gt; and &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html"&gt;drb&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;Rubyland’s goal is to simplify writing tiny scripts for small tasks. I’m planning to build it using a mix of dRB and EventMachine. Rubyland’s core will aggregate events from desktop applications, file system updates, other computers on the network, etc.. Rubyland will then call user-written Ruby scripts in response to those events. Initially Rubyland will target the Mac OS X platform in some ways, but its core will be cross-platform, so that plugins can be written for any platform.&lt;/blockquote&gt;&lt;br /&gt;Bravo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5023728961922276610?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5023728961922276610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5023728961922276610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5023728961922276610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5023728961922276610'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/gsoc-rubyland-or-finally-something.html' title='GSoC, RubyLand, or Finally Something Useful from Oreilly Ruby Blog'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-1176771024849121907</id><published>2007-05-25T12:04:00.000-07:00</published><updated>2007-06-25T11:59:45.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reference'/><title type='text'>CodeIdol Ruby Sysadmin Cookbook</title><content type='html'>While I'm not sure all the &lt;a href="http://codeidol.com/other/rubyckbk/System-Administration/"&gt;recipes&lt;/a&gt; may not be the best approaches, there is some sample code there. I would have been unlikely to find &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/etc/rdoc/index.html"&gt;Etc&lt;/a&gt; module without it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-1176771024849121907?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/1176771024849121907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=1176771024849121907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1176771024849121907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/1176771024849121907'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/codeidol-ruby-sysadmin-cookbook.html' title='CodeIdol Ruby Sysadmin Cookbook'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-5012676411017535076</id><published>2007-05-16T06:08:00.000-07:00</published><updated>2007-06-09T12:55:34.607-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Oniguruma and Named Regexes in Ruby 1.8</title><content type='html'>Unlike Python and C# (and probably others) Ruby 1.8 does not support named groups. This is available in 1.9 though. Or so I hear.&lt;br /&gt;&lt;br /&gt;What are named groups? Basically they allow you to reference the results of the match option with the nice names you embedded in the regex object.  Since Blogger hates anything with &lt;&gt;'s you can see an example &lt;a href="http://viewvc.rubyforge.mmmultiworks.com/cgi/viewvc.cgi/README.txt?root=oniguruma&amp;amp;view=markup"&gt;here&lt;/a&gt; . Look near synopsis.&lt;br /&gt;&lt;br /&gt;So how do you get this in 1.8.6?&lt;br /&gt;&lt;br /&gt;Windows users have it easy, just install the win32 GEM, but OSX (and I assume other UNIX) require a bit of extra steps and it is sort of confusing because there are lots of versions of the &lt;a href="http://www.geocities.jp/kosako3/oniguruma/"&gt;Oniguruma C Library&lt;/a&gt; (do I really want to download stuff hosted on geocities Japan?) to choose from and there is a way to install it which requires recompiling your Ruby but that only works for 1.8.4 so I didn't bother.&lt;br /&gt;&lt;br /&gt;So here is what I did to get it working on OSX (PPC) with 1.8.6&lt;br /&gt;&lt;br /&gt;1. Download &lt;a href="http://www.geocities.jp/kosako3/oniguruma/archive/onig-4.6.2.tar.gz"&gt;4.6.2&lt;/a&gt; of the C Library. Configure with whatever prefix you are using for Ruby (I use /my) and make install&lt;br /&gt;&lt;br /&gt;2. Download version 1.10 of the &lt;a href="http://rubyforge.org/projects/oniguruma"&gt;GEM Source Tarball&lt;/a&gt; and do the standard &lt;span style="font-family:courier new;"&gt;ruby extconf.rb&lt;/span&gt; dance within ext. However&lt;br /&gt;&lt;br /&gt;Change INFLAGS in the Makefile so it can find the oniguruma.h&lt;br /&gt;&lt;br /&gt;Mine looks like this because ruby is installed in /my&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INCFLAGS = -I. -I. -I/my/include -I/my/lib/ruby/1.8/powerpc-darwin8.9.0 -I.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't do this you will get&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;gcc -I/my -I. -I. -I/my/lib/ruby/1.8/powerpc-darwin8.9.0 -I.  -fno-common -Wall  -c oregexp.c&lt;br /&gt;oregexp.c:2:23: error: oniguruma.h: No such file or directory&lt;br /&gt;oregexp.c:9: error: parse error before 'regex_t'&lt;br /&gt;oregexp.c:9: warning: no semicolon at end of struct or union&lt;br /&gt;oregexp.c:10: warning: type defaults to 'int' in declaration of 'ORegexp'&lt;br /&gt;oregexp.c:10: warning: data definition has no type or storage class&lt;br /&gt;oregexp.c:15: error: parse error before '*' token&lt;br /&gt;oregexp.c: In function 'oregexp_free':&lt;br /&gt;oregexp.c:16: warning: implicit declaration of function 'onig_free'&lt;br /&gt;oregexp.c:16: error: 'oregexp' undeclared (first use in this function)&lt;br /&gt;oregexp.c:16: error: (Each undeclared identifier is reported only once&lt;br /&gt;oregexp.c:16: error: for each function it appears in.)&lt;br /&gt;oregexp.c: In function 'oregexp_allocate':&lt;br /&gt;oregexp.c:21: error: 'oregexp' undeclared (first use in this function)&lt;br /&gt;oregexp.c: At top level:&lt;br /&gt;oregexp.c:27: error: parse error before '*' token&lt;br /&gt;oregexp.c:27: warning: return type defaults to 'int'&lt;br /&gt;oregexp.c: In function 'int2encoding':&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you compile it successfully you'll see the library (oregexp.bundle, whatever that is) put in &lt;span style="font-family:courier new;"&gt;/my/lib/ruby/site_ruby/1.8/powerpc-darwin8.9.0&lt;/span&gt; (or whatever you path is)&lt;br /&gt;&lt;br /&gt;However &lt;span style="font-family:courier new;"&gt;require 'oniguruma.rb'&lt;/span&gt; will still fail until you do this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;cp oniguruma.rb /my/lib/ruby/site_ruby/1.8/&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But it if you did get it installed you can run the test suite&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;franz-g4:/tmp root# ruby test_oniguruma.rb&lt;br /&gt;4.6.2&lt;br /&gt;Loaded suite test_oniguruma&lt;br /&gt;Started&lt;br /&gt;..............................................&lt;br /&gt;Finished in 0.046221 seconds.&lt;br /&gt;&lt;br /&gt;46 tests, 105 assertions, 0 failures, 0 errors&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But of course the example from the README doesn't work (either on OSX or Windows) in typical Ruby fashion.&lt;br /&gt;&lt;br /&gt;Simple, easy, and fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-5012676411017535076?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/5012676411017535076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=5012676411017535076' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5012676411017535076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/5012676411017535076'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/oniguruma-and-named-regexes-in-ruby-18.html' title='Oniguruma and Named Regexes in Ruby 1.8'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3105545392197418648.post-3483130536462022112</id><published>2007-05-15T17:00:00.000-07:00</published><updated>2007-06-25T11:57:10.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Meta'/><category scheme='http://www.blogger.com/atom/ns#' term='Brown'/><title type='text'>Death, Rebirth, and yet another Ruby Blog</title><content type='html'>I deinstalled (yes, FreeBSD is assimilating me) the ports version of Ruby on my 12-inch Powerbook (still the best damn laptop, ever-Intel Macs may be fast but they are flimsy, hot, and noisy!) this afternoon due to all the pain of getting trying to &lt;a href="http://rubyforge.org/projects/oniguruma"&gt;onigurumu&lt;/a&gt; installed just so I could do named group regular expressions like in Python (more on that later).&lt;br /&gt;&lt;br /&gt;But sometimes it is good just to clean house and start a new page. So except for the Rails nonsense, I did pretty much everything &lt;a href="http://hivelogic.com/narrative/articles/ruby-rails-mongrel-mysql-osx"&gt;here&lt;/a&gt;. You know, installing libreadline, a fresh new install 1.8.6 tarball, etc. Except I'm starting from scratch with everything in &lt;span style="font-family:courier new;"&gt;/my&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;But enough procrastination. Why the new blog? &lt;span style="font-style: italic;"&gt;Why another Ruby blog?&lt;/span&gt;  Well, the manifesto (oh, yeah, and that I'm spending too much time on Ruby on &lt;a href="http://blogfranz.blogspot.com/"&gt;BlogFranz&lt;/a&gt;) is below. I hope you hold me (or us, should anyone else agree to the spirit, if not necessarily the letter of this effort) to it:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Back to the Basics&lt;/b&gt; - I happened to look at the README during the build and the non-hyped description of Ruby (obviously back before Ruby was cool) was:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ruby is the interpreted scripting language for quick and easy object-oriented programming.  It has many features to process text files and to do system management tasks (as in Perl).  It is simple, straight-forward, and extensible.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately most of the stuff I try to do (which is simple and system-management-ish) that I could achieve with a blink of an eye in Python (because it just works and is in there) does not work (or is not built into the standard library) with Ruby. I guess everybody is doing web development in Ruby except me. Or the various OSX, Linux, FreeBSD, OpenBSD boxes I do work on with Ruby are so hopelessly broken. I assume others are in this boat as well.&lt;br /&gt;&lt;br /&gt;Which leads me to #2.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rails-free&lt;/b&gt; - This is a timewarp. We go back to 2001 when I first encountered Ruby and it was just weird and Japanese and the socket APIs were crappy, before &lt;a href="http://framework.metasploit.com/"&gt;Metasploit 3.0&lt;/a&gt;. Before &lt;a href="http://www.basecamphq.com/"&gt;BaseCamp&lt;/a&gt; (yes my previous company actually used it for a while, and it was "allright" if a bit sluggish). Back  when my wife owned the only Mac in the family. Bottom line, if its' related to Rails you won't find it here. Period. End of story. No exceptions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mad as hell&lt;/b&gt; - The "happy-ass-ness" (yes, a psychological term) of Ruby (packaging bliss, instant enlightenment? fun programming?)  is maddening to me. &lt;a href="http://www.medterms.com/script/main/art.asp?articlekey=33157"&gt;&lt;span style="font-style: italic;"&gt;Vomitus negro&lt;/span&gt;.&lt;/a&gt;  I loathe &lt;a href="http://www.oreillynet.com/ruby/"&gt;OReilly Ruby blogs&lt;/a&gt; and in particular I don't like &lt;a href="http://www.oreillynet.com/pub/au/2593"&gt;this guy&lt;/a&gt; or anyone else that that does "math for fun." What you find here will be hard, critical, and hype-free. No advocacy. No fanboys. Just blogs on (or references to other blogs) on how to get shit done and solve problems. A lot of this began over on &lt;a href="http://blogfranz.blogspot.com/search/label/Python-n-Ruby"&gt;BlogFranz&lt;/a&gt; where I talked about sloppy documentation, insecure implementations, YAML, API comparisions, and other fare that was getting  way too much attention there, where I want to focus more on security, Linux, and BSDs.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JRuby&lt;/b&gt; - You think Ruby is bad. Try Java? But sometimes there are Java APIs you just have to use (or abuse). &lt;a href="http://jython.org"&gt;Jython&lt;/a&gt; is obsolete and what is the point of something like &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;?!&lt;br /&gt;&lt;br /&gt;So there you have it. I've decided to use it with &lt;a href="http://www.threatmind.net/secwiki/UbuntuTrinux"&gt;UbuntuTrinux&lt;/a&gt; and we're using it a work. So I have to be make the best of using Ruby.  So let the fun begin. And yeah, I'm not really mad. Just a blog persona.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3105545392197418648-3483130536462022112?l=angryruby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angryruby.blogspot.com/feeds/3483130536462022112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3105545392197418648&amp;postID=3483130536462022112' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3483130536462022112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3105545392197418648/posts/default/3483130536462022112'/><link rel='alternate' type='text/html' href='http://angryruby.blogspot.com/2007/05/death-rebirth-and-yet-another-ruby-blog.html' title='Death, Rebirth, and yet another Ruby Blog'/><author><name>Matt Franz</name><uri>http://www.blogger.com/profile/00973881935128108475</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_MPIoEEC-IC0/SWXZy3zT_TI/AAAAAAAABHY/FmMm-co3m0Y/S220/blah.jpg'/></author><thr:total>2</thr:total></entry></feed>
