Nick Sieger: Tag rubyconf http://blog.nicksieger.com/articles/tag/rubyconf?tag=rubyconf en-us 40 New Orleans live music this weekend during RubyConf <p>My boy Erik Jacobson from way back and also of <a href="http://www.mamadigdown.com/" title="Mama Digdown's Hot Tunes!">Mama Digdown&#8217;s Brass Band</a> is a New Orleans regular and knows the local scene well&#46;</p> <p>He graciously gave me the lowdown for this weekend&#46; I&#8217;d like to make a few of these gigs; probably at least the Stooges at Hi Ho tonight, maybe Hot 8, Ellis and/or Cotton Mouth Kings tomorrow, and one of Shannon Powell or Wes Anderson on Saturday&#46; Let me know if you&#8217;re interested by <a href="http://twitter.com/nicksieger">messaging me on Twitter</a>&#46;</p> <p>Erik also mentioned that there might be a <a href="http://en.wikipedia.org/wiki/Second_line">Second Line</a> happening on Sunday afternoon that I might try to check out before I take off in the evening&#46; Let me know too if you are up for that&#46;</p> <p>Ok, here&#8217;s Erik&#8217;s take:</p> <h3>Thursday</h3> <p><strong>Shamarr Allen @ Irvin Mayfields Jazz Playhouse&#46; 8:00pm&#46;</strong></p> <p>He&#8217;s a fantastic young trumpet player and a friend of mine&#46; This is the nice/upscale club that is in the hotel on Bourbon Street&#46;</p> <p><strong>Kermit Ruffins @ Vaughn&#8217;s&#46; 8:00pm&#46;</strong></p> <p>You probably know, but Kermit is a trumpet player and is a quintessential New Orleans character&#46; Vaughn&#8217;s is a great local dive bar that is in the Bywater neighborhood out by the Navy Yard&#46; You&#8217;ll want to take a cab there&#46; There is also free beans and rice at his shows&#46;</p> <p><strong>Stooges Brass Band @ Hi Ho Lounge probably around 10:00pm&#46;</strong></p> <p>I got a hold of Walter from the Stooges and he said they were playing tonight&#46; They are a fantastic brass band and it&#8217;s a great local spot to catch them&#46; Good friends of Mama Digdown&#8217;s&#46;</p> <p><strong>Soul Rebels Brass Band @ Le Bon Temps Roulee @ 11:00pm</strong></p> <p>This is always a good hangout&#46; There will be a ton of people there&#46; The Soul Rebels are awesome and always play pretty late into the night&#46;</p> <p>If you felt like being adventurous, you could hit either Vaughn&#8217;s or the Playhouse from like 9&#45;10, then take a cab to the Hi Ho for a set until around 11:30 and then finish with the Rebels&#46; That is a lot of music, it&#8217;s just so hard to pick which ones to leave out&#46;</p> <h3>Friday</h3> <p><strong>Hot 8 Brass Band @ 12Bar&#46; 7:00pm</strong></p> <p>HOT, HOT brass band&#46; They are good friends who have been up north many times&#46; This is a new club that is pretty close you your hotel&#46;</p> <p><strong>Hot Club of New Orleans @ DBA&#46; 6:00pm</strong></p> <p>This is a great Django style band&#46; I went to college with the violin player Matt Rhoady&#46; He also hails from Mpls and went to Henry High/ This club is over on Frenchman Street near Snug Harbor&#46;</p> <p><strong>Kid Chocolate Brown @ Irvin Mayfields Jazz Playhouse&#46; 8:00pm</strong></p> <p>Cool young trumpet player and singer&#46; He also plays in Los Hombres Calientes from time to time&#46;</p> <p><strong>Ellis Marsalis Quartet @ Snug Harbor 8:00pm</strong></p> <p>This is certainly worth going to and I am sure he&#8217;ll have a good band with him&#46;</p> <p><strong>New Orleans Cotton Mouth Kings @ Spotted Cat&#46; 10:00pm</strong></p> <p>This place is really close to Snug Harbor and would be fun to hit after Ellis&#46; Great traditional band with young cats&#46; Good people watching too&#46; This is a cool scene here I think it&#8217;s free too!</p> <h3>Saturday</h3> <p><strong>Soul Rebels @ DBA&#46; 11:00pm</strong></p> <p>If you missed them on tonight, you can catch them here&#46; This would be a good place to hear them&#46;</p> <p><strong>Shannon Powell @ Irving Mayfields Jazz Playhouse&#46; 8:00pm</strong></p> <p>He is so badass&#46; You should really try to swing by if you can&#46; He is the drummer that was on that Orchestra Hall gig I played this summer&#46; Cool dude too&#46; At 11:00pm there is also a brass band playing this club called the KinFolk Brass Band&#46;</p> <p><strong>Wessell Andersen @ Snug Harbor&#46; 8:00pm</strong></p> <p>I am sure you know him from Wynton records&#46; He is amazing&#46; It is a hard decision between him and Shannon Powell&#46; </p> Thu, 11 Nov 2010 18:38:00 +0000 urn:uuid:6ea91e85-04db-4944-aecb-c5060fd9ec20 Nick Sieger http://blog.nicksieger.com/articles/2010/11/11/new-orleans-live-music-this-weekend-during-rubyconf nola rubyconf http://blog.nicksieger.com/articles/trackback/576 RubyConf India 2010! <p>I&#8217;m honored to be heading to the first ever <a href="http://www.rubyconfindia.org/"><strong>RubyConf India</strong></a> in Bangalore next week&#46; I&#8217;ll be delivering an update on Rails 3, JRuby, and what&#8217;s in store for the future of the combined platform in 2010&#46; I&#8217;m looking forward to meeting you there!</p> <p><a href="http://rubyconfindia.org"><img src="http://rubyconfindia.org/stock/rubyconf-badges/RubyConf2010/270X185_speaking.jpg" alt="I'm speaking at RubyConf India 2010"></a></p> Fri, 12 Mar 2010 23:21:04 +0000 urn:uuid:b2e0444e-6cf4-468d-a222-0f5a783aed94 Nick Sieger http://blog.nicksieger.com/articles/2010/03/12/rubyconf-india-2010 ruby rubyconf rubyconfindia http://blog.nicksieger.com/articles/trackback/552 RubyConf: Graphics with Ruby <p>Geoff Grosenbach is waxing on pagefuls of numbers condensed into a small, tidy graph that increases the amount of information you can communicate on a page&#46;</p> <p><a href="http://www.flickr.com/photos/nicksieger/279242427/" title="Photo Sharing"><img src="http://static.flickr.com/107/279242427_32770c5081_m.jpg" width="240" height="160" alt="Topfunky fox" /></a><br/> <em>The cartoon fox makes his second appearance of the day in one of Geoff&#8217;s sparklines</em></p> <p>It is in our hands, the hands of the programmer, to show designers what the range of visual representation capabilities are&#46;</p> <h2>Libraries</h2> <ul> <li>Scruffy &#45;&#45; SVG graphs, no dependencies (i&#46;e&#46;, RMagick)</li> <li>GNUPlot &#45;&#45; the old standby</li> <li>MRPlot &#45;&#45; scientific plots</li> <li>PNG &#45;&#45; line and font drawing in pure ruby from Seattle&#46;rb</li> <li>Gruff &#45;&#45; depends on RMagick</li> <li>Sparklines &#45;&#45; depends on RMagick</li> <li>[Ploticus and RRD were mentioned during the talk as well]</li> </ul> <h2>Applications</h2> <ul> <li>Automatically generating image mastheads with a font mask, a gradient and a cloud image showing through the mask</li> <li>UrbanDrinks&#46;com &#45;&#45; plotting bars on a timeline showing happy hours in Portland</li> <li>&#8220;Scene graph&#8221; &#45;&#45; rendering multiple layers of images/icons on the filesystem into a composite graphics &#8220;scene&#8221;</li> <li>BillMonk&#46;com &#45;&#45; rendered image with multiple components that allows you to circumvent cross&#45;site or crippled javascript issues</li> <li>In a Rails controller: <ul> <li>Generate and cache (with <code>caches_page</code>) an image with text</li> <li>Register a new mime type and use <code>responds_to {|type| type.jpg { ... } }</code></li> </ul></li> <li>Requisite reference to Edward Tufte</li> </ul> <h2>Techniques</h2> <ul> <li>Comparisons &#45;&#45; show two competing trendlines on a graph</li> <li>Multivariate analysis &#45;&#45; stockhive&#46;com stock chart rendering</li> <li>Content is king &#45;&#45; be judicious</li> </ul> Fri, 20 Oct 2006 20:18:00 +0000 urn:uuid:c4cb7cde-ff0f-4760-aefe-71d6461b89b3 Nick Sieger http://blog.nicksieger.com/articles/2006/10/20/rubyconf-graphics-with-ruby ruby rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/77 RubyConf Day 2: Morning Sessions <h2>John Lam: IronRuby</h2> <p>Why IronRuby? John started with RubyCLR, which was a bridge between two languages/environments (&#46;NET CLR and Ruby)&#46; Last year he didn&#8217;t know he&#8217;d be uprooting his family from Toronto and moving to Seattle&#46; Now he finds himself in Microsoft trying to make sense of his new position&#46; He describes a number of higher level goals for himself and IronRuby at Microsoft&#46;</p> <p><em>Change or die&#46;</em> Involvement in open source can only go up, right? The challenge is that the company is already doing well, so it&#8217;s hard to convince middle management that anything should change&#46;</p> <p><em>Open source</em>&#46; To their credit, the IronRuby team appears to be on the leading edge of open source at Microsoft (c&#46;f Microsoft Public License)&#46; They also had planned all along to take external contributions, and have in fact started to receive them</p> <p><em>Rails&#46;</em> One of the key goals is to be true to the language, and that includes being able to Run Rails&#46;</p> <p><em>Performance&#46;</em> Use IronRuby as a testbed for DLR performance testing&#46;</p> <p>John is showing the REPL now (running under Mono actually), pointing out that &#8220;integer math is now supported&#8221; (apparently early on someone pointed out that subtraction didn&#8217;t work) and that CLR list types automatically appear like Ruby arrays&#46;</p> <p>Heavy DLR pitch ahead&#46; Performance history, how the CLR used to be slow for dynamic languages, and how it&#8217;s better now&#46;</p> <p>John is running the Rubinius specs now, and showing only 373 out of 1030 failing&#46; (It looked like he was running the core specs only&#46;) Praise for the Rubinius team!</p> <p>It&#8217;s possible to bind C# types to Ruby using annotations&#46; Lots of C# code being shown, including a mess of generated code&#46;</p> <p>John also showed a XAML/Silverlight demo that was scripted by Ruby&#46;</p> <h2>Charles Nutter and Thomas Enebo: JRuby</h2> <p>JRuby: &#8220;Not Just&#8221; JRuby for the JVM&#46; I found it hard to take notes for this talk since I&#8217;m so close to it&#46; Fortunately, their slides were pretty verbose and comprehensive, and hopefully will be posted shortly&#46;</p> <h2>Evan Phoenix: Rubinius</h2> <p>Rubinius talk in roller derby mode&#46; Ask questions early and often&#46;</p> <p>What is the end game of Rubinius (or JRuby, or IronRuby)? Total&#46; World&#46; Domination&#46; <strong>For Ruby!</strong></p> <p>Rubinius is 3 things: form, function, and elbow grease&#46; <code>Ruby::Syntax, Ruby::Behavior, and Google.search("crazy cs papers")</code>&#46;</p> <p><em>Rapid fire CS Nerd attack mode coming</em>&#46; Generational collection, bytecode execution, stackless, bytecode represenation, &#46;rba archives&#46;</p> <p>Who would rather program C than Ruby? Java? C#? (Only one guy raised his hand that he&#8217;d rather code C&#46;)</p> <p><em>Hard&#45;hitting portion of the talk&#46;</em> The kernel, broken down&#46;</p> <ul> <li><p>1&#46;8</p> <ul> <li>84,516 lines of C</li> <li>0 lines of Ruby</li> </ul></li> <li><p>1&#46;9</p> <ul> <li>128,786 lines of C</li> <li>0 lines of Ruby</li> </ul></li> <li><p>IronRuby</p> <ul> <li>48,282 lines of C#</li> <li>0 lines of Ruby</li> </ul></li> <li><p>JRuby</p> <ul> <li>114,507 lines of Java</li> <li>0 lines of Ruby*</li> </ul></li> </ul> <p>(*Even though I got heckled for saying it, JRuby does actually have some code written in Ruby that&#8217;s not the standard library&#46;)</p> <ul> <li>Rubinius <ul> <li>25,398 lines of C</li> <li>13,946 lines of Ruby</li> </ul></li> </ul> <p>1&#46;8 and 1&#46;9 are really Ruby for C programmers&#46; JRuby is Ruby for Java programmers&#46; IronRuby is Ruby for C# programmers&#46; But Rubinius is <em>Ruby for Ruby programmers</em>&#46;</p> <p>Dogfooding&#46; Gives feedback, which enables tighter loops, improves the kernel, makes life better for everyone on the platform&#46;</p> <p>Road, rubber, all that jazz&#46; Evan mentions that Rubinius runs 24 of 31 benchmarks faster than Ruby 1&#46;8, but the numbers are shifting rapidly&#46; Evan wanted a 1&#46;0 for RubyConf, but he has come to realize that several things are more important than a milestone&#46; Design, and the technical challenges, certainly&#46; But more importantly, the community&#46;</p> <p>Taking a cue from the Perl 6 community, <code>-Ofun</code>&#46; The free&#45;flowing commit bit, where patch sumbitters whose patches are accepted are immediately entitled commit rights, has given rise to 57 committers&#46; 17 of these have changed more than 400 lines of code&#46;</p> Sun, 04 Nov 2007 02:12:00 +0000 urn:uuid:26c1ed61-3411-4a33-9275-5014a5bc581e Nick Sieger http://blog.nicksieger.com/articles/2007/11/04/rubyconf-morning-day-2 rubyconf rubyconf2007 http://blog.nicksieger.com/articles/trackback/339 RubyConf: Matz Roundtable <p><em>An annual tradition at RubyConf is the &#8220;Roundtable&#8221;, where any member of the audience can come up and ask Matz any question&#46; Transcript follows with partial paraphrasing&#46;</em></p> <p><em>Q&#46; Will Ruby ever get the features of <code>evil</code> built in? Will we get <code>become</code>?</em> No&#46;</p> <p><em>Q&#46; If Symbol is a &#8220;frozen&#8221; String, why do we need Symbol?</em> I don&#8217;t have a complete answer to that question &#45;&#45; following tradition&#46;</p> <p><em>Q&#46; What&#8217;s the most unusual architecture Ruby has ever run on?</em> Ruby&#46;&#46;&#46;I can&#8217;t think of one&#46;&#46;&#46;JRuby? Some guys ran compiled Ruby on the NECS supercomputer&#46; [From the audience] Symbian&#46;</p> <p><em>Q&#46; As Ruby gains acceptance, it becomes more resistance to change&#46; How do you keep agile while gaining momentum?</em> We have forked off 1&#46;8, so if you want stable, use Ruby 1&#46;8 forever&#46;</p> <p><em>Q&#46; The array patch &#45;&#45; is there any chance of a backport for those of us who want 1&#46;8 forever?</em> Could be, but the current patch has a bug in 1&#46;9&#46;</p> <p><em>Q&#46; Why isn&#8217;t YARV the only VM for 1&#46;9? [Comment about register&#45;based VM]</em> I&#8217;m not sure whether stack&#45;based or register&#45;based VMs are better&#46;&#46;&#46;[THAT GUY!]&#46;&#46;&#46;[Given the hook]</p> <p><em>Q&#46; It seems like momentum is based on strong metaprogramming facilities&#46; With 1&#46;9 there are more user&#45;friendly features&#46; Will code eventually be data, or are we just patching on techniques on a tool that is being used more heavily?</em> An extreme way to do metaprogramming is to use Lisp, but for practicality we have to start somewhere&#46; I&#8217;m not sure that s&#45;expressions are the way to go&#46; We&#8217;re not going to have macros&#46; It will remain similar to what we have in 1&#46;9&#46; <em>The ability to serialize code would be really powerful &#45;&#45; will that happen?</em> Disclosing internal state is tricky because it changes&#46; It could be a platform&#45;specific feature&#46;</p> <p><em>Q&#46; Recently for 1&#46;9, there was a patch for Array and String to be in the object header&#46; Was this profiled? It seems like it would be an incredible performance problem&#46;</em> It was done for slowness of malloc and gc&#46; In some cases it could run slower, but it benchmarked at about 5% faster&#46; It should be tested thoroughly&#46;</p> <p><em>Q&#46; Ruby 2&#46;0 will not have green threads or continuations, correct? Are there specific reasons for that decision?</em> It is difficult to implement green threads in YARV&#46;</p> <p><em>Q&#46; People want to see development move quickly, but may not be able to contribute code&#46; Can you suggest ways for those programmers to contribute?</em> Submit patches to the list&#46; What is the obstacle to joining us? [Question restated] Submit testing, submit documentation&#46; Contribute to RubyCentral? (looks at Chad Fowler)</p> <p><em>Q&#46; The CSV library is useful, but slow&#46; Can we see FasterCSV in stdlib?</em> It&#8217;s ok to replace the csv library with FasterCSV, as long as the compatibility issues are resolved&#46;</p> <p><em>Q&#46; I want to thank you because I love writing in Ruby every day&#46; I tried to write Python first&#46; Recently an unrelated upgrade broke my Python apps&#46; Will we be able to manage multiple versions of Ruby?</em> You&#8217;ll have to have two versions, 1&#46;8, and future ones&#46;</p> <p><em>Q&#46; What would you say is the most important feature of your personality that has given you success?</em> Endurance? <em>Can you elaborate?</em> It&#8217;s easy to design a language, many of them disappear in a year or two&#46; I&#8217;ve been working on Ruby for 13 years&#46;</p> <p><em>Q&#46; I wanted to see in IRB how the class was implemented at runtime&#46; (He means an uneval feature)</em> [Audience member (Eric Hodel?) mentioned ParseTree]</p> <p><em>Q&#46; If there wasn&#8217;t Ruby, what would you be programming in?</em> Some language of my own not named Ruby&#46;</p> <p><em>Q&#46; Do you still look at RCRchive?</em> Yes&#46; I&#8217;ll talk about it in the keynote&#46;</p> <p><em>Q&#46; I would like a feature abstraction that would allow Ruby to fork itself rather than actually forking&#46; Can you see this added to core?</em> We have to define the behavior of that feature&#46; We have to have a good name for the method&#46; Then there will be no problem to add it to core&#46;</p> <p><em>Q&#46; Why do you need to bind methods to an object of the same original module?</em> If you bind a method taken from String class to Array class, it will crash, and we need to prevent it&#46;</p> <p><em>Q&#46; What do you think of Ruby&#46;NET?</em> I&#8217;m pretty open to new implementations&#46; <em>Should there be a standard (language specs) that other projects should follow?</em> <a href="http://headius.blogspot.com">Charles</a> started work for a <a href="http://www.headius.com/rubyspec/">written 1&#46;8 spec</a>, and I&#8217;ll help him with that if I have time&#46;</p> Sat, 21 Oct 2006 02:59:38 +0000 urn:uuid:4056b0d7-7b02-4fae-b5b7-536b0cfa5b76 Nick Sieger http://blog.nicksieger.com/articles/2006/10/21/rubyconf-matz-roundtable rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/83 Rubyconf Wrap-Up <p>Whew! Back home from my first RubyConf, it&#8217;s taken me a couple days to collect some parting thoughts&#46; As you might have noticed, I was <a href="/articles/tag/rubyconf2006">pretty busy last weekend</a>&#46;</p> <p>First of all, what an awesome and welcoming community&#46; It&#8217;s going to sound clich&eacute;, but there are so many intelligent and motivated people walking around that you can&#8217;t help but be inspired to roll up your sleeves and get your hands dirty&#46;</p> <p>There were definitely some high points for me&#46; The beauty and power of the language, even after using it for almost two years, still amazes me&#46; Pretty much every piece of code I saw, whether in a presentation or looking over someone&#8217;s shoulder, had a clear purpose and communicated its intent better than any general&#45;purpose machine language I have seen&#46; The simplicity of Evan&#8217;s new <a href="/articles/2006/10/20/rubyconf-sydney-and-rubinius">Ruby&#45;in&#45;ruby VM</a>, the syntax integration tricks of John&#8217;s <a href="/articles/2006/10/23/rubyconf-your-ruby-in-my-clr">RubyCLR</a> project, the forthcoming <a href="/articles/2006/10/21/rubyconf-mac-os-x-and-ruby">RubyOSA</a> APIs, and Geoffrey&#8217;s <a href="/articles/2006/10/20/rubyconf-graphics-with-ruby">graphics programs</a>, are all great testaments to Ruby&#8217;s power&#46;</p> <p>There was an implementer&#8217;s summit on Friday night, which I attended (see also coverage <a href="http://tbray.org/ongoing/When/200x/2006/10/20/RubyConf">here</a> and <a href="http://on-ruby.blogspot.com/2006/10/rubyconf-2006-implementers-summit.html">here</a>)&#46; There are now at least 8 active implementations of Ruby (<a href="http://www.ruby-lang.org/">Ruby</a>, <a href="http://www.atdot.net/yarv/">Yarv</a>, <a href="http://www.jruby.org/">JRuby</a>, <a href="http://on-ruby.blogspot.com/2006/09/ruby-hacker-interview-kevin-tew.html">Cardinal</a>, <a href="http://blog.fallingsnow.net/rubinius/">Rubinius</a>, <a href="http://www.zenspider.com/Languages/Ruby/MetaRuby.html">MetaRuby</a>, <a href="http://plas.fit.qut.edu.au/Ruby.NET/">Ruby&#46;NET</a>, <a href="http://wilcoding.xs4all.nl/wilco/IronRuby.aspx">IronRuby</a>), and two interop bridges (<a href="http://www.rubyclr.com/">RubyCLR</a> and <a href="http://www.rubycocoa.com/">RubyCocoa</a>)! The biggest news was that there are plans to revive the <a href="http://rubyforge.org/projects/rubytests">Ruby testing</a> project (formerly the Rubicon) and share as many tests as possible among the implementations&#46;</p> <p><a href="http://www.forbiddenweb.org/topic/126213/index.html">RejectConf</a> was a huge success, due largely to the indefatigable <a href="http://nubyonrails.com/articles/2006/10/24/adam-keys-ussruby-sketch-from-rubyconf-2006">Adam</a> <a href="http://youtube.com/results?search_query=adamkeys&amp;search=Search">Keys</a>&#46; <a href="http://blog.tewk.com/?p=88">Kevin Tew</a> has a decent wrap&#45;up of the talks that occurred&#46; <a href="http://headius.blogspot.com/">Charlie&#8217;s</a> demo of NetBeans in&#45;place refactoring feature drew a couple oohs and ahs and even one f&#45;bomb&#46; <a href="http://blog.zenspider.com/archives/2006/10/heckle_another_rubyconf_hack.html">Heckle</a>, in time, should be an awesome tool as well&#46; Big thanks to <a href="http://www.zenspider.com/">zenspider</a> for coordinating it&#46; It&#8217;s destined to become an annual tradition&#46; Perhaps the organizers of future RubyConfs could account for it in the budget?</p> <p>On a lighter note, there were quite a few humorous moments that kept popping up&#46; A <a href="http://ni.hili.st/posts/pages/16">summary may read like a list</a> of inside jokes, so here&#8217;s some context&#46; <strong>THAT GUY</strong> is a reference to a disclaimer in <a href="/articles/2006/10/21/rubyconf-zed-shaw-fuzzing">Zed&#8217;s talk</a> about the <a href="http://perl.plover.com/yak/presentation/samples/slide027.html">know&#45;it&#45;all guy who always pipes up during your talk</a> with skepticism&#46; THAT GUY kept getting called out during the rest of the conference&#46; Ani, the developer evangelist from Microsoft was pretty thick&#45;skinned&#46; She was heckled constantly about MS, Vista, and everything else, and still kept a smile on her face&#46; And of course you already watched Adam&#8217;s one&#45;act play, right?</p> <p>My note&#45;taking streak wasn&#8217;t quite perfect; I didn&#8217;t take notes Kevin&#8217;s mkmf talk nor Rich&#8217;s talk about indi, and I slept in and missed Justin&#8217;s Streamlined talk&#46; Also, the beer was flowing for RejectConf, and despite the quality summer of code talks, I was spent&#46; Fortunately, you can fill in the blanks by following along with <a href="http://www.oreillynet.com/ruby/blog/2006/10/blogging_about_rubyconf_2006.html">Curt Hibbs</a> and the <a href="http://technorati.com/tags/rubyconf2006">rest of the blogosphere</a>&#46; Thanks for tuning in, and I hope you got something worthwhile here&#46; See you next year!</p> Tue, 24 Oct 2006 22:51:55 +0000 urn:uuid:0b5efe1d-0753-4dff-8919-0727d6672893 Nick Sieger http://blog.nicksieger.com/articles/2006/10/24/rubyconf-wrap-up rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/106 RubyConf: Rinda in the Real World <p><em>Speaker: <a href="http://www.vanderburg.org/">Glenn Vanderburg</a></em></p> <p>Rinda is a distributed coordination system, by Masatoshi SEKI, based on work by David Gelernter (called Linda)&#46; It&#8217;s similar to JavaSpaces, but more in the Ruby spirit&#46; It uses DRb for communication (also by Seki&#45;san)&#46;</p> <p>There are several existing tutorials on Rinda, but none with a broad, real&#45;world applicability&#46; As Glenn started to go deeper with Rinda, flaws began to be exposed&#46;</p> <h2>Rinda Basics</h2> <ul> <li>The <strong>TupleSpace</strong> is in the conceptual middle, as a bag of tuples &#8220;arrays&#8221;&#46; Participants can write tuples into the space, or take them out (usually according to a set of conditions)&#46;</li> <li><strong>Tuples</strong> are usually requests to do some work by some unknown requester, or responses to that work&#46;</li> <li>A <strong>RingServer</strong> is a broadcast/multicast lookup service for finding Rinda tuplespaces&#46;</li> <li><strong>Templates</strong> are used to find tuples to take&#46; <code>Template#match</code> requires that the tuples have the same length, and that all the non&#45;nil elements are triple&#45;equal (<code>===</code>)&#46;</li> <li>In practice arrays are always used in the <code>#take</code> and <code>#write</code> methods, and they&#8217;re implicitly converted to the appropriate object&#46;</li> </ul> <h2>Protocol design</h2> <p>When you&#8217;re deciding what to store/read in the tuples, you&#8217;re essentially designing a communication protocol&#46; So you need to take the extra precautions required as you would when designing any API or protocol, including documentation, evolution of changes, process workflow, etc&#46;</p> <ul> <li><em>Parts of tuples:</em> command/request, identifiers, and associated parameters/data&#46; Usually templates will match on the command, sometimes on the ID, but never on the data&#46; </li> <li>Strings work well in tuples, because you can use Regexps to select them&#46;</li> <li>Numbers work well, because you can match them with Ranges</li> <li>Symbols don&#8217;t work so well (at least until <a href="http://redhanded.hobix.com/inspect/SymbolIs_aString.html"><code>Symbol &lt; String</code></a>)</li> <li>Communication patterns &#45;&#45; synchronous communication is not a good fit for a Rinda architecture (e&#46;g&#46;, a request for status)</li> </ul> <h2>Deployment</h2> <p>DRb does not marshal code/behavior (unlike Java and RMI)&#46; This is a limitation that forces you to consider how to use custom objects in the tuples, because the code must be shared (and thus jointly upgraded) across all participants&#46;</p> <p>Multiple processes are probably more reliable for the various components of the architecture (RingServer, TupleSpace, clients) rather than using green threads, although this is just a hypothesis&#46;</p> <p>The TupleSpace is the single point of failure &#45;&#45; if the process with it crashes, when it starts back up, it&#8217;s likely to have a new DRb URL, so it&#8217;s helpful to have a proxy around the tuple space in clients that can rediscover it if it crashes&#46;</p> <p>Be wary of multiple ring servers on the same subnet! Behavior may be unexpected&#46; You may notbe using the tuple space that you wanted, and when the other ring server goes away, so does your tuple space&#46;</p> <p>DRb does not have any security built into it, such as unforgeable object IDs, encrypted transport, authentication, etc&#46; This can be a problem in some situations&#46;</p> <p>There is no persistence by default, so consider adding some for crash resistance, or deal with occasional loss of tuples&#46;</p> <p>There are no transactions, so the requester will never know if it still processing or was lost&#46;</p> <p>As Ruby matures and gains exposure, some libraries that have been good enough for a while may need reconsideration&#46; As a case in point, Rinda and DRb haven&#8217;t been updated since February of 2004&#46;</p> <h2>Q &amp; A</h2> <p><em>Q&#46; Are write/take atomic?</em> Yes, if you timeout, the tuple will still be there&#46; Two workers cannot get the same tuple&#46;</p> <p><em>Q&#46; Where would you use this instead of traditional message queues (reinvent the wheel)?</em> There&#8217;s more flexibility in this architecture&#46; (Justin Gehtland) In this particular case, they have a JMS backend, but the Ruby code could not assume connectivity to that backend&#46;</p> <p><em>Q&#46; Is there a common correlator design pattern?</em> Tie response types to request types to limit the pool of potential matches&#46; In the situation where there is a single requester, it&#8217;s simple to just generate sequential numbers&#46; In a P2P situation, you may need to use a hostname or PID to help distinguish&#46; [Sounds like a GUID/UUID system to me&#46;]</p> <p><em>Q&#46; Have you used expiry dates to grab abandoned tuples?</em> No, sounds like an interesting possibility&#46;</p> Sat, 21 Oct 2006 19:01:35 +0000 urn:uuid:ec8eface-3fb9-477d-8ad8-e91e4c5c9a1d Nick Sieger http://blog.nicksieger.com/articles/2006/10/21/rubyconf-rinda-in-the-real-world rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/89 RubyConf: Your Ruby in My CLR <p><strong>John Lam</strong> wanted to build a photo&#45;flash&#45;card application using Avalon and Indigo and Flickr, but also using Ruby as the implementation language&#46; So along the way he decided to build an interop layer (a bridge) between Ruby and the CLR to do it&#46;</p> <p>Now that John has <a href="http://www.iunknown.com/articles/2006/10/20/dynamic-languages-microsoft-and-me">joined Microsoft</a>, his new mission (bigger picture) is to further dynamic language implementations on the CLR&#46;</p> <h2>Bridging type systems</h2> <ul> <li><p>Dynamic methods in the CLR allow you to do better than simply invoking the reflection API&#46;</p> <pre><code>Ruby | C | CLR ============================================ shadow class | dynamic method | instance </code></pre></li> <li><p>Polymorphic inline caching &#45;&#45; caching method dispatches on different call sites based on the assumption that types don&#8217;t change that often</p></li> <li>Generate shadow classes and method stubs using <code>const_missing</code> and <code>method_missing</code></li> <li>Overload resolution happens in the method shims (a one time cost) to choose, e&#46;g&#46;, which constructor to use for <code>System::Collections::ArrayList.new</code></li> <li>Integration is done to make the CLR feel more Rubyish</li> </ul> <h2>Implementation</h2> <ul> <li><p>This changes identity (proxied object):</p> <pre><code>ArrayList.new.as(IEnumerable) </code></pre></li> <li><p>This is less Rubyish, but identity is preserved:</p> <pre><code>IEnumerable.get_enumerator(ArrayList.new) </code></pre></li> </ul> <p>There are trade&#45;offs and warts to a bridge approach to Ruby integration on top of a platform such as the CLR: there is a need to inject artificial type information occasionally to be able to construct CLR objects (e&#46;g&#46;, arrays &#45;&#45; <code>Array.of(Int32).new(3)</code>)&#46; Generics are evil! Simple stuff doesn&#8217;t seem so bad: <code>List.of(Int32).new</code>, but there&#8217;s more pain to be had (see John for details)&#46; John also built a RubyInline&#45;like implementation for the CLR languages too, to allow for getting things done (even if it&#8217;s dirty)&#46; Finally, method overloading is a problem, especially when there is no equivalent Ruby type &#45;&#45; this gave way to <code>instance_shim</code> which is a sort of aliasing method that mixes in type metadata for use by the interop layer&#46;</p> <p>On the other hand, there are many places where Ruby (even in bridged mode) can make the experience of developing on the CLR better&#46; Implementing CLR interfaces is a feature that allows Ruby objects to cross to the CLR side, (e&#46;g&#46;, adding IEnumerable to Ruby Array)&#46; Performance across the CLR boundary (marshalling data) is ~100 times slower than C#, but still fast (3 million calls/second)&#46; Huge benefits are gained from using DSLs in Ruby to help with the implementation of the interop layer&#46; Also, RubyCLR allows mixing in methods into CLR types, so we can re&#45;skin APIs that feel clunky in Ruby&#46; This is really leveraging the power of Ruby in the best possible way&#46;</p> <p>My take is that it looks like the RubyCLR project will probably not be seeing much further development, unless John finds a willing maintainer &#45;&#45; but this is speculation, I haven&#8217;t confirmed with John&#46; Yet, the problem of impedance matching between type systems is a recurring theme in the dynamic language arena, and so John&#8217;s work is valuable in helping us to understand this issue&#46;</p> <h2>More Info</h2> <ul> <li><a href="http://www.rubyclr.com/">http://www&#46;rubyclr&#46;com/</a></li> <li><a href="http://www.iunknown.com/">http://www&#46;iunknown&#46;com/</a></li> </ul> Mon, 23 Oct 2006 14:16:00 +0000 urn:uuid:b565842e-e6dc-4ddf-bc06-69de35a90870 Nick Sieger http://blog.nicksieger.com/articles/2006/10/23/rubyconf-your-ruby-in-my-clr ruby rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/97 RubyConf 2006 Begins <p>The RubyConf room is filling up this morning&#46; I&#8217;ll be doing my best to live&#45;blog the conference here so stay tuned!</p> <p><a href="http://www.flickr.com/photos/nicksieger/274770531/" title="Photo Sharing"><img src="http://static.flickr.com/110/274770531_01f9ba4a44_m.jpg" width="240" height="160" alt="DSCF4909.JPG" /></a></p> <p><a href="http://www.flickr.com/photos/nicksieger/274770462/" title="Photo Sharing"><img src="http://static.flickr.com/79/274770462_957803fcd8_m.jpg" width="240" height="160" alt="DSCF4908.JPG" /></a></p> Fri, 20 Oct 2006 19:04:00 +0000 urn:uuid:0de6115d-57e6-482e-9c45-964a94088b5b Nick Sieger http://blog.nicksieger.com/articles/2006/10/20/rubyconf-2006-begins ruby rubyconf rubyconf2006 ruby http://blog.nicksieger.com/articles/trackback/74 RubyConf: History of Ruby <p>Takahashi&#45;san is here to present on the history of Ruby, an apparently thankless task, because none of the other original Rubyists are historians&#46; Takahashi is the co&#45;author of two Japanese books on Ruby, <em>Enjoy Ruby</em> and <em>Ruby Recipe Book</em>&#46; He also has the &#8220;Takahashi method&#8221; of presentation named after him&#46; His talk presented an informative timeline of Ruby, the details of which were a bit tricky to capture&#46; If I transcribed anything erroneously, please let me know&#46;</p> <h2>Pre&#45;history age</h2> <ul> <li>Born 24th of February 1993&#46; Without code! </li> <li>Matz and Keiju&#45;san proposed the name first&#46;</li> <li>Thus one of the philosophies of Ruby came to be &#45;&#45; that the name of things matters&#46; Matz: &#8220;I guess Ruby is cool&#8221;&#46; Keiju: &#8220;I also like coral&#8221;&#46; Matz: &#8220;oops&#8221;&#46;</li> </ul> <h2>Ancient age</h2> <ul> <li>Ruby is in public &#45;&#45; release 21 December 1995 &#45;&#45; ruby&#45;0&#46;95&#46;</li> <li>ruby&#45;list ML was launched&#46; First mail: ruby&#45;0&#46;95 test failed&#46; Subsequently 3 versions of Ruby were released in two days&#46;</li> <li>No CVS repository at the time&#46; Anonymous CVS was to come in 1999&#46;</li> <li>25 December 1996 &#45;&#45; Ruby 1&#46;0 released&#46;</li> <li>1 July 1997: Matz announces that Netlab hired him to be a full&#45;time Ruby developer&#46;</li> <li>22 Septempber 1997: an article was published on Ruby &#45;&#45; the first article on the web about Ruby&#46;</li> <li>15 May 1998: RAA launched, maintained manually by Matz&#46;</li> <li>7 December 1998: Ruby home page was in English, but very simple&#46;</li> </ul> <h2>Middle</h2> <ul> <li>Ruby is spreading in Japan during this time&#46; The community is growing around Japanese programming language designers and programmers who do not understand English&#46; Finally they have a tool that they can embrace and establish their own opinions and choices&#46;</li> <li>27 October 1999: Matz and Keiju&#8217;s book is published, the first Ruby book</li> <li>More Ruby books would follow in 2001&#45;2002 (~20 books &#45;&#45; a bubble)&#46; But the bubble popped in 2003&#46;</li> <li>4 November 1999: Ruby workshop</li> <li>There were some Perl and Ruby/Perl conferences during this time also&#46;</li> <li>26 May 2001: YARPC &#45;&#45; Yet Another Ruby and Perl Conference</li> <li>9 August 2003: Lightweight language (LL) &#45;&#45; lightweight language workshop (LL Saturday) in 2003&#46; PHP, Perl, Ruby and Python were present&#46; LL Weekend, LL Day and Night, and LL Ring would follow in 2004&#45;2006&#46;</li> <li>LL Ring: 300 attendees talking about LLs in a real boxing ring&#46;</li> </ul> <h2>Modern</h2> <ul> <li>Ruby spreads outside of Japan</li> <li>16 Feb 2002 &#45;&#45; ruby&#45;talk ML surpasses ruby&#45;list ML&#46; </li> <li>ruby&#45;talk was started in December of 1998, but the first posts are almost all Japanese authors writing in English&#46;</li> <li>SunWorld in Februrary 1999 has an article entitled &#8220;New choices for scripting&#8221; including Ruby&#46;</li> <li>February 2000: IBM Developerworks article on the &#8220;latest open source gem from Japan&#8221;&#46;</li> <li>InformIT article by Matz also in 2000&#46;</li> <li>15 December 2001: Programming Ruby by the Pragprogs (1st edition of the Pickaxe)&#46;</li> <li>RubyConf&#46;new(2001)</li> <li>Ruby Kaigi &#45;&#45; first Japanese Ruby conference didn&#8217;t happen until 2006, it turns out only because of a dinner of Japanese rubyists at RubyConf 2005 decided that it would be fun&#46;</li> </ul> <h2>Contemporary</h2> <ul> <li>Rails age &#45;&#45; the killer application for Ruby</li> <li>We all know what happened, so we&#8217;ll skip this part&#46;</li> </ul> Fri, 20 Oct 2006 19:06:00 +0000 urn:uuid:ef58cdca-f7a4-49f2-b428-968f05a58130 Nick Sieger http://blog.nicksieger.com/articles/2006/10/20/rubyconf-history-of-ruby ruby rubyconf rubyconf2006 http://blog.nicksieger.com/articles/trackback/75