---
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 &mdash; 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 &mdash;
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'>&nbsp;</td>
      <td class='nada'>&nbsp;</td>
      <td class='nada'>&nbsp;</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'>&nbsp;&nbsp;&nbsp;</span> Written in Ruby</li>
        <li><span class='clib'>&nbsp;&nbsp;&nbsp;</span> Written in C</li>
        <li><span class='dep'>&nbsp;&nbsp;&nbsp;</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>