--- date: "2005-05-12T04:42:59Z" title: Raggle Article, RubyGems Signing, Gah People XML-RPC, and More... --- <p> <a href='http//linuxformat.com/'>Linux Format</a>, <a href='http://bsin.org/'>Alonzo's</a> Linux magazine of choice, has a brief article about <a href='http://raggle.org/'>Raggle</a> in issue 65 (April 2005). They seemed to like it. Guess I'd better fix the UTF-8 munging bug before anyone notices (actually, it's fixed in <a href='http://cvs.pablotron.org/?m=raggle'><acronym title='Concurrent Versioning System'>CVS</acronym></a>). I scanned the review — if you're intereste, you can check it out <a href='http://raggle.org/files/lf65-raggle_article.jpg'>here</a>. </p> <p> Side projects, side projects. A couple weeks ago, I submitted a patch which adds <a href='http://openssl.org/'>OpenSSL</a>-based package signing for <a href='http://rubygems.org/'>RubyGems</a>. A patch against <a href='http://rubygems.org/'>RubyGems 0.8.10</a> is available <a href='/files/rubygems-0.8.10-sign.diff.gz'>here</a> (<a href='/files/rubygems-0.8.10-sign.diff.gz.asc'>signature</a>). I also wrote up some fairly detailed documentation. It's included in the patch, and also <a href='signing_gems.txt'>here</a>. </p> <p> Overall I like the <a href='http://openssl.org/'>OpenSSL</a> support in <a href='http://ruby-lang.org/'>Ruby</a>, although I've managed to uncover a couple of gremlins along the way, most notably missing methods in the <code>PKCS12</code> and <code>ASN1</code> modules. The single biggest problem though, is the lack of documentation; it's even more sparse than the <a href='http://openssl.org/'>OpenSSL</a> documentation. I've done enough crypto stuff that I was able to slog through it, but this is just ridiculous. It's 2005. <a href='http://rdoc.sourceforge.net/'>RDoc</a> exists for a reason — use it. I'll resist the urge to comment on the lack of decent <a href='http://rdoc.sourceforge.net/'>RDoc</a> documentation, because I think <a href='http://pragprog.com/'>pragdave</a> has earned a few gold stars. You know, for that whole <a href='http://pragmaticprogrammer.com/titles/ruby/'>Pickaxe thing</a>. </p> <p> The <a href='http://gah.pablotron.org/'>#gah people page</a> now has an <a href='http://xmlrpc.com/'><acronym title='eXtensible Markup Language/Remote Procedure Call'>XML-RPC</acronym></a> interface, which allows you to (say), quickly build a blogroll of <acronym title='Internet Relay Chat'>IRC</acronym> people, find people in your state, or whatever other pathological idea you can come up with. Full <acronym title='Application Programmer Interface'>API</acronym> documentation (including the <a href='http://xmlrpc.com/'><acronym title='eXtensible Markup Language/Remote Procedure Call'>XML-RPC</acronym></a> endpoint) is available <a href='http://gah.pablotron.org/api/'>here</a>. </p> <p> Speaking of web pages, I really <em>really</em> like the final designs on the <a href='http://redhanded.hobix.com/redesign2005/'>Ruby-Lang 2005 Redesign Blog</a>. The current <a href='http://ruby-lang.org/'><code>ruby-lang.org</code></a> is kind of an eye-sore, so the sooner they replace it, the better. </p> <p> On the nifty software front, I've been playing with <a href='http://openvpn.sf.net/'>OpenVPN</a> and <a href='http://venge.net/monotone/'>Monotone</a>. The former is absolutely incredible; it's easy as piss to configure, completely customizable, fast, uses <a href='http://openssl.org/'>OpenSSL</a>-based X509 certs for identification (both client and server), and as Windows support. Did I mention it's easy to configure, too? I've been using an OpenVPN to tunnel from my laptop to my file server for the last couple of weeks so I can mount my <acronym title='Network File System'>NFS</acronym> exports read-write over wireless. </p> <p> As for <a href='http://venge.net/monotone/'>Monotone</a>, it looks really promising, but it's unbelievably slow. Actually, "ridiculously, horribly, unbearably slow" might be more apt. I know they're working on speed, so in a couple of months, I'm sure things will be bearable. Once that happens, I may seriously consider switching over... </p> <p> Oh yeah, <a href='http://raggle.org/'>Raggle</a>. Work continues on the 0.4 branch. the next stable release (0.4.1) will have the Unicode munging behaving properly (hopefully), and a configurable bookmark system. If I get harassed enough, that might be within the next few weeks :). </p> <p> As for the development version of <a href='http://raggle.org/'>Raggle</a>... Well, that's where all the fun is. Here's a high-level diagram of the various components: </p> <p> <style type='text/css'> /* table style */ table#ng-raggle { text-align: center; border: 1px solid black; padding: 4px; background-color: #ddd; } table#ng-raggle td { text-align: center; border: 1px solid black; padding: 4px; margin: 2px; font-family: arial, verdana, helvetica, sans-serif; font-size: 14px; } /* element styles */ table#ng-raggle td.ruby, table#ng-raggle ul#legend span.ruby { background-color: #faa; } table#ng-raggle td.clib, table#ng-raggle ul#legend span.clib { background-color: #afa; } table#ng-raggle td.dep, table#ng-raggle ul#legend span.dep { background-color: #aaf; } table#ng-raggle td.hdr { background-color: #eee; } table#ng-raggle td.nada { border: 0px; } /* legend style */ table#ng-raggle td#legend { text-align: left; font-size: 12px; border: 0px; } table#ng-raggle ul#legend { margin: 0px; padding: 2px 20px 2px 15px; } table#ng-raggle ul#legend li { padding: 1px; } table#ng-raggle ul#legend span { padding: 0px; margin: 0px; } </style> <table id='ng-raggle'> <tr><td class='ruby' colspan='7'>Next-Gen Raggle</td></tr> <tr> <td class='hdr' colspan='5'>Engine (Squaggle)</td> <td class='hdr' colspan='2'>Interface</td> </tr> <tr> <td class='clib' colspan='4'>Synapse (libsynapse)</td> <td class='dep' colspan='1'>SQLite3-Ruby</td> <td class='hdr' colspan='1'>Console</td> <td class='hdr' colspan='1'>Web</td> </tr> <tr> <td class='clib' colspan='2'>libfeed</td> <td class='dep' colspan='1'>Curl</td> <td class='dep' colspan='1'>SQLite</td> <td class='dep' colspan='1'>SQLite</td> <td class='ruby' colspan='1'>Profanity</td> <td class='dep' colspan='1'>WEBrick</td> </tr> <tr> <td class='clib'>libptime</td> <td class='dep'>expat</td> <td class='nada'> </td> <td class='nada'> </td> <td class='nada'> </td> <td class='dep' colspan='1'>Curses</td> </tr> <tr></tr> <tr> <td colspan='7' id='legend'> <b>Legend</b> <ul id='legend'> <li><span class='ruby'> </span> Written in Ruby</li> <li><span class='clib'> </span> Written in C</li> <li><span class='dep'> </span> External Dependency</li> </ul> </tr> </table> </p> <p> What's new? <a href='http://cvs.pablotron.org/?m=profanity'>Profanity</a> has been added to the diagram, and <a href='http://cvs.pablotron.org/?m=squaggle'>Squaggle</a> has a new dependency, <a href='http://cvs.pablotron.org/?m=libsynapse'>Synapse</a>. Synapse is a C-level library that wraps <a href='http://curl.haxx.se/'>Curl</a> and <a href='http://cvs.pablotron.org/?m=libfeed'>libfeed</a>. This arrangement has a whole lot of advantages; here's a handful of them: </p> <ul> <li>Speed. C is faster than <a href='http://ruby-lang.org/'>Ruby</a>, and the <a href='http://cvs.pablotron.org/?m=libsynapse'>Synapse</a> <acronym title='Application Programmer Interface'>API</acronym> actually passes commands to a child process, so we also avoid the overhead of <a href='http://ruby-lang.org/'>Ruby's</a> green threads (and threads in general).</li> <li>Smaller memory footprint.</li> <li>All sorts of great new <a href='http://curl.haxx.se/'>Curl</a>-related <acronym title='HyperText Transfer Protocol'>HTTP</acronym> features: Digest authentication, GSS-Negotiate authentication (eg, Kerberos), NTLM authentication (Microsoft), SOCKS5 proxy support, tunnelled proxy support, SSL peer-verification control, cookie support (including <a href='http://mozilla.org/'>Mozilla</a> cookie jars), and more.</li> <li>A complete language-agnostic RSS/Atom parsing, fetching, and saving interface. Write your own interface in whatever language you want!</li> </ul> <p> I could keep going, but I just saw the time. I've got to take a look at <code>picard's</code> busted hard drive (yeah, another one), and check on <code>kylie's</code> fancy new off-site backups (thanks, <a href='http://bsin.org/blog/'>Alonzo</a>!). Be sure to check out <a href='http://hellojoseph.com/'>Sean's</a> article, <a href='http://hellojoseph.com/tags-howto.php'>"How I Implemented Tags"</a>. </p>