ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/schmorpforge/genpage
Revision: 1.75
Committed: Tue Nov 16 02:04:40 2010 UTC (13 years, 7 months ago) by root
Branch: MAIN
Changes since 1.74: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 elmex 1.1 #!/usr/bin/perl
2    
3     umask 022;
4    
5     mkdir "software.schmorp.de", 0755;
6     mkdir "software.schmorp.de/pkg", 0755;
7     mkdir "software.schmorp.de/img", 0755;
8     system "rsync -av *.jpg software.schmorp.de/img/";
9    
10 root 1.69 our %IRC = (
11     anyevent => ["irc.perl.org", "#anyevent", "http://mibbit.com/chat/#anyevent\@irc.perl.org"],
12 root 1.72 # freenode => ["irc.freenode.org", "#schmorp", "http://webchat.freenode.net/?randomnick=1&channels=schmorp&prompt=1", ", users <tt>schmorp</tt> and <tt>elmex</tt>"],
13     freenode => ["irc.schmorp.de", "#schmorpforge", "http://chat.schmorp.de/?channels=schmorpforge", ", users <tt>schmorp</tt> and <tt>elmex</tt>"],
14 root 1.71 rxvt => ["irc.freenode.org", "#rxvt-unicode", "http://webchat.freenode.net/?randomnick=1&channels=rxvt-unicode&prompt=1", ""],
15     rxvtdev => ["irc.freenode.org", "#rxvt-unicode-dev", "http://webchat.freenode.net/?randomnick=1&channels=rxvt-unicode-dev&prompt=1", " <b>(no support, development only)</b>"],
16 root 1.69 );
17    
18 elmex 1.1 sub hdr($$) {
19     print <<EOF;
20     <?xml version='1.0' encoding='utf-8'?>
21     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
22     <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
23     <head>
24     <title>$_[0]</title>
25     <style type='text/css'>
26     body {
27     background: white;
28     color: black;
29     font-family: Arial, Helvetica, sans-serif;
30     font-size: 12pt;
31     }
32    
33     .bg-ede { background: url(/img/ede.jpg) no-repeat; padding: 20px; width: 100%; height: 82px; }
34     .bg-perl { background: url(/img/perl.jpg) no-repeat; padding: 20px; width: 100%; height: 194px; }
35     .bg-bluete { background: url(/img/bluete.jpg) no-repeat; padding: 20px; width: 100%; height: 148px; }
36    
37     a:link { color: #00f; }
38     a:visited { color: #008; }
39     a:hover { color: #800; }
40     a:active { color: #f00; }
41    
42 root 1.48 .back {
43     margin: 0;
44     font-size: 8pt;
45     }
46    
47     h1 {
48     color: #034;
49     }
50     .short-desc {
51     font-weight: bold;
52     padding: 3px 3px 3px 8px;
53     margin: 1em 1px 1px 13px;
54     }
55     h2 {
56     color: #069;
57     font-weight: bold;
58     border: solid red;
59     border-width: 0 0 0 12px;
60     padding: 3px 3px 3px 8px;
61     margin: 1em 1px 1px 1px;
62     }
63     p {
64     padding: 3px 3px 3px 8px;
65     margin: 1em 1px 1px 13px;
66     }
67     h3 { color: #034; }
68     h4 { color: #034; }
69    
70 elmex 1.1 img { display: block; }
71    
72 root 1.48 .resources {
73     margin-left: 13px;
74     margin-right: 13px;
75     padding: 3px 3px 3px 8px;
76     border-spacing: 1px 2px;
77     }
78    
79     .rr {
80     background: #eef;
81     padding: 1px 1em 1px 1ex;
82     }
83    
84     tt.icon {
85     display: block;
86     font-family: "Andale Mono", "Lettergothic", monospace;
87     border: 1px solid #88f;
88     background: #ccf;
89     padding: 1px 1em 1px 1em;
90     margin-right: 0;
91     text-align: center;
92     width: 4en;
93     }
94    
95 elmex 1.1 tt { font-family: "Andale Mono", "Lettergothic", monospace; }
96    
97 root 1.48 .overview {
98     margin-top: 1em;
99     margin-left: 13px;
100     margin-right: 13px;
101     padding: 3px 3px 3px 8px;
102     border-spacing: 1px 2px;
103     }
104    
105     .overview th { border-top: 1px dashed #aaa; vertical-align: top; text-align: left; padding: 0.2ex; }
106     .overview td { border-top: 1px dashed #aaa; vertical-align: top; text-align: left; padding: 0.2ex; }
107 elmex 1.1
108     hr.footer { display: none; }
109     .footer { font-size: 8pt; border-top: 1px solid red; }
110     </style>
111     </head>
112     <body>
113 root 1.9 <p class='back'><a href='/'>Schmorpforge Ta-Sa Software Repository</a></p>
114 elmex 1.1 <h1 class="$_[1]">$_[0]</h1>
115     <div style="text-align: center; float: right; margin-left: 1em; margin-bottom: 1em">
116 root 1.63 <!--
117 root 1.56 <a title="Mach mit!" href="http://www.piratenpartei.de/navigation/politik/unsere-ziele">
118 root 1.55 <img src="http://res.tst.eu/denke_selbst.gif" alt="Werde Pirat!" width="468" height="60" border="0" />
119     </a>
120     <br />
121 root 1.63 -->
122 root 1.41 <a href="http://www.piratenpartei.de/navigation/politik/unsere-ziele">
123 root 1.55 <img src="http://res.tst.eu/piraten1.png" alt="Piratenpartei" width="468" height="60" border="0" />
124 root 1.41 </a>
125     <br />
126 elmex 1.1 <a href="http://www.deliantra.net/">
127     <img src="http://www.deliantra.net/images/deliantra.png" border="0" alt="Deliantra Free MMORPG" style="display: inline"/>
128     <br />
129     The free as in beer, liberal, code &amp; content retro-style graphical MMORPG :)
130     </a>
131     </div>
132     EOF
133     }
134    
135     sub ftr {
136     print <<EOF;
137     <hr class='footer'/>
138     <p class='footer'>
139     Contact for this page: <a href="mailto:schmorpforge\@schmorp.de">Marc Lehmann &lt;schmorpforge\@schmorp.de&gt;</a>.
140     </p>
141     </body>
142     </html>
143     EOF
144     }
145    
146     $_ = <DATA>;
147     for (;defined $_;) {
148     my ($name, @args) = split /\s+/;
149    
150     next unless $name;
151    
152     my $desc = "";
153     $desc .= $_ while (defined ($_ = <DATA>) and !/^\S/);
154     $desc =~ s/^(.*?)\n\s*\n//s
155     or die "malformed desc in $name: $desc";
156    
157     my $short = $1;
158    
159     $index{$name} = "<tr><th id='$name'><a href='pkg/$name.html'>$name</a></th><td>$short</td></tr>";
160    
161     open STDOUT, ">", "software.schmorp.de/pkg/$name.html"
162     or die "software.schmorp.de/pkg/$name.html: $!";
163    
164 root 1.48 my $bg = (grep /cpan/, @args) ? "bg-perl" : "bg-ede";
165     hdr $name, $bg;
166 elmex 1.1
167     print <<EOF;
168 root 1.48 <h2>$name</h1>
169 elmex 1.1 <p class='short-desc'>$short</p>
170    
171     <h2>Blurb</h2>
172     <p class='blurb'>$desc</p>
173 root 1.47 <h2>Resources</h2>
174 root 1.48 <table class='resources'>
175 elmex 1.1 EOF
176 elmex 1.5 if (grep /git/, @args) {
177     print <<EOF;
178 elmex 1.58 <tr><td><tt class="icon">GIT</tt></td><td class='rr'><a href='http://git.ta-sa.org/git/$name/'>Browsable GIT repository '$name'</a></li></tr>
179 root 1.48 <tr><td><tt class="icon">GIT</tt></td><td class='rr'>Read-only GIT checkout: <tt>&#160;git-clone http://git.ta-sa.org/$name.git</tt>
180     </td></tr>
181 elmex 1.58 <!-- <tr><td><tt class="icon">CVS</tt></td><td class='rr'>Contributor CVS access (command requires CVS version &gt;= 1.12.11):<br />
182 elmex 1.33 <tt>cvs -d ":ext;CVS_SERVER=git-cvsserver:USER\@ruth.plan9.de/gitroot/$name.git" co -d $name master</tt>
183 elmex 1.58 </td></tr> -->
184 elmex 1.5 EOF
185     } else {
186     my $modules = $name;
187     $modules = "$1" if grep /modules\((.*)\)/, @args;
188 elmex 1.1
189 elmex 1.5 print <<EOF;
190 root 1.48 <tr><td><tt class="icon">CVS</tt></td><td class='rr'><a href='http://cvs.schmorp.de/$name'>Browsable CVS module '$name'</a></td></tr>
191     <tr><td><tt class="icon">CVS</tt></td><td class='rr'>Anonymous CVS:
192     <tt>&#160;cvs -z3 -d :pserver:anonymous\@cvs.schmorp.de/schmorpforge co $modules</tt>
193 elmex 1.1
194     <small>
195    
196 root 1.30 <!--
197 elmex 1.1 <p>The warning
198     <b>cvs checkout: warning: cannot write to history file /schmorpforge/CVSROOT/history: Permission denied</b>
199     is expected and harmless, just ignore it. It simply means you have no write access to the repository.
200     </p>
201 root 1.30 -->
202 elmex 1.1
203 root 1.48 <!--
204 elmex 1.1 <p>The CVS server moved again on 2008-02-21, you can use the following
205     (untested) snippet to update your CVS checkout. Run it in the top level
206     checked out directory:</ br>
207    
208     <pre>
209     find . -name CVS | xargs -I% find % -name Root |
210     xargs perl -i -pe 's%:pserver:anonymous\\\@cvs.schmorp.de:636/schmorpforge%:pserver:anonymous\\\@cvs.schmorp.de:/schmorpforge%'</pre>
211     </p>
212 root 1.48 -->
213 elmex 1.1
214     </small>
215    
216 root 1.48 </td></tr>
217 elmex 1.1 EOF
218 elmex 1.5 }
219 elmex 1.1
220 root 1.69 my @irc;
221    
222 root 1.48 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://dist.schmorp.de/$name/'>File Releases</a></td></tr>\n"
223 elmex 1.1 if grep /dist/, @args;
224 root 1.48 print "<tr><td><tt class='icon'>CPAN</tt></td><td class='rr'><a href='http://www.cpan.org/modules/by-authors/Marc_Lehmann/'>File Releases (CPAN)</a></td></tr>\n"
225 elmex 1.5 if grep /cpan$/, @args;
226 root 1.48 print "<tr><td><tt class='icon'>CPAN</tt></td><td class='rr'><a href='http://www.cpan.org/modules/by-authors/id/E/EL/ELMEX/'>File Releases (CPAN)</a></td></tr>\n"
227 elmex 1.5 if grep /cpan-elmex/, @args;
228 elmex 1.1 for (@args) {
229 root 1.69 if (/list\((.*?)\)/) {
230 root 1.48 print "<tr><td><tt class='icon'>LIST</tt></td><td class='rr'><a href='http://lists.schmorp.de/mailman/listinfo/" . ($1 || $name) . "'>Mailing List '" . ($1 || $name) . "'</a></td></tr>\n";
231 root 1.47 }
232 root 1.69 if (/irc\((.*?)\)/) {
233     push @irc, $1;
234     }
235     }
236     push @irc, "freenode" unless @irc;
237     for (@irc) {
238     my ($server, $channel, $url, $comment) = @{ $IRC{$_} or die };
239     print "<tr><td><tt class='icon'>IRC</tt></td><td class='rr'>Server <a href='$url'><tt><b>$server</b></tt>, channel <tt>$channel</tt></a>$comment <b>(say hi and <i>wait a few minutes or hours</i>)</b></td></tr>\n";
240 elmex 1.1 }
241 root 1.69
242 root 1.48 print "</table>";
243 elmex 1.1
244 elmex 1.4 if (my @files = grep $_, map /(cvs-co|cvs-pod|git-pod|git-co)\((\S+)\)/ && [$1, $2], @args) {
245 root 1.48 print "<h2>Additional Documents</h2><table class='resources'>";
246 elmex 1.1
247     for (@files) {
248     my ($type, $arg) = @$_;
249    
250     if ($type eq "cvs-co") {
251 root 1.48 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://cvs.schmorp.de/$name/$arg'>$arg</a></td></tr>";
252 elmex 1.4
253 elmex 1.1 } elsif ($type eq "cvs-pod") {
254     my ($file, $desc) = $arg =~ /(.*),(.*)/ ? ($1, $2) : ($arg, $arg);
255     $desc ||= "<b>Main Manual Page</b>";
256 root 1.48 print "<tr><td><tt class='icon'>POD</tt></td><td class='rr'><a href='http://pod.tst.eu/http://cvs.schmorp.de/$name/$file'>$desc</a></td></tr>";
257 elmex 1.4
258 elmex 1.3 } elsif ($type eq 'git-co') {
259 root 1.48 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://git.ta-sa.org/$name/$arg'>$arg</a></td>";
260 elmex 1.5
261 elmex 1.4 } elsif ($type eq "git-pod") {
262     my ($file, $desc) = $arg =~ /(.*),(.*)/ ? ($1, $2) : ($arg, $arg);
263     $desc ||= "<b>Main Manual Page</b>";
264 root 1.48 print "<tr><td><tt class='icon'>POD</tt></td><td class='rr'><a href='http://pod.tst.eu/http://git.ta-sa.org/$name/$file'>$desc</a></td></tr>";
265 elmex 1.4
266 elmex 1.1 }
267     }
268    
269 root 1.48 print "</table>";
270 elmex 1.1 }
271    
272     ftr;
273     }
274    
275     open STDOUT, ">software.schmorp.de/index.html";
276    
277 root 1.48 hdr "Project List", "bg-bluete";
278 elmex 1.1
279     print <<EOF;
280    
281 root 1.48 <h2>About</h2>
282     <p class='blurb'>This page briefly documents the Schmorpforge Ta-Sa Software Repository and
283 elmex 1.1 lists all projects available here.</p>
284    
285 root 1.48 <table class='resources'>
286 root 1.50 <tr><td><tt class='icon'>CVS</tt></td><td class='rr'>All CVS modules can be browsed <a href="http://cvs.schmorp.de/">here</a></td></tr>
287     <tr><td><tt class='icon'>GIT</tt></td><td class='rr'>All GIT repositories can be found <a href="http://git.ta-sa.org/">here</a></td></tr>
288     <tr><td><tt class='icon'>FILE</tt></td><td class='rr'>All file releases can be found <a href="http://dist.schmorp.de/">here</a> or on CPAN (for Perl modules)</td></tr>
289     <tr><td><tt class='icon'>LIST</tt></td><td class='rr'>All mailinglists can be found <a href="http://lists.schmorp.de/mailman/listinfo">here</a></td></tr>
290     <!--<tr><td><tt class='icon'>WIKI</tt></td><td class='rr'>The Wiki can be found <a href="http://wiki.schmorp.de/">here</a></td></tr>-->
291 root 1.72
292     <!--<tr><td><tt class='icon'>IRC</tt></td><td class='rr'>Server <a href='http://webchat.freenode.net/?randomnick=1&amp;channels=schmorp&amp;prompt=1'><tt><b>irc.freenode.net</b></tt>, channel <tt>#schmorp</tt></a>, users <tt>schmorp</tt> and <tt>elmex</tt> <b>(say hi and <i>wait a few minutes or hours</i>)</b><br/>Other project-specific IRC servers are listed on their respective project page.</td></tr>-->
293     <tr><td><tt class='icon'>IRC</tt></td><td class='rr'>Server <a href='http://chat.schmorp.de/?channels=schmorpforge'><tt><b>irc.schmorp.de</b></tt>, channel <tt>#schmorpforge</tt></a>, users <tt>schmorp</tt> and <tt>elmex</tt> <b>(say hi and <i>wait a few minutes or hours</i>)</b><br/>Other project-specific IRC servers are listed on their respective project page.</td></tr>
294 root 1.50 EOF
295    
296     print <<EOF;
297 root 1.48 </table>
298    
299     <h2>Project List</h2>
300     <table class='overview'>
301 elmex 1.1 EOF
302    
303     print $index{$_} for sort { (lc $a) cmp (lc $b) } keys %index;
304    
305     print "</table>";
306     ftr;
307    
308     __DATA__
309 root 1.71 rxvt-unicode dist list(rxvt-unicode) cvs-pod(doc/rxvt.1.pod,) cvs-pod(doc/rxvt.7.pod,FAQ) cvs-pod(src/urxvt.pm,Perl) cvs-co(Changes) irc(rxvt) irc(rxvtdev)
310 root 1.73 rxvt-unicode is a fork of the well known terminal emulator rxvt.
311 elmex 1.1
312     <p>If you have a problem, please have a look at the
313     <a href="http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.html">FAQ</a>
314     <em>first</em>.</p>
315    
316     Its main features (many of them unique) over rxvt are:
317    
318     <ul>
319     <li>Stores text in Unicode (either UCS-2 or UCS-4).</li>
320     <li>Uses locale-correct input, output and width: as long as your system supports the locale,
321     rxvt-unicode will display correctly.</li>
322     <li>Daemon mode: one daemon can open multiple windows on multiple displays, which
323     improves memory usage and startup time considerably.</li>
324     <li>Embedded perl, for endless customization and improvement opportunities, such as:
325     <ul>
326     <li>Tabbed terminal support.</li>
327     <li>Regex-driven customisable selection that can properly select shell arguments, urls etc.</li>
328     <li>Selection-transformation and option popup menus.</li>
329     <li>Automatically transforming the selection once made.</li>
330     <li>Incremental scrollback buffer search.</li>
331     <li>Automatic URL-underlining and launching.</li>
332     <li>Remote pastebin, digital clock, block graphics to ascii filter and
333     whatever you like to implement for yourself.</li>
334     </ul>
335     </li>
336     <li>Crash-free. At least I try, but rxvt-unicode certainly crashes much less often than
337 root 1.73 rxvt and its many forks, and reproducible bugs get fixed immediately.</li>
338 elmex 1.1 <li>Completely flicker-free.</li>
339     <li>Re-wraps long lines instead of splitting or cutting them on resizes.</li>
340     <li>Full combining character support (unlike xterm :).</li>
341     <li>Multiple fonts supported at the same time: No need to choose between
342     nice japanese and ugly latin, or no japanese and nice latin characters :).</li>
343     <li>Supports Xft and core fonts in any combination.</li>
344     <li>Can easily be embedded into other applications.</li>
345     <li>All documentation accessible through manpages.</li>
346     <li>Locale-independent XIM support.</li>
347     <li>Many small improvements, such as improved and corrected terminfo, improved secondary screen modes,
348     italic and bold font support, tinting and shading.</li>
349     <li>Encapsulation of privileged operations in a separate process (improves security).</li>
350     <li>Optimised for local <i>and</i> remote connections.</li>
351     </ul>
352    
353     <br />
354     And its main <em>missing</em> features (which users request but are not (yet?) implemented) are:
355    
356     <ul>
357     <li>Complex script support, such as arabic or tibetian - more info is needed. (use mlterm)</li>
358     <li>Right-to-Left rendering - more info is needed. (use mlterm)</li>
359     <li>IIIMF (Intranet/Internet Input Method Framework) support. (use scim)</li>
360     </ul>
361    
362     <br />
363    
364     There is an IRC channel for discussion on <a
365     href='irc://irc.freenode.net/rxvt-unicode'><tt>irc.freenode.net
366     #rxvt-unicode</tt></a>.
367    
368 root 1.47 libptytty dist list(rxvt-unicode) cvs-pod(doc/libptytty.3.pod) cvs-co(Changes)
369 elmex 1.1 libptytty is an offspring of rxvt-unicode that handles pty/tty/utmp/wtmp/lastlog handling
370     in mostly OS-independent ways, so it's less of a hassle for you :)
371    
372 root 1.36 gtkbfc cvs-pod(README)
373 elmex 1.1 Gtk+ bash file chooser replacement.
374    
375     <b>gtkbfc</b> is a hack that replaces the dreaded, slow and hard-to-use GTK+
376     file chooser by a rxvt-unicode window with a little script that lets you use
377     readline tab-completion to enter filenames.
378    
379     Again, its a dire hack and will not work with all programs. It does work
380     for gimp, firefox, gedit at least, though.
381    
382 root 1.69 Async-Interrupt cpan cvs-pod(Interrupt.pm,) cvs-co(Changes) list(anyevent) irc(anyevent)
383 root 1.42 Allow C/XS libraries to interrupt perl asynchronously.
384    
385     This is a module implementing a rarely-needed, very advanced technique
386     to interrupt a running perl interpreter from another thread, or similar,
387     context, at very low overhead.
388    
389 elmex 1.1 CV cpan cvs-pod(bin/cv,) cvs-co(Changes)
390     Gtk2::CV is a perl module that implements an image viewer.
391    
392     It comes with its own demo app, named <tt>cv</tt>, which is loosely
393     modeled after the classic <tt>xv</tt>, although it displays images much
394     faster than the great original. Stable releases are also found on CPAN.
395    
396     kgsueme cpan list(kgsueme) cvs-co(Changes)
397     This perl module is about reverse engineering the
398     <a href="http://cvs.schmorp.de/kgsueme/doc/protocol.html">protocol</a>
399     (<a href="http://cvs.schmorp.de/kgsueme/doc/protocol.xml">xml source</a>)
400     of the popular <a href="http://kgs.kiseido.com">Kiseido Go Server</a>.
401    
402     It features a sample Gtk+2 client (<a
403     href="http://kgsueme.schmorp.de/screenshot.jpg">screenshot</a>), a gtp
404     and a igs interface. It mostly focuses on documenting the protocol and
405     delivering a stable reference implementation which makes it easy to write
406     your own clients, bots and so on. It also contains Gtk2 modules for
407     KGS-independent rendering of beautiful Go boards. For a introduction to
408     the game of go, look <a href="http://playgo.to/interactive/">here</a>.
409    
410     Net-Knuddels cvs-pod(Net/Knuddels.pm,)
411     This perl module provides an API for group communications using the
412     <a href="http://www.knuddels.de/">www.knuddels.de</a> protocol. It is outdated
413     and only provided as reference.
414    
415     This module implements the knuddels.de chat protocol. Since it was created
416     the protocol changed in unknown ways, so this module no longer works. It is
417     provided as reference, though, in case the protocol didn't change much,
418     so one can learn about the protocol.
419     It could be used to write Knuddels clients, bots and even servers
420     (although the latter doesn't make much sense, the protocol is rather
421     ugly. If you want to implement your own group communication server, use
422     IRC instead).
423    
424 root 1.69 AnyEvent-IRC cpan-elmex git-pod(lib/AnyEvent/IRC.pm,) git-co(Changes) git-co(samples/anyeventirccl) git-co(samples/anyeventirc) list(anyevent) irc(anyevent)
425 elmex 1.1 This module provides an alternative to the Net-IRC and Net-IRC2
426 elmex 1.35 modules. Its design rationale is offering a 100% non-blocking
427 elmex 1.1 callback-based interface, RFC-compliant parsing and a lightweight
428     approach to modularity and reusability.
429    
430 root 1.37 Guard cpan cvs-pod(Guard.pm,) cvs-co(Changes)
431     This small module implements scope and object guards, that is, code blocks
432     that are executed when a scope is being exited (or an object is destroyed).
433    
434     Much effort was invested into these guards behaving "sensibly" in the
435     presence of thrown exceptions, errors and other adverse conditions, as
436     well as into good performance.
437    
438 root 1.67 common-sense cpan cvs-pod(sense.pm,) cvs-co(Changes)
439 root 1.66 This module implements some sane defaults for Perl programs, as defined
440     by two typical (or not so typical - use your common sense) specimens of
441     Perl coders.
442    
443 elmex 1.1 Net-IRC-Server cvs-pod(Net/IRC/Server.pm,)
444     This module provides a simple API for handling the IRC Protocol
445     aiming at implementing lightweight IRC-Servers.
446    
447     PApp-SQL cpan cvs-pod(SQL.pm,)
448     Absolutely easy yet fast and powerful SQL access.
449    
450     This module wraps the DBI prepare/bind/execute calls into a single "sql_exec" call,
451     complete with statement caching, so you get the efficiency of prepare, the safety
452     of using placeholders and the speed of bound result values in a simple call.
453    
454     Example:
455    
456     <pre>
457     my $st = sql_exec \my ($id, $name),
458     "select id, name from db where name like %",
459     "pfx%";
460     while ($st->fetch) {
461     print "$id $name\n";
462     }
463     </pre>
464    
465     libcoro cvs-co(README) cvs-co(coro.h)
466     This C-library implements coroutines (cooperative multitasking) in a
467     portable fashion.
468    
469     As long as your system implements the <tt>ucontext</tt> (Unix) or the
470 root 1.72 older <tt>sigaltstack</tt> interfaces it should work out of the box,
471     with minimal configuration (it consists of only a single <tt>.h</tt> and
472     a single <tt>.c</tt> file). For the broken systems, it also supports
473     a slow pthreads-based system and (optional) assembly backends for
474     higher speed on some systems. It is known to run on a wide variety of
475     unix systems (SunOS, IRIX, GNU/Linux, HP-UX, FreeBSD, NetBSD, OpenBSD)
476     and also on Windows, does not require any assembly language and is
477     architecture-independent.
478 elmex 1.1
479 root 1.13 deliantra/server cvs-co(README) cvs-co(Changes) cvs-co(COPYING.Affero)
480 elmex 1.1 The <a href="http://www.deliantra.net/">Deliantra</a> game server.
481    
482     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
483    
484 root 1.13 deliantra/maps cvs-co(Changes) cvs-co(COPYING.Affero)
485 elmex 1.1 The <a href="http://www.deliantra.net/">Deliantra</a> game maps.
486    
487     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
488    
489 root 1.13 deliantra/arch cvs-co(Changes) cvs-co(COPYING.Affero)
490 elmex 1.1 The <a href="http://www.deliantra.net/">Deliantra</a> game resources.
491    
492     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
493    
494 root 1.13 deliantra/Deliantra-Client cvs-pod(bin/deliantra,) cvs-co(Changes)
495 elmex 1.1 A modern, fullscreen client for <a href="http://www.deliantra.net/">Deliantra</a>, written using Perl
496     and leveraging only OpenGL for display and thus being easily portable.
497     See its <a href="http://www.deliantra.net/client.html">homepage</a>.
498    
499     To install it, you need <a href="http://www.libsdl.org">SDL</a>, <a href="http://www.libsdl.org/projects/SDL_mixer/">SDL_mixer</a>,
500     <a href="http://www.libsdl.org/projects/SDL_image/">SDL_image</a>, <a href="http://www.pango.org">PanGo</a> (with freetype2 and
501     cairo backends at the moment), and the BDB, AnyEvent, Pod::POM, EV and
502 root 1.13 <a href="http://software.schmorp.de/pkg/deliantra/Deliantra.html">Deliantra</a> perl modules.
503 elmex 1.1
504 root 1.13 deliantra/Deliantra
505 elmex 1.1 Perl module family for the <a href="http://www.deliantra.net/">Deliantra</a> game.
506    
507     They can be used to read/write/cache archetypes, image packs and map files.
508     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
509    
510 elmex 1.35 deliantra/gde cvs-pod(bin/gde,)
511 elmex 1.1 The <a href="http://www.deliantra.net/">Deliantra</a> editor, written in Perl + Gtk2.
512    
513     The editor for the game Deliantra, written in Perl.
514     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
515    
516 root 1.13 deliantra
517 elmex 1.1 <a href="http://www.deliantra.net/">Deliantra</a> server, archetypes, maps,
518     editor, client and support modules distribution.
519    
520     Follow the link to <a href="http://www.deliantra.net/">Deliantra</a> for background info.
521    
522     cfmaps
523     This is a collection of scripts that I use to create the <a
524     href="http://www.deliantra.net/">Deliantra</a> maps at <a
525     href="http://maps.deliantra.net/">maps.deliantra.net</a>.
526    
527     They are not documented and somewhat specialised, but the scripts might
528     be of some use.
529    
530     Faster cpan cvs-pod(Faster.pm,)
531     A perl module that makes perl run, well, faster, using a very primitive just in time compiler.
532    
533     As the name implies, using this module makes your perl program run
534     faster. Actually, much slower initially, as it compiles every function
535     to C and later to a shared object, but then you can expect a performance
536     increase by 10-50%, depending on what your program does.
537    
538 root 1.34 liblzf cvs-co(README) cvs-co(lzf.h) dist
539 elmex 1.1 LibLZF is a very small data compression library.
540    
541     It consists of only two .c and two .h files and is very easy to
542     incorporate into your own programs. The compression algorithm is very,
543     very fast, yet still written in portable C. More info and the latest
544     release can be found at the <a href="http://liblzf.plan9.de">LibLZF
545     Homepage</a>.
546    
547     root-tail cvs-co(README) cvs-co(Changes)
548     Full-featured program to print text directly to the X11 root window.
549    
550     More info, screenshots, documentation and current releases can be found
551     at the <a href="http://root-tail.plan9.de">root-tail homepage</a>.
552    
553     xcb cvs-co(README) cvs-co(Changes)
554     A fork of the unmaintained xcb (x cut buffers) program implementing better i18n.
555    
556     lmainit cvs-co(NEWS)
557     A sysvinit replacement that can even be configured to be sysvinit-compliant.
558    
559 root 1.54 See <a href="http://home.schmorp.de/marc/lmainit.html">its homepage</a> for more info.
560 elmex 1.1
561     Algorithm-FEC cpan cvs-pod(FEC.pm,) cvs-co(README.fec) cvs-co(Changes)
562     Perl module implementing forward error correction using Vandermonde matrices
563    
564 root 1.69 AnyEvent cpan cvs-pod(lib/AnyEvent.pm,) cvs-pod(lib/AnyEvent/Intro.pod,Introduction/Tutorial) cvs-pod(lib/AE.pm,AE) cvs-co(Changes) cvs-pod(lib/AnyEvent/Util.pm,AnyEvent::Util) cvs-pod(lib/AnyEvent/Handle.pm,AnyEvent::Handle) cvs-pod(lib/AnyEvent/Socket.pm,AnyEvent::Socket) cvs-pod(lib/AnyEvent/DNS.pm,AnyEvent::DNS) cvs-pod(lib/AnyEvent/Impl/EV.pm,AnyEvent::Impl::EV) cvs-pod(lib/AnyEvent/Impl/Event.pm,AnyEvent::Impl::Event) cvs-pod(lib/AnyEvent/Impl/Glib.pm,AnyEvent::Impl::Glib) cvs-pod(lib/AnyEvent/Impl/Tk.pm,AnyEvent::Impl::Tk) cvs-pod(lib/AnyEvent/Impl/Perl.pm,AnyEvent::Impl::Perl) cvs-pod(lib/AnyEvent/Impl/Qt.pm,AnyEvent::Impl::Qt) cvs-pod(lib/AnyEvent/Impl/EventLib.pm,AnyEvent::Impl::EventLib) cvs-pod(lib/AnyEvent/Impl/Irssi.pm,AnyEvent::Impl::Irssi) cvs-pod(lib/AnyEvent/Impl/IOAsync.pm,AnyEvent::Impl::IOAsync) cvs-pod(lib/AnyEvent/Impl/POE.pm,AnyEvent::Impl::POE) list(anyevent) irc(anyevent)
565 elmex 1.1 This module offers a simple API for I/O, timer, signal, child process
566     and completion events, independent of a specific event loop.
567    
568 root 1.39 <p>This module allows module authors to use those events internally
569     without forcing users of the module to use a specific event loop, without
570     adding noticable overhead. Currently supported event loops are EV, Event,
571 root 1.52 Glib/Gtk2, Tk, Qt, Event::Lib, Irssi, IO::Async and POE (and thus also
572     WxWidgets and Prima). It also comes with a very fast (see benchmarks in
573     the main manual page) Pure Perl event loop and doesn't rely on XS, which
574     ensures that your program will always run even when no C-based event loop
575     is available.</p>
576 elmex 1.1
577 root 1.26 <p>In addition to the event core (which might be all you need), AnyEvent
578 root 1.25 comes with an optional, fully asynchronous, pure-perl DNS resolver
579     library supporting UDP, TCP and EDNS0, with many utility functions to
580     "just resolve" stuff without having to instantiate even a resolver object
581 root 1.26 (and including an equivalent of C<getaddrinfo>).</p>
582 root 1.25
583 root 1.26 <p>The AnyEvent::Socket offers utility functions to make handling TCP
584 root 1.25 connections (100% non-blocking, including DNS resolution, with both IPv4
585     and IPv6) and addresses as easy as possible, to the point of making IPv6
586 root 1.26 completely transparent.</p>
587 root 1.25
588 root 1.26 <p>Lastly, AnyEvent::Handle offers a powerful framework for asynchronous and
589 root 1.25 buffered protocol handling. You can push multiple read event handlers
590     to parse your protocol and start TLS/SSL negotiation transparently (and
591 root 1.26 fully non-blocking) at any time, in both server and client mode.</p>
592 root 1.25
593 root 1.69 AnyEvent-FastPing cpan cvs-pod(FastPing.pm,) list(anyevent) irc(anyevent)
594 elmex 1.1 This module implements a very fast and relatively flexible
595     ping (ping as in icmp echo request).
596    
597     This module allows you to quickly send ipv4 and ipv6 pings at a defined
598     rate to whole address ranges. It is fully event-driven (doesn't block
599     the perl interpreter) and can easily generate hundreds of thousands of
600     pings per second. Target specification is done by specifying one or
601     more address ranges, to which pings will be distributed according to a
602     least-load principle.
603    
604     A command line utility (<tt>fastping</tt>) is included.
605    
606 root 1.74 AnyEvent-AIO cpan cvs-pod(AIO.pm,) list(anyevent) irc(anyevent)
607     A perl module providing transparent integration of IO::AIO into AnyEvent.
608    
609     AnyEvent-BDB cpan cvs-pod(BDB.pm,) list(anyevent) irc(anyevent)
610     A perl module providing transparent integration of BDB into AnyEvent.
611    
612     AnyEvent-DBus cpan cvs-pod(DBus.pm,) list(anyevent) irc(anyevent)
613     A perl module providing mostly transparent integration of Net::DBus into AnyEvent.
614    
615     AnyEvent-DBI cpan cvs-pod(DBI.pm,) list(anyevent) irc(anyevent)
616     A perl module providing an asynchronous DBI interface for AnyEvent.
617    
618     This module provides an asynchronous DBI interface for AnyEvent by
619     starting one or more proxy processes that handle trhe actual sql
620     commands.
621    
622     AnyEvent-FCP cpan cvs-pod(FCP.pm,) list(anyevent) irc(anyevent)
623     A perl module implementing a Freenet Client Protocol 2.0 client.
624    
625     AnyEvent-GPSD cpan cvs-pod(GPSD.pm,) list(anyevent) irc(anyevent)
626     A perl module implementing an AnyEvent client for the (pre-xml) GPSD protocol.
627    
628 root 1.75 AnyEvent-Porttracker cpan cvs-pod(Porttracker.pm,) cvs-pos(Porttracker/protocol.pod,) list(anyevent) irc(anyevent)
629 root 1.74 A perl module implementing a client for the Porttracker/PortIQ API protocol.
630    
631     AnyEvent-SNMP cpan cvs-pod(SNMP.pm,) list(anyevent) irc(anyevent)
632     A perl module that transparently integrates Net::SNMP into AnyEvent.
633    
634     In addition to making Net::SNMP AnyEvent-aware, this module also
635     implements advanced rate-limiting that enables you to query many devices
636     in parallel without running into timeouts due to high CPU usage.
637    
638     AnyEvent-Watchdog cpan cvs-pod(Watchdog.pm,) list(anyevent) irc(anyevent)
639     A perl module implementing a watchdog for Perl processes.
640    
641     This module forks your Perl process early during it's startup. It can
642     automatically restart the program on crashes, provide clean restarts
643     requested by the watched program and a number of other small feats.
644    
645 root 1.69 AnyEvent-HTTP cpan cvs-pod(HTTP.pm,) cvs-co(Changes) list(anyevent) irc(anyevent)
646 root 1.31 A simple and plain event based http and https client.
647    
648     This module implements a simple, stateless and non-blocking HTTP
649     client. It supports GET, POST and other request methods, cookies and more,
650     all on a very low level. It can follow redirects supports proxies and
651     automatically limits the number of connections to the values specified in
652     the RFC.
653    
654     It should generally be a "good client" that is enough for most HTTP
655     tasks. Simple tasks should be simple, but complex tasks should still be
656     possible as the user retains control over request and response headers.
657    
658     The caller is responsible for authentication management, cookies (if
659     the simplistic implementation in this module doesn't suffice), referer
660     and other high-level protocol details for which this module offers only
661     limited support.
662    
663 root 1.69 AnyEvent-MP cpan cvs-pod(MP.pm,) cvs-pod(MP/Intro.pod,Introduction/Tutorial) cvs-co(Changes) list(anyevent) irc(anyevent)
664 elmex 1.59 This Perl module (-family) implements a simple message passing framework for Perl.
665    
666     Despite its simplicity, you can securely message other processes running
667     on the same or other hosts.
668    
669     For an introduction to this module family, see the Intro manual page.
670    
671 root 1.69 Coro-MP cpan cvs-pod(MP.pm,) cvs-co(Changes) list(anyevent) irc(anyevent)
672 root 1.62 This Perl module extends the AnyEvent::MP API with a thread-like/erlang-style API.
673    
674     This module implements a thread-like API to AnyEvent::MP that is closer
675     to Erlang than the event-based AnyEvent::MP API. It integrates well into
676     AnyEvent::MP.
677    
678     See the AnyEvent::MP module and tutorial for info about the concepts used
679     in AnyEvent::MP.
680    
681 root 1.69 AnyEvent-DBI cpan cvs-pod(DBI.pm,) cvs-co(Changes) list(anyevent) irc(anyevent)
682 root 1.31 A relatively simple wrapper around DBI to make asynchronous
683     SQL requests.
684    
685     This module implements asynchronous DBI access my forking or executing
686     separate "DBI-Server" processes and sending them requests.
687    
688     It means that you can run DBI requests in parallel to other tasks.
689    
690 root 1.69 AnyEvent-HTTPD cpan-elmex git-pod(lib/AnyEvent/HTTPD.pm,) git-co(Changes) list(anyevent) irc(anyevent)
691 root 1.31 A simple and plain event based http web application server Perl module.
692    
693     This is a very basic HTTP server that allows the user/programmer to install
694     hooks for URL paths to generate the output. It uses AnyEvent to be easily
695     embeddable into other applications. The main objective was to make it
696     easier to make simple HTTP frontends in Perl for Perl programs and Perl modules.
697    
698 root 1.69 AnyEvent-Feed cpan-elmex git-pod(lib/AnyEvent/Feed.pm,) git-co(Changes) list(anyevent) irc(anyevent)
699 elmex 1.58 A RSS/Atom Feed aggregator.
700    
701     This module uses AnyEvent::HTTP and XML::Feed to fetch and parse RSS and Atom
702     feeds. It provides aggregation (detecting of new entries) to provide an easy
703     interface for simple feed readers.
704    
705 root 1.69 AnyEvent-Twitter cpan-elmex git-pod(lib/AnyEvent/Twitter.pm,) git-co(Changes) list(anyevent) irc(anyevent)
706 elmex 1.58 Implementation of the Twitter API for AnyEvent.
707    
708     Provides a simple non-blocking API to access information (aka tweets) provided
709     by <a href="http://www.twitter.com">Twitter</a>.
710    
711 root 1.69 AnyEvent-IGS cpan-elmex git-pod(lib/AnyEvent/IGS.pm,) git-co(Changes) list(anyevent) irc(anyevent)
712 root 1.31 A Perl module that interfaces to the International Go Server.
713    
714 root 1.70 This module is an AnyEvent-based interface to the International Go Server
715 root 1.31 protocol.
716    
717 root 1.69 AnyEvent-EditText cpan-elmex git-pod(lib/AnyEvent/EditText.pm,) git-co(Changes) list(anyevent) irc(anyevent)
718 root 1.44 A Perl module which allows editing any text via an editor in a separate process.
719 root 1.31
720     A utility Perl module that will start a terminal/editor for you and will
721     wait non-blocking for you to finish editing that file. Very useful to embed
722     content edititing in event based programs that have a AnyEvent compatible
723     event loop.
724    
725 root 1.41 Array-Heap cpan cvs-pod(Heap.pm,) cvs-co(Changes)
726     A Perl module that implements C++ STL-like binary heap operations.
727    
728 elmex 1.1 Audio-Play-MPG123 cpan cvs-pod(MPG123.pm,) cvs-co(Changes)
729     A Perl module implementing an interface to mpg123.
730    
731 elmex 1.64 BK git-pod(lib/BK.pm,) git-pod(lib/BK/News.pod,News) git-co(Changes) git-pod(lib/BK/Client.pm,BK::Client) git-pod(lib/BK/Backend.pm,BK::Backend)
732     Bummskraut is a distributed chat/messaging client framework written in Perl
733     using <a href="/pkg/AnyEvent-MP.html">AnyEvent::MP</a>.
734    
735     For more documentation please consult the main manpage (see below). If you
736     want to check on the latest news proceed to the news or changelog (see also
737     below).
738    
739 elmex 1.1 Compress-LZV1 cpan cvs-pod(LZV1.pm,) cvs-co(Changes)
740     A Perl module implementing the LZV1 compression algorithm. See
741     <tt>Compress::LZF</tt> for a better algorithm and module.
742    
743 root 1.53 Compress-LZF cpan cvs-pod(LZF.pm,) cvs-co(Changes)
744     A Perl module implementing the LZF compression algorithm, and simple
745     to use data structure serialising.
746    
747 elmex 1.1 Convert-CD cvs-pod(lib/Convert/CD.pm,) cvs-pod(bin/cvtiso,cvtiso) cvs-co(doc/) cvs-co(Changes)
748     Unfinished Perl project implementing CD image formats. Extracting ISO images
749     already works.
750    
751     Convert-Scalar cpan cvs-pod(Scalar.pm,) cvs-co(Changes)
752     Perl module to convert between different representations of Perl scalars.
753    
754     Convert-UUlib cpan cvs-pod(UUlib.pm,) cvs-co(Changes)
755     Perl interface to the uulib library (a.k.a. uudeview/uuenview), which
756     allows easy decoding of multipart mime, uuencode and a whole lot of
757     differently encoded messages. You basically throw files at it, and
758     it extracts the files in them. This module is used by the popular <a
759     href="www.amavis.org">amavis virus scanner</a>.
760    
761 root 1.69 Coro cpan cvs-co(Changes) cvs-pod(Coro.pm,) cvs-pod(Coro/AIO.pm,Coro::AIO) cvs-pod(Coro/AnyEvent.pm,Coro::AnyEvent) cvs-pod(Coro/BDB.pm,Coro::BDB) cvs-pod(Coro/Channel.pm,Coro::Channel) cvs-pod(Coro/Debug.pm,Coro::Debug) cvs-pod(Coro/EV.pm,Coro::EV) cvs-pod(Coro/Event.pm,Coro::Event) cvs-pod(Coro/Handle.pm,Coro::Handle) cvs-pod(Coro/LWP.pm,Coro::LWP) cvs-pod(Coro/MakeMaker.pm,Coro::MakeMaker) cvs-pod(Coro/RWLock.pm,Coro::RWLock) cvs-pod(Coro/Select.pm,Coro::Select) cvs-pod(Coro/Semaphore.pm,Coro::Semaphore) cvs-pod(Coro/SemaphoreSet.pm,Coro::SemaphoreSet) cvs-pod(Coro/Signal.pm,Coro::Signal) cvs-pod(Coro/Socket.pm,Coro::Socket) cvs-pod(Coro/Specific.pm,Coro::Specific) cvs-pod(Coro/State.pm,Coro::State) cvs-pod(Coro/Storable.pm,Coro::Storable) cvs-pod(Coro/Timer.pm,Coro::Timer) cvs-pod(Coro/Util.pm,Coro::Util) list(anyevent) irc(anyevent)
762 elmex 1.1 A large Perl module family that implements cooperative multitasking in
763     Perl. It supports filehandle and event abstraction and also implements
764     continuations as well as the necessary directives to implement a slightly
765     limited call/cc in Perl.
766    
767 root 1.38 Coro-Mysql cpan cvs-co(Changes) cvs-pod(Mysql.pm,)
768     Lets other threads run while doing mysql requests via DBD::mysql.
769    
770     This perl module patches libmysqlclient/DBD::mysql at runtime to allow
771     multiple Coro-based threads to make database accesses concurrently,
772     instead of blocking the whole process.
773    
774 elmex 1.1 Crypt-Twofish2 cpan cvs-pod(Twofish2.pm,) cvs-co(Changes)
775     A Perl module implementing the twofish encryption algorithm in Perl. It has
776     mostly been superceded by the Crypt::Twofish module. However, it supports
777     an easy and fast CBC mode natively.
778    
779     Digest-Hashcash cpan cvs-pod(Hashcash.pm,) cvs-co(Changes)
780     Perl module to generate and parse <a href="http://www.hashcash.org">hashcashes</a>.
781     Follow the link to learn more. This module is currently faster than
782     the hashcash reference library.
783    
784 root 1.47 EV cpan cvs-pod(EV.pm,) cvs-pod(../libev/ev.pod,libev-documentation) cvs-pod(EV/MakeMaker.pm) cvs-co(Changes) list(libev)
785 root 1.46 A thin wrapper around <a href="/pkg/libev.html">libev</a>, a
786     high-performance event loop. Intended as a faster and less buggy
787     replacement for the Event perl module. Efficiently supports very high
788     number of timers, scalable operating system APIs such as epoll, kqueue,
789     solaris's ports, inotify, eventfd, signalfd, child/pid watchers and much
790     more.
791 elmex 1.1
792     A <a href="http://lists.schmorp.de/mailman/listinfo/libev">mailing
793     list</a> for discussion and support is now available.
794    
795 root 1.47 EV-ADNS cpan cvs-pod(ADNS.pm,) cvs-co(Changes) list(libev)
796 elmex 1.1 An asynchronous stub resolver that integrates efficiently into
797     the EV event loop. Uses adns/libadns as backend.
798    
799 root 1.47 EV-Loop-Async cpan cvs-pod(Async.pm,) cvs-co(Changes) list(libev)
800 root 1.43 Small module that runs an EV event loop in another thread
801     and uses an Async-Interrupt object to signal new events
802     to perl.
803    
804 root 1.47 Net-SNMP-EV cpan cvs-pod(EV.pm,) cvs-co(Changes) list(libev)
805 elmex 1.1 An adaptor that integrates the Net-SNMP Perl module into the EV event loop.
806     Loading it suffices to make background requests in EV programs.
807    
808 root 1.47 libev cvs-co(README) cvs-pod(ev.pod) dist list(libev)
809 elmex 1.1 A full-featured and high-performance (<a
810     href="http://libev.schmorp.de/bench.html">see benchmark</a>) event loop that
811     is loosely modelled after libevent, but without its limitations and bugs. It is
812     used, among others, in the <a href="http://savannah.gnu.org/projects/gvpe">GNU Virtual Private Ethernet</a> and
813     <a href="http://software.schmorp.de/pkg/rxvt-unicode.html">rxvt-unicode</a> packages, and in
814     the Deliantra MORPG Server and Client.
815    
816 root 1.46 Features include child/pid watchers, periodic timers based on wallclock
817     (absolute) time (in addition to timers using relative timeouts), as well
818     as epoll/kqueue/event ports/inotify/eventfd/signalfd support, fast timer
819     management, time jump detection and correction, and ease-of-use.
820 elmex 1.1 <p />
821 root 1.46
822 elmex 1.1 It can be used as a libevent replacement using its emulation API or
823     directly embedded into your programs without the need for complex
824     configuration support. A full-featured and well-documented
825     <a href="EV.html">perl interface</a> is also available.
826     <p />
827     A <a href="http://lists.schmorp.de/mailman/listinfo/libev">mailing
828     list</a> for discussion and support is now available.
829    
830 root 1.47 libeio dist cvs-pod(eio.pod,) cvs-co(eio.h) cvs-co(demo.c) cvs-co(Changes) list(libev)
831 root 1.17 Event-based fully asynchronous I/O library for C (used by IO::AIO).
832 root 1.20 Currently in BETA!
833 root 1.17
834 root 1.18 <p>Libeio is a full-featured asynchronous I/O library
835 root 1.17 for C, modelled in similar style and spirit as <a
836     href="http://software.schmorp.de/pkg/libev.html">libev</a>. Features
837     include: asynchronous read, write, open, close, stat, unlink, fdatasync,
838     mknod, readdir etc. (basically the full POSIX API). sendfile (native on
839 root 1.20 solaris, linux, hp-ux, freebsd, emulated everywehere else), readahead
840 root 1.17 (emulated where not available).</p>
841    
842     <p>It is fully event-library agnostic and can easily be integrated into any
843     event-library (or used standalone, even in polling mode). It is very
844     portable and relies only on POSIX threads.</p>
845    
846 root 1.21 <p>Its code, documentation, integration and portability quality is
847     currently below that of libev, but should soon be ready for use in
848     production environments.</p>
849    
850 elmex 1.1 libspf cvs-co(README)
851     Libspf is a C library that implements the <a
852     href="http://en.wikipedia.org/wiki/Sender_Policy_Framework"> Sender
853     Policy Framework</a>. It allows software to identify and reject forged
854     envelope-from addresses, a typical nuisance in e-mail spam. SPF is
855     defined in Experimental RFC 4408.
856    
857     This is not the original home of libspf, but its author (apparently)
858     has vanished for a few years now, and this place took over as a central
859     place to collect patches and possibly make releases.
860     <p />
861     James Couzens, if you read this and want to take over, feel free to
862     contact <a href="mailto:libspf@schmorp.de">me</a>, I'd be thrilled :)
863    
864     File-Rdiff cpan cvs-pod(Rdiff.pm,) cvs-co(Changes)
865     A Perl module that generates remote signatures and patches files using
866     librsync: basically your interface to librsync.
867    
868 root 1.47 EV-Glib cpan cvs-pod(Glib.pm,) cvs-co(Changes) list(libev)
869 elmex 1.1 This perl module embeds the default Glib mainloop into the EV event loop. This makes it
870     possible to use callbacks or modules using the Glib module (e.g. Gtk2 programs) within EV programs. Just
871     loading it suffices. See the <a href="/pkg/Glib-EV.html">Glib::EV</a> module for the reverse approach.
872    
873 root 1.47 Glib-EV cpan cvs-pod(EV.pm,) cvs-co(Changes) list(libev)
874 elmex 1.1 This perl module patches the default libglib main loop context to use the EV module. This makes
875     it possible to use callbacks or modules using the EV module within Glib and Gtk2 programs. Just
876     loading it suffices. See the <a href="/pkg/EV-Glib.html">EV::Glib</a> module for the reverse approach.
877    
878 root 1.47 Glib-Event cpan cvs-pod(Event.pm,) cvs-co(Changes) list(libev)
879 elmex 1.1 This perl module patches the default libglib main loop context to use the Event module. This makes
880     it possible to use callbacks or modules using the Event module within Glib and Gtk2 programs. Just
881     loading it suffices.
882    
883     GPS
884     Undocumented, unreleased and unfinished-but-working interface to some GPS
885     devices in Perl.
886    
887     Linux-DVB cpan cvs-pod(DVB.pm,) cvs-co(Changes)
888     A perl module that implements a very direct interface to the Linux DVB
889     API. Also contains utility functions to decode SI data.
890    
891     Devel-FindRef cpan cvs-pod(FindRef.pm,) cvs-co(Changes)
892     A Perl module that tries to track down references to perl values. Can
893     be a great aid in debugging leak problems by showing where a value
894     is still being referenced.
895    
896     BDB cpan cvs-pod(BDB.pm,) cvs-co(Changes)
897     A Perl module implementing an interface to BerkeleyDB versions 4.4 and later.
898     Unlike the BerkeleyDB and DB_File modules, this module has a much more
899     C-like interface exposing all the features of the underlying library
900     and also executes all database changes asynchronously using a thread pool.
901    
902     IO-AIO cpan cvs-pod(AIO.pm,) cvs-co(Changes)
903     A Perl module that implements asynchronous I/O using pthreads. Apart
904     from AIO reading and writing, this module also allows asynchronous
905     <tt>stat</tt>, <tt>open</tt>, <tt>unlink</tt> (and more) calls,
906     which often are a substantial blocking problem. See also its (outdated)
907     brother <tt>Linux-AIO</tt>.
908    
909     JSON-XS cpan cvs-pod(XS.pm,) cvs-co(Changes)
910     JSON::XS implements JSON (http://www.json.org) for Perl. Unlike other
911     modules, its primary goal is to encode to syntactically correct JSON and
912     flag invalid JSON while decoding. It ensures round-trip integrity of
913     datatypes while being intuitive to use. Currently being the fastest of the
914     JSON encoders available for Perl, it supports a variety of format options,
915     such as single-line, ASCII-only or pretty-printed and can be tuned for
916     speed or memory usage. It comes with a wealth of documentation describing
917     usage and implementation details.
918    
919 root 1.31 Games-Go-SimpleBoard cpan cvs-pod(SimpleBoard.pm,) cvs-co(Changes)
920     A Perl module representing a go board.
921    
922     This Perl module represents a Go game. It can check for valid moves,
923     capture stones, stores move history and can represent a variety of
924     additional annotations (circles, labels, grayed-out stones etc.).
925    
926 root 1.68 Games-Sokoban cpan cvs-pod(Sokoban.pm,) cvs-co(Changes)
927     A perl module to load/transform/save sokoban levels in various formats.
928    
929     Supports xsb (text), rle, sokevo and a small "binpack" format for input and
930     output and can normalise levels as well as calculate unique IDs.
931    
932 root 1.31 Gtk2-GoBoard cpan cvs-pod(GoBoard.pm,) cvs-co(Changes)
933     A Perl module implementing a go board widget.
934    
935     This Perl module implements a beautiful go board (see <a
936     href="http://data.plan9.de/kgsuemel.jpg">example</a>), implemented as a
937     Gtk2 widget.
938    
939 elmex 1.1 Linux-AIO cpan cvs-pod(AIO.pm,) cvs-co(Changes)
940     A Perl module that implements asynchronous I/O using <tt>clone</tt>
941     on Linux. Apart from AIO reading and writing, this module also allows
942     asynchronous <tt>stat</tt>, <tt>open</tt> and <tt>close</tt> (and more)
943     calls, which often are a substantial problem. See also its (newer) brother
944     <tt>IO-AIO</tt>.
945    
946     Linux-Inotify2 cpan cvs-pod(Inotify2.pm,) cvs-co(Changes)
947     A better/less buggy/more portable interface to the Linux Inotify
948     subsystem then what Linux::Inotify has to offer. Inotify lets you receive
949     file change, create, move etc. events for directories in files in a more
950     scalable fashion than dnotify, the older mechanism.
951    
952     Linux-NBD cpan cvs-pod(lib/Linux/NBD.pm) cvs-pod(lib/Linux/NBD/Client.pm) cvs-pod(lib/Linux/NBD/Server.pm) cvs-co(Changes)
953     A Perl module that helps implementing netblock block device servers and
954     set up NBD instances. A sample application allowing you to mount most CD
955     images is included.
956    
957     Mozilla-Plugin
958     Undocumented, unreleased and unfinished-but-somewhat-working Perl plug-in
959     for Mozilla (Netscape, Opera, IE...), that allows embedding Tk, Gtk etc.
960     plugins directly in the browser.
961    
962     Net-FCP cpan cvs-pod(FCP.pm,) cvs-co(Changes)
963     Perl module implementing the <a href="http://www.freenetproject.org">Freenet</a>
964     client protocol, including client-side Metadata handling and CHK Key generation.
965     Includes a mass downloader (similar to fuqid) as sample application.
966    
967     Net-Whois-IP
968     Undocumented, unreleased and unfinished-but-somewhat-working Perl module
969     that tries to find the corresponding whois entry for a given IP, by querying
970     various registries.
971    
972     OpenSSL
973     Undocumented, unreleased and unfinished-but-somewhat-working Perl module
974     interfacing to libssl.
975    
976     PDL-Audio cpan cvs-pod(audio.pd,) cvs-co(Changes)
977     Perl module extending PDL with all sorts of audio functions for generating, analyzing,
978     loading and saving sounds. Ever so popular is the "birds" demo script :)
979    
980     Tree-M cpan
981     Perl interface to the broken M-Tree library by these italian guys...
982    
983     Video-Capture-V4l cpan cvs-co(README) cvs-co(Changes)
984     Full-featured interface to Video for Linux, including real-time grabbing
985     and jpeg compression, VPS etc. decoding and many sample scripts that
986     facilitate automatica sender search and detection, EPG decoding and
987     viewing and video grabbing.
988    
989     XML-DB
990     Undocumented, unreleased and unfinished Perl module implementing an "XML
991     database", i.e. a tree-based database, on top of a conventional SQL
992     database.
993    
994     basex
995     Very old, very portable ANSI-C program that implements something
996     that is similar to yencode. yencode is more "standard", so don't use this.
997    
998     dinfo
999     Undocumented and working tools to extract the data from the D-Info CD.
1000    
1001     syncmail
1002     Unfinished, undocumented and not working.
1003    
1004     thttpd
1005     A personally hacked version of thttpd, suitable for lots of file
1006     transfers (normal thttpd has problems with this).
1007    
1008     wvsniff
1009     Undocumented but nicely working wavelan sniffer that I wrote for use
1010     with my cisco aironet card. If you get it working, praise yourself.
1011    
1012     dhcpping cvs-pod(dhcping.pod,)
1013     A version of dhcpping enhanced by <a href="mailto:marco@nethype.de">Marco Maisenhelder</a>
1014     to support passing dhcp options. Intended to test dhcp server implementations.
1015    
1016 elmex 1.5 Object-Event cpan-elmex git-pod(lib/Object/Event.pm,) git-co(Changes)
1017 elmex 1.2 A simple event callback API for Perl.
1018    
1019     This is just a very simple event callback registration and call API
1020 elmex 1.33 which new Perl classes can inherit. It's mainly used by AnyEvent::XMPP.
1021 elmex 1.2
1022 elmex 1.33 psycpp git
1023 elmex 1.2 A project that was aimed to implement a PSYC server in C++.
1024    
1025     This is a mostly abandoned project at the moment, however, the repository
1026     contains interesting C++ code that might be useful to someone, especially
1027     the C++ JSON implementation might be of interest. The project is mostly
1028     dead at the moment though...
1029 elmex 1.12
1030 elmex 1.33 GT.M git-co(README)
1031 root 1.32 GT.M Database
1032    
1033     <a href="http://sourceforge.net/projects/fis-gtm/">GT.M</a>
1034     is a a vetted, industrial strength, transaction
1035     processing application platform consisting of a
1036     database engine optimized for high TP throughput and
1037     a compiler for the M (aka MUMPS) programming language.
1038    
1039     fcrackzip cvs-co(fcrackzip.html)
1040     <b>fcrackzip</b> is a zip password cracker, similar to fzc, zipcrack and others.
1041    
1042     <h3>Why, the hell, another zip cracker?</h3>
1043    
1044     Naturally, programs are born out of an actual need. The situation with
1045     fcrackzip was no different... I'm not using zip very much, but recently
1046     I needed a password cracker. "Sure", I thought, "there are hundreds of
1047     them out there, I'll just gonna get one!". This wasn't so easy, in fact,
1048     none of the zipcrackers I found were able to find the passwords, either
1049     they didn't accept more than one zipfile, were awfully slow, or didn't do
1050     brute force attacks (which I needed). The worst thing was: no source!.
1051    
1052     <h3>Why is <i>no source</i> such a bad thing?</h3>
1053    
1054     [insert big chapter about the free software spirit here ;)], anyway
1055     people will never learn... You will find reasons why it's much better to
1056     provide source to your programs here, at opensource.org, and here, at the
1057     Free Software Foundation. Now, what are the features of fcrackzip?
1058    
1059     <ul><li>
1060     <p>FREE</p>
1061    
1062     <p>It doesn't cost anything, it will run on many architectures, and
1063     the source is freely available, so you can customise it to your
1064     needs. If you make improvements, don't hesitate to mail them to me,
1065     and I will include them in fcrackzip!</p>
1066    
1067     <p>One goal of fcrackzip was to provide a free but still fast
1068     zipcracker, so that other people can improve and contribute it
1069     further, in an open developement style.</p>
1070    
1071     <p>Other programs, like fzc, come not only without source, but the
1072     executable is even encrypted, so improving it or customizing it is
1073     difficult at best. (Maybe the programmers of other crackers don't
1074     want that people see how crappy their code actually is? Nobody
1075     knows for sure, but I see no other reason for this strange, but
1076     common, behaviour)</p>
1077    
1078     </li><li>
1079     <p>FAST</p>
1080    
1081     <p>On my old machine (a pentium-90), the portable C version is 12%
1082     slower than fzc, the fastest cracker I could find. Small parts of
1083     fcrackzip have been converted to x86 assembly, so it performs a bit
1084     faster (around 4%) than fzc now, on the same hardware (note: this
1085     is highly os/compiler dependent). Since the author of fzc claims
1086     that it is written fully in assembler, further improvements might
1087     well be possible. Incidently, on my new P-II machine, fcrackzip is
1088     almost twice as fast as fzc ;)</p>
1089    
1090     </li><li>
1091     <p>PORTABLE</p>
1092    
1093     <p>fcrackzip was written in ISO-C, and should run on most platforms,
1094     even 64 bit ones (maybe after some tweaking). I'll be glad to hear
1095     about portability problems so I can fix them.</p>
1096    
1097     </li><li>
1098     <p>FEATUREFUL</p>
1099    
1100     <p>fcrackzip will, at some later stage at least, support many more
1101     useful operation modes than other crackers. It already supports
1102     multiple zip files with multiple files. Remember that the code is
1103     only a few hours old!</p>
1104    
1105     <p>However, since version 0.2.0 fcrackzip also includes a mode to
1106     brute force cpmask'ed images, something no other program (that I
1107     know of) can do, so at least there is one feature other crackers
1108     don't have.</p>
1109    
1110     <p>And you can always implement your own modes.</p>
1111    
1112     </li></ul>
1113    
1114     <h3>Caveat, Imperator!</h3>
1115    
1116     <p>Naturally, there are also some drawbacks. At the moment, fcrackzip
1117     is a bit slower than necessary, and lacks some important (or nice)
1118     features, like automatic unzip-testing and others. On the other hand,
1119     fcrackzip-0.0.1 was hacked together in under ten hours, and you can
1120     always modify the source (and send me patches!!!) (I hope I've made it
1121     clear now ;)</p>
1122 root 1.37
1123     lsys cvs-co(README) cvs-co(NEWS)
1124     lsys is a program that interprets lindenmeyer-systems.
1125    
1126     <p>lsys is a full-featured program that understands most of the syntax
1127     of the original l-systems language, which is far more complex and
1128     powerful than most available l-system interpreters.</p>
1129    
1130 root 1.54 <p>See <a href="http://home.schmorp.de/marc/lsys.html">the original homepage</a>
1131 root 1.37 for more explanations and some images.
1132 root 1.61
1133     ermyth cvs-pod(doc/poddoc/documentation.pod) cvs-co(Changes)
1134     This is a fork of Atheme IRC Services.
1135    
1136     Ermyth IRC Services is a set of Services for IRC networks that allows
1137     users to manage their channels in a secure and efficient way and
1138     allows operators to manage various things about their networks.
1139     Ermyth has been ported to C++ and goes its way using modern concepts
1140     and the object oriented paradigm.
1141