aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2005-05-12-raggle-article-rubygems-signing-gah-people-xml-rpc-and-more.html
blob: ab24c379d96a67cdda008047b327df2954c321f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
---
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>