Warning: This is old version of the site! Return to the current version.

13 Nov 2011 (permalink)

GDBM Goes International

Version 1.10, the first internationalized version of GNU DBM is finally available. It is shipped with the following localizations: Finnish, Japanese, German, Polish and Ukrainian.

And as a minor note: no, this time I did not take part in the latter two localizations.

13 Aug 2011 (permalink)

GDBM again

And now, after less than one day of delay (sic!) comes a new version of it: GDBM 1.9.1.

12 Aug 2011 (permalink)

GDBM 1.9

A new version of GDBM is finally available, after more than eight years of delay.

27 May 2011 (permalink)


Cfpeek is a tool for processing of structured configuration files. The first stable release is available for download.


Important change in the GINT repository. Users are advised to pull.

26 Apr 2011 (permalink)


SLB, a simple load balancer, is finally available for download.

17 Feb 2011 (permalink)

Jabber Over HTTP -- version 1.2

JOH version 1.2 is available for download. New features in this version:

Support for "HTTP CONNECT" proxying.

"HTTP CONNECT" method is considerably faster than XEP-0025. It also imposes less strain on the TCP/IP connection. It is supported by several Jabber clients, among them Psi and Mcabber.

ACLs for requested Jabber servers.

Both incoming connections and the addresses of the requested Jabber servers are protected by TCP wrappers. This allows system administrators to control the set of remote XMPP servers available for proxying.

Special handling for GET requests.

A GET request usually means that someone has pointed his web browser to the URL served by johd or joh.cgi. Both programs can now be configured to either return a 404 response with a configurable HTML content, or to redirect the request to another web server. As an example, see ulysses.gnu.org.ua.

29 Jan 2011 (permalink)

Jabber Over HTTP

JOH provides a flexible HTTP Polling proxy which enables access to Jabber ports via HTTP requests. It is easily integrated to jabber2, which lacks built-in support for XEP-0025.

03 Jul 2010 (permalink)

Smap v1.1 released

Smap version 1.1 was released today.

19 Jun 2010 (permalink)


Smap is a flexible socket map server with a set of tools and loadable modules for configuring complex socket map systems.

It also provides an API for implementing new modules in C or in Guile.

Version 1.0 released today.

02 Apr 2010 (permalink)

Compiling Guile 1.9.x

It is a small reminder on how to compile Guile 1.9.x.


You will need:

The latter is normally installed on any GNU/Linux system as a part of Gcc package.


Guile's configure script relies on pkg-config to locate its prerequisites. A very unfortunate choice, in my opinion. On most boxes where I tried to configure it, a plain invocation of configure without additional options proved unable to locate prerequisite components. One may, of course, edit pc files to placate pkg-config, but it's rather counter-productive. So, I prefer to simply ignore pkg-config and get away without it.

That being said, and supposing you have Gcc version 4.2.4 and libgc installed in /usr/local/include, the following command should correctly configure the package:

./configure LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/gcc/i486-slackware-linux/4.2.4/include \
            BDW_GC_LIBS=-lgc BDW_GC_CFLAGS=-I/usr/local/include

Once done with the configure, launch make and switch to some other activity. It is no use sitting and staring at the monitor, because the build takes quite some time. On my box, for example, the compilation lasted 23 minutes.

24 Mar 2010 (permalink)


New version of Gamma is finally available for download. It is a considerable leap forward, which caused a kind of chain reaction in another projects. See below.


Following the release of Gamma 2.0, the XMLTools dropped support for Mixp, and switched to Gamma to make use of the new possibilities. This includes, in particular, better error reporting, faster and more flexible parsing.


Finally, these changes were applied to Ellinika web site to improve its appearance.

The development version of the site is also available (append -dev to the main site name).

06 Jan 2010 (permalink)

Wydawca Version 2.1 "KMB" is available for download.

The most important change in this version is a check script feature, which allows to verify the uploaded tarballs before making them visible and even to decide whether or not to accept them.

This feature is already used in Puszcza to catch releases containing CVE-2009-4029 vulnerability.

16 Nov 2009 (permalink)

BackUPS Pro 280 Battery Constant

For the record: the battery constant for BackUPS Pro 280 is BA.

If this model shows incredibly low runtime on a new, 100% loaded battery and the state persists even after calibration, try resetting the constant to this value. To do so, follow these instructions.

16 May 2009 (permalink)


Grot is a rotation tool for MySQL binary logs. Sources etc. are here.

25 Mar 2009 (permalink)

Installing Slackware on Eee PC

23 Mar 2009 (permalink)

Id est, patres conscripti...

24 Jan 2009 (permalink)

New version of gnupload script.

16 Jan 2009 (permalink)

Wyslij-po 2.0

As part of the update compain following the release of GNU Mailutils 2.0, the version 2.0 of wyslij-po is released.

05 Jan 2009 (permalink)

Mirroring SVN to Git

Puszcza now offers a one-way mirror of its SVN repositories to Git. This article explains the techniques used to implement it.

The basic prerequisites are:

Creating the Mirror

The initial mirror is created using git-svn:


It is supposed that $PROJECT is the project name, and $AUTHORS contains full pathname of the authors file.

The -s switch tells git-svn to assume the standard layout of the source SVN repository (i.e. trunk/, tags/, branches/).

When this command finishes, $GITROOT/$PROJECT will contain a valid Git repository set up for two-way intercommunication with the SVN repository $SVNROOT/$PROJECT. Any existing SVN tags and branches are mapped to remote Git branches. A tag $SVNROOT/$PROJECT/tags/foo becomes branch tags/foo. A branch $SVNROOT/$PROJECT/branches/bar becomes Git branch bar.

This mapping is OK for mirroring, but is a bit inconvenient, because tags and branches are not visible using the gitweb interface.

To fix this, I provide local tracks for each remote branch:

  git branch -r |
   while read tag
     case $tag in
     tags/*) localtag=${tag##tags/}
             git tag $localtag $tag
     trunk)  ;;
     *)      git branch --track ${HEADPFX}$tag $tag

Note $HEADPFX in the last git-branch invocation. Theoretically, a local branch can have the same name as the remote one it tracks. However such setup makes git issue lots of spurious diagnostics in the form:

  warning: refname 'release_4_4_patches' is ambiguous.

when doing various Git operations, e.g. git checkout.

It is also possible that such duplicate names could cause other, more serious problems with Git. I have not checked this, so I am not sure. Nevertheless, I prefer to stay on the safe side and to prefix all local branches with some unique string, so they differ from the remote ones. In my config I set HEADPFX=git-.

To finish the initial set up, we also need to install a pre-receive hook, which will forbid pushing to this repository.

I use the following hook:

#! /bin/sh
SVN=$(git config --get svn-remote.svn.url)

cat >&2 <<EOT
---------------------------- WARNING! ----------------------------
This repository is a one-way mirror of the SVN repository at

Pushing to this repository is administratively prohibited. 

If you wish to drop SVN and switch to Git, please drop an email to
<root@domain> saying so. Make sure the email is GPG-signed.
---------------------------- WARNING! ----------------------------

exit 1

The git-svn-mirror-create script does all that. To create a mirror of a project foo one will simply run: git-svn-mirror-create foo.

The created repository is not bare. To provide a usual project.git repository, I place Git mirrors in a subdirectory, and then symlink the $PROJECT/.git subdirectory to $GITROOT/$PROJECT.git.

Maintaining the Mirror

Basically, the following commands will keep the currently checked out branch in sync with the SVN:

  git svn fetch
  git svn rebase -l

However, this will not update other branches, so the same operation needs be repeated for each branch:

  git branch | sed 's/^\*//' | tr -d ' ' | tee $BRANCHLIST |
   while read branch
     git checkout $branch
     git svn fetch
     git svn rebase -l
  git checkout master

The file $BRANCHLIST keeps a temporary list of branches. This list is used by the code below to determine whether any new branches were created in the SVN, and, if so, to mirror them:

  echo "Checking for new branches & tags..."
  git tag > $TAGLIST
  git branch -r |
   while read tag
     case $tag in
     tags/*) localtag=${tag##tags/}
             if ! grep -q "^${localtag}\$" $TAGLIST; then
               echo "Mapping $tag to $localtag"
               git tag $localtag $tag
     trunk)  ;;
     *)      if ! grep -q "^${HEADPFX}${tag}\$" $BRANCHLIST; then
               echo "Tracking $tag as ${HEADPFX}$tag"
               git branch --track ${HEADPFX}$tag $tag

These operations are performed by the script git-svn-mirror-synch, which takes the project name as its argument. This script should be executed as a cron job.

Unbinding the Mirror

After running SVN and Git in parrallel for some time, the project maintainer will probably decide to drop SVN and to switch to Git entirely.

This is done by git-svn-mirror-finish script. This script does the following:

  1. Removes remote branches;
  2. Renames local branches, by removing the $HEADPFX prefix;
  3. Removes SVN-related sections from .git/config;
  4. Disables the pre-receive hook;

The sysadmin is then supposed to convert the repository to bare format and to remove checked out sources. E.g.:

  cd .svn-mirror
  mv .svn-mirror/$PROJECT/.git $PROJECT.git
  rm -rf .svn-mirror/$PROJECT/
  cd $PROJECT.git
  git config bool core.bare true
06 Nov 2006 (permalink)


Gacopyz, panie, to mówią ze to mysa... Ze to tako
mysa co świeckę w kościele zjadła i wniebowstąpienia
dostąpiła. A to nie je mysa, ino gacopyz! To nadprzyrodzłyne,
to głową na dół śpi!

Rozprawa o robokach,
Kazimierz Grześkowiak

Libgacopyz to nowa biblioteka obsługi protokołu Milter, z której korzysta Mailfromd. Biblioteka zawiera zupełnie nowy API, który niedługo zostanie w pełni zadokumentowanty. Ma się rozumieć że obsługuje rówinież "tradycyjny" API, dzięki czemu przejście z libmilter na libgacopyz nie wymaga specjalnego wysiłku.

21 Oct 2006 (permalink)
Released today:
13 Aug 2006 (permalink)
Cumpleaños felices, Fidel
27 Mar 2006 (permalink)
[image] Stanisław Lem nie żyje...
20 Feb 2006 (permalink)
Released version 1.15.90 of GNU tar. Read announce, for the detailed description of bug fixes and new features.
16 Jan 2006 (permalink)

Mirror of kervarker in Ukraine

Kervarker.org is a server dedicated to Breton language since 1995. It is run by Romuald Texier. Now we provide its mirror.

Degemer mat!

06 Oct 2005 (permalink)

I dag er Thor Heyerdahls gebursdagen. Jeg lengter etter ham nå som han er bort...

Det er en utmerket biografi om Thor på Kon-Tiki siden. Legg dessuten merke til valget av den vesentligste Nordmann, arrangert av NRK. Thor er en av kandidatene. Gi stemmen din til ham.

27 Sep 2005 (permalink)

GNU.ORG.UA finally has new DNS!

Домени GNU.ORG.UA та TUHS.ORG.UA нарешті мають третій DNS. Огромна подяка хлопцям з Івано-Франківська та Адріанові Барану зі Львова!

Domeny GNU.ORG.UA i TUHS.ORG.UA nareszcie mają trzeci DNS. Wielkie dzięki chłopcom z Iwano-Frankiwska (Stanisławowa) i Adrianowi Baranowi ze Lwowa!

26 Sep 2005 (permalink)

Cflow: heading for the release

The documentation for the GNU cflow project is finally available. I ask you to kindly take a look and report me your opinions, suggestions and the like.

Also, new alpha release is available for download. Give it a try!

Finally, the first stable release (version 1.0) is planned for this saturday.

30 Aug 2005 (permalink)

Straight to the business: first, the very first batch of fotos from Lwow is available (it probably will take me at least a couple of weeks to publish them all, at the present rate ...) Anyway, enjoy! If the gallery is missing a translation to your native language, just let me know.

Secondly, thanks to Wojciech's kind assistance, we have managed to bring mailutils namespace to a unified form. It is a great step for our team. Just think that currently mailutils codebase counts 193759 lines of C text, this will show you what it feels like to ferret out all this code, changing global symbols, without breaking anything. Should you ever plan to go into such a risky adventure, consider using this script. The docs are also available. If these are not enough, write me, I'll be glad to answer your questions.

To tell the truth, I have never thought I would wish to make my scripts repository available, but now I think I should do it.

Returning to mailutils, now that it has taken its new form, I have finally undertaken final API cleanup. First goes mu_folder_list and friends. Untill now it has been (1) non-recursive, and (2) used a kludgy struct folder_list, which seems to have been a leftover from the dark times when mu_list_t has not yet been there... So, this has changed. Now, one can write:

     mu_folder_t folder;
     mu_list_t list;

     mu_folder_create (&folder, dir);
     mu_folder_open (folder, MU_STREAM_READ);
     mu_folder_list (folder, dir, "*", 5, &list);

and obtain a list of all folders under dir up to fifth nesting level! If one is careful enough (or, if one knows pretty well what he/she is doing, which is the same thing, anyway), one may write:

     mu_folder_list (folder, dir, "*", 0, &list);

0 meaning infinite nesting level, i.e. recurse untill you have where to recurse.

Oh, well, I mustn't forget to tell Jocke about it! It was him who made me think about this folder business.

All in all, given all the recent changes to mailutils, I am inclined to think that the next release version will not be 0.x, but 1.0:) I am pretty ready to delay the release for a pair of months and to release a couple of alpha versions more, to achieve the result.

Oh, by the way, now mailutils interfaces with GNU radius. Strange, I haven't thought about it earlier...

13 Aug 2005 (permalink)
Cumpleaños felices, Fidel
11 Aug 2005 (permalink)

Still here

I have had neither time nor desire to write any articles within the recent three months. Sure enough, there were plenty of news during this time. I am still a bit short of time for a detailed description (maybe next time), but a can provide a very brief summary:

18 Apr 2005 (permalink)


It was possible to write entire MIX in CWEB! Even including optab.c and lex.l!

However, I had to write a special post-processing program to handle lex and yacc sources, created by ctangle. Here it is.

Another good news: Dr.Knuth's home page already includes a link to MIX.

15 Apr 2005 (permalink)


RMS has finally dubbed cflow a GNU package. I am now installing a repository on Savannah and working on other procedure issues (docs, web page, FSF directory entry etc.)

MIX language

There are quite some news in this respect. Firstly, I have prepared a patch to GNU MDK that fixes several incompatibilities between the language described by Dr.Knuth and the language accepted by MDK itself. These are:

José has agreed to include the patch into the future version of MDK

I have also returned to work on Douglas Laing MIX package. Douglas has kindly given me his permission to distribute the sources under GPL and has informed Dr.Knuth about the new package.

Why work on another MIX assembler/simulator when MDK is available? Well, there are quite a few reasons of doing so. While being a nice package, MDK does not quite satisfy my needs. What I want is a MIX assembler/simulator as closely conforming to TAOCP as is possible. Douglas's MIX meets this requirement, especially after I added back TTY device (by the way, I'm looking for a name for the new package, Conformant MIX seems to be quite a good choice).

Secondly, any MIX package is meant first of all for those who are studying TAOCP and are experimenting with the programs from its examples and excercises. This audience will certainly welcome a debugging feature. I have implemented MIX terminal mode, which, apart from remembering me IBM 360 console of the good ol' times, allows to debug MIX programs.

Another thing, given its special audience, a MIX package should be extremely educational itself. Again, MIX fits this description quite well. Its simulator is initially written closely following the guidelines set forth in TAOCP itself. Besides, it is written in WEB. And this brings me to the third objective of the package:

I want to rewrite the entire package in WEB. The primary motivation is explained above: it is to make sources well-documented and educational to the very extreme. There is a secondary motivation as well: I want to explore the limits of usability of CWEB tools, by pushing them to the very edge. At the risk of being accused of heresy, I must admit I doubt whether they could effectively be used for a real-world programming. Writing in literate programming style requires one to switch attention between TEX subtleties and writing good code, which is a difficult task (the new CWEB major mode for Emacs might help in this regard, though) and does not improve productivity. Besides I do not like much the way cweave formats large C data (e.g. arrays of structures). It is simply awful. So the purpose is to explore all pros et contras of CWEB tools.

The majority of MIX sources are rewritten in WEB. I have even managed to produce a valid YACC source file from a .w source (see mixal.w)!

The only two sources left are lex.l, which is downright impossible to write in WEB, and automatically-generated optab.c, which, being processed by cweave, looks like a pile of ..., well, garbage.

Trying to make my best to handle these, too...

Oh, well, and last but not the least: the package will provide a MIX simulator written entirely in Elisp. There exists a preliminary implementation already.


I have published my modifications to Warren Toomey's apout package. The modifications permit to run all programs from the earliest UNIX binaries found so far: so called 1972_stuff, binaries dated 1973, discovered by Dennis Ritchie.

Here is my message to Warren describing the details. It is interesting to notice the date, by the way.

Other things

Have you ever tried to download, compile and install a dozen and a half aspell dictionaries on one machine? If you ever need it, use this script.

03 Apr 2005 (permalink)

"Potykaniem dobrym potykałem się, wiaręm zachował, zawodum dokonał. Na koniec przyznaczon mi jest wieniec sprawiedliwości."

Papież Jan Paweł II, wielki syn Narodu Polskiego, odszedł od nas. Cześć Jego pamięci.

22 Mar 2005 (permalink)
Aequinoctium vernum! Gaudete!


There is also another good news, apart from the equinox. I have resurrected cflow project. It was initially written in 1997-1999 and fell into oblivion shortly afterwards. Somehow, I got distracted by other things... Now, a recent thread in gnu-devel mailing list has shown that there is a demand for this kind of program and this made me remember my past attemtps. So I have (quite happily) resurrected the package. During this week I have managed to turn it into GNU-compatible project. I have also sent a registration request to RMS.

The question is: where was my brain during these seven years? Another question is: how many useful programs still lie buried in my archives?

The program is compatible with POSIX specs and offers quite a number of improvements (of course it will offer more still:). Here is a sample output tree describing the project itself. The tree was obtained using chart.cflow rule in src/Makefile.am.

17 Mar 2005 (permalink)
[image] Nunc est bibendum!
16 Feb 2005 (permalink)

Simultaneous access to mailboxes

How to handle a shrink [of a mailbox]? meaning, the &^$^@%#@^& user start two browsers and deleted emails in one session. My views is that we should scream bloody murder and hunt them with a machette. But for now just play dumb, but maybe the best approach is to pack our things and leave i.e exit()/abort().
-- Alain Magloire

Imagine the following synopsis: your imap4d daemon is working with a mailbox. Part of its data is cached into memory, any modifications to the mailbox are not flushed to disk until user explicitely requires it.

Now, the same user launches another mail client that opens the same mailbox, deletes some messages, and closes it.

The user makes some modifications to the mailbox in imap4d, requests EXPUNGE and closes the mailbox. Imap4d performs flush using the data cached in memory and, voilà - the mailbox is trashed.

You'd say the obvious solution is to lock the mailbox while it is being operating upon. But no, that won't work for imap4d, because appending to the mailbox is quite normal, and it should be allowed. Locking the mailbox will cause mail delivery to be blocked during the client's session (and as a sysadmin, I may say that the number of users that keep their imap session open for 24 hours a day is surprisingly big!)

Of course, the mailbox must be locked while it is being written to, and we do this, but that's another story.

In GNU mailutils we use a function called mailbox_is_updated to determine whether the mailbox was modified recently. The function returns 0 if it was modified and 1 otherwise. For plain UNIX mailboxes a simple approach is used: the function checks if the size of the mailbox file has changed.

It is assumed that if it the new size is greater than previously recorded one, than some new message were appended to the mailbox. If the size is less than the recorded one, then, well... see the quote at the start of this article :)

The method is week since:

Both cases will result in mailbox corruption.

And finally, the case of mailbox size shrinkage was still not handled in imap4d. Still, because the issue has quite long history: it dates back to April of 2001, when I first joined the Mailutils team.

Here is a short historical essay on the subject:

21 Apr 2001

I noticed that pop3d broke on simultaneous accesses to the mailbox. The story with pop3d is quite different, since it does use mailbox locking (well, that's to say now. Back then it still did not...), anyways:

... what seems to be a real problem is simultaneous access to
the maildrop. All locking/unlocking works just fine, but I have
come across the following situation: two sessions access the same
mailbox simultaneously, both do LIST, then one of them does
DELE on some message, then QUIT. The remaining session does a RETR
and dies miserably, since its internal indices are already out of sync
with the real maildrop contents. The comment on mbox_is_updated()
function addresses this but the function itself is never called.
So I added a call to mailbox_is_updated() to the pop3_mainloop()
function just before the processing of a keyword. Also I have added
ERR_MBOX_SYNC define to help handle the situation when
mbox_is_updated() bails out.
After these changes, the second session just gets the message

      -ERR Mailbox updated by other party or corrupt

and the connection is closed. This behaviour seems to be compatible
with RFC, but maybe it would be better to deny simultaneous
accesses altogether?
23 Apr 2001

Alain agreed to the proposed solution.

30 May 2001

Nice comment on a correctness of the name mailbox_is_updated. It raised a small discussion (see my next posting and Dawe's answer to it), but did not lead to renaming the function :)

As a side note, the story of linguistic inventions in bug-mailutils list is quite amusing... I certainly should catalogue them :^)

10 Nov 2001

In course of an unrelated discussion, Alain reminds that

We are trying to be smart by guessing that if the newsize is larger,
it is because a new mail was ___APPENDED___ to the mailbox so the offsets
maintained by the mailbox_t will still be sane and mailbox_expunge ()
will do the right thing (i.e. seeing that they was new mail when doing
the ftruncate())

13 Mar 2002

An unrelated issue, but still worth mentioning: on some machines disabling mmap speeds up pop3d. Rationale: mailbox_is_updated indirectly calls msync which makes the daemon spend quite some time in uninterruptible sleep.

16 Feb 2005

After a four-year delay I have added to imap4d support similar to that of pop3d.

The approach used by imap4d is a bit different from what we use in pop3d. Essentially, upon selecting a mailbox imap4d does the following:

The drawback of this approach is that all modifications to the mailbox the user might have made during the imap4 session are discarded. In my opinion it is a reasonable price for preserving the mailbox contents. However, this issue can be addressed too. More on this later.

While solving mailbox shrink problem, the method does not solve the described above weaknesses of mailbox_is_updated.

Correct Diagnosis is 50% of Treatment

To actually solve the issue mailbox_is_updated must be able to tell that the mailbox was modified, and how exactly it was modified, independently of its size. Unfortunately this is easier said than done. Currently mailutils is able to handle various mailbox formats and the way to do the proper diagnosis will vary with the format.

Let's first see what can be done for plain UNIX mailboxes. Obviously, mailbox_is_updated must first check mtime of the mailbox file. If it did not change, the function can return 1 immediately. Otherwise, it should assume some changes were done to the mailbox. Now, the question is whether these changes affect the cached data. The code in mailbox/mbox/mbox.c keeps offsets of UNIX 'From ' lines in the mailbox file. It will suffice to compare these with real offsets to decide whether the mailbox was modified (in the terms of libmailutils corrupted) or a new message was added to it. If any of the registered offsets differ, we scream bloody murder and raise MU_EVT_MAILBOX_CORRUPT event1) . In any case, we return 0 indicating that the mailbox has been changed.

A similar approach could be used for other mailbox formats.

As a side note, we could also prevent undesirable modifications of the plain UNIX mailbox if we apply kernel exclusive lock on the file from offset 0 up to its current size...

1) It may also be reasonable to invalidate all cached data in this case

14 Feb 2005 (permalink)

EiFUB, which means "Everything is Fucked Up Badly".

Sorry about the language...

21 Jan 2005 (permalink)

Ukrainian translation for www.gnu.org

Evgeniy Sudyr translated the main GNU site to Ukrainian. Of course it is now the default for www.gnu.org.ua.

Anubis MDA

I have implemented new MDA mode for Anubis. In this mode, it acts as a mail delivery agent, receiving incoming mail from the standard input, processing it and piping modified message to the real local mailer.

Two command line options must be specified in this mode: --mode=mda, telling Anubis that it should operate in MDA mode, and --local-mta, specifying the local mailer to use when actually delivering the message.

In my sendmail.cf I have:

Mlocal, P=/usr/local/sbin/anubis,
        S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
        A=mail --mode=mda \
            -l '/usr/local/libexec/mail.local -f %sender %recipient' $u

This allows me to first process incoming mail through Anubis and then through Sieve (invoked by mail.local)!

07 Jan 2005 (permalink)

Several things are worth mentioning since the beginning of this year:

First, I have finally joined Ukrainian translation team. Fortunately, it did not require any paperwork as our usual disclamer by default covers any other language teams one may want to join. Would it be so with our GNU disclamer as well! I hate waiting for a snail-mail to arrive from Boston to me and for my reply to reach Boston again only in order for my 25-line patch to Emacs being finally applied to CVS (by the way it is a real case, Ted have sent it almost a month ago and I'm still waiting for it to arrive, and the patch to rmail is still waiting in the queue, although everybody knows how many assignments I have already made to GNU project... I wonder why would not RMS create a new assignment form for this and any other project whatsoever I may wish to join or create within GNU or (whatever else) in the future).

I've started to rant, it seems... Too bad.

Secondly, Mailutils finally has vacation extension action in Sieve. To be precise, we already had it as an extension to Scheme implementation of Sieve. I lacked time (or was too lazy?) to do the same for our Sieve library until Felix Egli sent us his version which didn't quite match our standards and was incompatible with the existed one, so I decided to finally write it:) Massive thanks, Felix!

Oh, yes, and the mess with diagnostic messages is fixed, too.

Another news in Mailutils is ODBC SQL driver, which actually means that from now on Mailutils is able to interact with virtually any existing DBMS (since any serious DBMS has an ODBC interface).

As usual most of the time is taking tar. After 1.15.1 release I have started a major rewrite of buffer handling and incremental archive parts.

Several fixes were applied to Anubis as well. Recent letters from Paolo made me finally gather my wits and set forth a draft describing the proposed method of handling multi-part messages.

This, in its turn, forced me to finally attack and solve the problem of using gendocs.sh script to generate web documentation in our projects. The resulting Makefile.am is very elegant. However, this patch must be applied to the script in order to use it. I'll submit the patch upstream tomorrow.

Take a look at the resulting manual page.

The only thing left with this approach is the absence of per-chapter html output, which I am going to fix shortly (it will require sending a new assignment form to Boston. At the end, I think, I'd better send quite a bunch of them beforehand).

28 Dec 2004 (permalink)
www.gnu.org.ua has become official mirror of www.gnu.org!
27 Dec 2004 (permalink)


Several things have happened recently:

22 Dec 2004 (permalink)
Gaudium magnum anuncio vobis, o patres conscripti: hodie solisticium hiemale celebramus!
13 Dec 2004 (permalink)

I have been chasing for bugs in gsasl 0.2.2 for over four hours. Managed to find quite a few. Debugging is probably the most exhaustive kind of work I've ever tried...

Emacs folks have begun arguing about GFDL vs. GPL problem (though, frankly speaking I can't see any problem at all). Debian people evidently become tired of it and their discussion on this topic has faded away. Now it's emacs-devel turn, isn't it? Interestingly, how similar both threads are: the two sides go on spitting different reasons and no one seems to have heard the other, whereas RMS keeps olympic silence and only when really annoyed does he tell: "I believe GFDL does what it should". So spricht Zaratustra...

10 Dec 2004 (permalink)

Items from my museum

An /etc/issue made by a friend of mine for one of my machines. It is dated some time around 1999

                           | _ . -   ...- . |
                           |  ##### ./~\. . |
                           |. # @ =  \_/. . | 
                           |  #,  # __ . -  | 
                           |. #   = .  -- . |
                           |_ #####  ..   - |
                              @   @      @  

       |~~~\   /~~   |~~~\   /~~   |      /~~~\  ~~~T~~~  ~~~~~/
       |   |  |      |   |  |      |     /     \    |         /
       |___/  |--    |___/  |--    |     |     |    |        /
       |      |      |      |      |     |-----|    |       / 
       |       \__   |       \__   \___  |     |    |     /_____

I baptized the machine pepelatz (a term from Georgi Daneliya's film Kin-Dza-Dza). Wander what's this? Here's the definition:

Excerpts from "The Technical Dictionary of Cuue", Prentice-Hall, 5255:

pepelatz, n: Flying apparatus (usually very rusty) used in conjunction with gravitzapa (see).

gravitzapa, n: An indispensable part of pepelatz (see).

I can only add that the machine looked almost exactly as its prototype :)

09 Dec 2004 (permalink)

Back again

After a more-than-busy two-week pause I'm back again (I'd better tell some other time what I've been doing during these two weeks). Most important news during this time are: together with Max we have set up our server (Ulysses) and I've finally managed to mirror both ftp.gnu.org and www.gnu.org. Moreover, both mirrors are now accessible as ftp.gnu.org.ua and www.gnu.org.ua.

Another mirror I've been runnng, that of the Unix Heritage Society at tuhs.org.ua, is now hosted on this server too.

Needless to say that my personal page is served by Ulysses as well.

The question now is, how much will it cost to maintain all this, given its average daily traffic... We'll see...

Other FS news: a simple script to view po files. Why? I don't know. May prove useful some day... Click here to see it work.

Hacked on GNU mailutils and introduced a universal sql-access layer. The auth library has been rewritten accordingly and mail.local is finally able to retrieve mailbox quotas from SQL database, a feature many of the mailutils users have constantly pinged me about.

While feedling with mailutils I've noticed something that makes me feel a bit uncomfortable: we have no convention on how to write diagnostic messages. Some of them begin with a capital letter, some don't. Some end with a period, some don't. A chaos. We should certainly change it, but I'd better do it after releasing 0.5.1 maintenance release (this change will affect po files, and hence will require waiting for the translators to finish their jobs).

Anubis: a couple of security-related changes proposed by Ulf Härnhammar. Socks.c still waiting to be rewised by Wojtek.

Oh, yes, forgotten to say: among various junk on my machine I've excavated my geek code. Its surprising how little has changed since I wrote it...

22 Nov 2004 (permalink)

Updated versions of rmail.el: modified source and diff file (against the latest CVS version 1.393).

ChangeLog entry:

 * mail/rmail.el: Updated to work with movemail from GNU Mailutils
   (rmail-pop-password,rmail-pop-password-required): Moved to
   rmail-obsolete group.
   (rmail-set-pop-password): Renamed to rmail-set-remote-password.
   All callers updated.
   (rmail-get-pop-password): Renamed to rmail-get-remote-password.
   Take an argument specifying whether it is POP or IMAP mailbox we
   are using. All callers updated.
   (rmail-pop-password-error): Renamed to rmail-remote-password-error.
   Added mailutils-specific error message.
   (rmail-movemail-variant-in-use): New variables.
   (rmail-remote-password,rmail-remote-password-required): New
   customization variables.
   (rmail-probe,rmail-autodetect,rmail-movemail-variant-p): New
   (rmail-parse-url): New function.
   (rmail-get-new-mail): Updated for use with GNU mailutils movemail.
   Accept mailbox URLs no matter what flavor of movemail is being used.
 * etc/NEWS: Document changes to rmail.el
 * man/rmail.texi: Likewise
21 Nov 2004 (permalink)

Yesterday I released version 1.3 of GNU Radius. I wish Jordi updated Catalan localization. It was very important to me. Pity...

More work on rmail.el. People from emacs-devel have supplied some fresh ideas and RMS have asked me to update documentation as well:

Documentation is the castor oil of programming. Managers know it must be good because the programmers hate it so much.
19 Nov 2004 (permalink)

السّلام عليكم

Well, my log got interrupted for more than two weeks... I have started to learn Arabic, and it is taking now the rest of my time, which was in short supply already. I am growing more and more fascinated by both Arabic script and its grammar...

The long silence does not mean nothing was being done. So, a short summary:

03 Nov 2004 (permalink)

Fatally short of time...

The new radius documentation is available. The main page is now xhtml 1.0 (as well as radius homepage)1) . I wish I would be able to convert documentation files to xhtml as well, but that would require either updating texi2html (I wouldn't like to do this) or texinfo (I'd love to, should the time permit)...

Anyway, the package itself is ready for the release. Today I have fixed a small bug that manifested itself on BSD systems, and have given a final polish to the docs. I'm going to release the stuff before Nov 06.

1) By the way, I'm working on the xmltools translator for producing standard GNU web pages (working name boilerplate).

17 Oct 2004 (permalink)
Zgodnie z propozycją Wojtka dodałem do galerii przyciski przejścia wstecz i naprzód. W pliku html (sic!) wygląda to tak:

(let ((env (current-image-neighbors)))
 (if (car env)
    (display "<a href=\"")
    (display (image-url (gallery-id) (car env)))
    (display "\">") 
    (display "Poprzedne zdjęcie")
    (display "</a> | ")))
 (if (cdr env)
    (display "<a href=\"")
    (display (image-url (gallery-id) (cdr env)))
    (display "\">") 
    (display "Następne zdjęcie")
    (display "</a> | "))))
Już jasne do czego zmierzam, co? No właśnie, chcę zmodyfikowac mod_guile tak, by Apache rozumial <?guile ... ?> na równi z <?php ... ?> :))
12 Oct 2004 (permalink)

Dictionary support is ready

Dictionary of Ellinika site has been completely rewritten in XML (see this entry for more info). The project now uses gamma instead of guile-sql + quile-texinfo.

11 Oct 2004 (permalink)
I have merged guile-sql and guile-gettext into a single project: gamma.
10 Oct 2004 (permalink)
Nowe zdjęcia: z Kijowa i z Odessy.
08 Oct 2004 (permalink)
Do not seek death; death will find you.
But seek the road which makes death a fulfillment.
-- Dag Hammarskjold
07 Oct 2004 (permalink)

Dictionary structure

I have started to rewrite dictionaries in Ellinika project. The idea is to use XML instead of the definition language I have been using so far. The latter was designed to be simple, short (I hate to type) and suitable for describing dictionary entries. Its parser is written in C and is therefore fairly fast. Presently, the dictionary created with it contains 1150 entries, and the process of its creation has confirmed that the dictionary structure is right and input language generally suitable for the purpose. However, it has also exposed some drawbacks of the language.

The principal drawback is that currently a dictionary entry is supposed to contain only one part of speech 1) , i.e. currently assumed entry structure is:

 (key part-of-speech articles)
However, there exist words that pertain to several parts of speech simultaneously, and that change their meaning according to the part of speech. For example, κρυώνω, when used as a transitive verb, means to refrigerate, whereas being used as an intransitive verb it means to feel cold, to freeze. The number of such words (verbs in particular) in Greek is fairly large.

So, I have decided to redesign the input language, but instead of simply fixing the already existing language, I've chosen to fully write the dictionary sources in XML.

External representation

In the new definition language each entry is represented as follows:

 <P ID="string">
  <T ID="string" />*

(as usual, optional elements are inclosed in brackets, * means zero or more occurrences of the element, and + means one or more occurrences of the element).

Elements have the following meaning:

Start the definition of a dictionary entry
Introduces the dictionary key, i.e. the word of the source language that is explained by this entry. There may be several keys if the notion in question has several sinonyms.
Introduces grammatic forms of the key, whenever these are not formed by standard rules. In future I expect to write proper verb conjugator, then this field will probably mark a reference to or invocation of it.
Part of speech and meanings associated with it (see below). Attribute ID introduces the name (usually abbreviated) of the part of speech.
Translation of the word (M stands for Meaning)
Cross-reference for this entry. Usually this is a reference to sinonym or some semantically related key.
Topic or group this entry pertains to. ID identifies the topic. When many entries pertain to the same topic, their definitions can be enclosed in
<T ID="name">

There are two special forms of this notation. One is useful as a shortcut for those words that have only one part of speech (as I said I hate to type, so I'm trying to spare as much typing as possible):

 <T ID="string" />*

Another one introduces an entry that is a reference to another entry in the dictionary:

 <T ID="string" />*

This is useful for such pairs as "ο ποταμός" and "το ποτάμι", both meaning "river" but having different genders. The special form <X /> means reference to the immediately preceeding node definition wich has at least one translation (M element).


A working example can be found here.

Internal representation

The initial version of the dictionary translator is already available. See its heading comment for the short description of the internal representation (Scheme of course).

1) The term part of speech is used here in broader meaning: e.g. for the dictionary purposes transitive verbs and intransitive verbs are regarded as different parts of speech. I'll possibly have to introduce finer granularity here (e.g. part-of-speech/subpart or something similar), but currently I am not sure it will be worth the effort.

04 Oct 2004 (permalink)

News in argp module

(did I say I am maintaining it? Well, so I am, since the day before yesterday)

I've fixed a nasty coredump that occurred if the option name of an OPTION_DOC was set to NULL. Besides, updated argp will never attempt to translate an empty help string. And finally, new option OPTION_NO_TRANS prohibits translating name field of an OPTION_DOC option. The latter is already used by tar.

29 Sep 2004 (permalink)

Well, it took four days to entirely rewrite lingua in Scheme using xmltools. Now it allows much greater flexibility than eXtrans version did. Moreover, it is easily extensible. There are still some minor points to work out, but as a whole xmltools+lingua is quite mature now, uhmm..., except for the docs... I'll need some time to write them. Then I'll probably host the project on Gna!.

In the meanwhile I have already rewritten ellinika using the new stuff. It allowed me to use normal Makefiles, split the single source file into several smaller ones and do a lot of cool things I couldn't have dreamed of using eXtrans version.

25 Sep 2004 (permalink)

LINGUA project

I had a bit of free time, so I've used it to polish LINGUA engine. Currently it is written using eXtrans , which, albeit a great program, is not flexible enough for my needs. In addition to already described problems, its handling of nested tags is not consistent.

Surely I could have modified it further, but it appeared to me that I'd be better off writing a replacement for it from the scratch. And of course I was going to write it in Scheme :)

So, I've started a new project under a working name xmltools. It is a collection of Guile modules that should provide the functionality similar to that of eXtrans yet largely extended and improved. The project uses expat library and Mixp - a Guile interface module to expat.

In its current state, xmltools already supply all of eXtrans functionality, including postprocessor support.

Today I have written basic part of lingua.scm. The good thing is, it is already able to process xml and produce valid html output!

Hopefully it won't be long before I rewrite LINGUA entirely in Scheme.

24 Sep 2004 (permalink)

New releases

GNU Radius 1.2.95 and Anubis 3.9.96 are available.

22 Sep 2004 (permalink)
Gaudete, patres conscripti, hodie enim aequinoctium celebramus.
21 Sep 2004 (permalink)

Chasing for bugs...

There are two very interesting ones:


First is in Anubis. When running Anubis test suite in authmode, Wojciech noticed that some daemon instances enter endless loop attempting to free a chunk of memory.

My further investigation has shown that it always occurred when trying to free an ASN1 node belonging to _gnutls_pkix1_asn tree. The bug manifests the following regularities:

It seems like a heap corruption, the two basic questions are: why it is not revealed at an earlier stage by malloc debugging code, and why enabling this same debugging code makes the bug disappear? It will take a while to answer these questions...


Yep, the second one is there. It manifests itself as an incorrect comparison of two struct timeval. More precisely, in the following snippet:

        gettimeofday(&now, NULL);
        timersub(&now, start, &diff);
        if (timercmp(&diff, tval, <)) {

timercmp incorrectly returns false when now differs from start by several milliseconds (the actual order of magnitude of tval is several seconds).

The bad thing about it is that both timersub and timercmp come from standard glibc headers...


Paxutils' project page is updated.


Paxutils' official page at http://www.gnu.org/software/paxutils is still unavailable, despite the fact that I have uploaded an updated version two days ago. E-mails to Savannah hackers and GNU webmasters have so far given null effect. In fact, they remained unanswered.

For the time being, I have to host paxutils page on my server.

I'm quite accustomed to various delays, but frankly, sometimes I'm getting bored...

Good reading

The Ancient Scripts site is fantastic.

A very good introduction to Korean language.

20 Sep 2004 (permalink)

Today I started the second year of learning Greek in Ίδρυμα Ελληνικού Πολιτισμού.

16 Sep 2004 (permalink)


I have released radius 1.2.94. Hopefully it won't be long before the release of 1.3.


Version 2.5.90 of cpio is available for download from alpha.gnu.org. This is the first version of GNU cpio with official NLS support.

Working on GNU Anubis. Our current deadline is tomorrow.

06 Sep 2004 (permalink)

cpio + tar + pax = paxutils

Three commits in a day are definitely too much...

The festivities are over, and I'm back to work on free software. After more than half a year delay (!!!), Savannah people have approved paxutils. The project seems to have bad karma... Anyway, since I've just released tar 1.14.90 and the version 2.5.90 of cpio is ready and working, I've started merging the two projects into paxutils. The road will be long. I am going to export as much of the good ideas and as little of the codebase from each package as possible.

If everything goes as expected, the first version of paxutils should be ready by the January. If, on the contrary, the things continue going from bad to worst as they have been during all this year... well, then I'll make it by the beginning of March.

02 Sep 2004 (permalink)

Το μνημείο της Φιλική Εταιρείας στην Οδησσό

Έχω παρευριθεί στα αποκαλυπτήρια του μνημείου των θεμελιωτών της Φιλική Εταιρείας στην Οδησσό. Ωραίο μνημείο και ωραίο θέαμα. Περιμένω με ανυπομονησία την αρχή του διδακτικού έτους στο Ίδρυμα Ελληνικού Πολιτισμού!

Today I attended the opening of the monument to the founders of Φιλική Εταιρείας near the Foundation for the Greek Culture in Odessa. Nice monument! The opening was dedicated to the 210th anniversary of the city and 10th anniversary of the Foundation. The programme of the celebrations is quite long and interesting. More info and photos in the future logs!

GNU tar 1.14.90 released

As the version number implies, it is an alpha. Complete list of user-visible changes follows:

* When restoring incremental dumps, --one-file-system option
prevents directory hierarchies residing on different devices
from being purged.

With the previous versions of tar it was dangerous to create
incremental dumps with --one-file-system option, since they
would recursively remove mount points when restoring from the
back up. This change fixes the bug.

* Renamed --strip-path to --strip-components for consistency
with the GNU convention.

* Skipping archive members is sped up if the archive media
supports seeks.

* Restore script starts restoring only if it is given --all
(-a) option, or some patterns. This is to prevent accidental

* `tar --verify' prints a warning if during archive creation
some of the file names had their prefixes stripped off.

* New configure option --with-rmt allows to specify full path
name to the `rmt' utility. This supercedes DEFAULT_RMT_COMMAND
variable introduced in version 1.14

* New configure variable DEFAULT_RMT_DIR allows to specify the
directory where to install `rmt' utility. This is necessary
since modifying --libexecdir as was suggested for version 1.14
produced a side effect: it also modified installation prefix for
backup scripts (if --enable-backup-scripts was given).

* Bugfixes:
** Fixed flow in recognizing files to be included in incremental
** Correctly recognize sparse archive members when used with -T
** GNU multivolume headers cannot store filenames longer than 100
characters. Do not allow multivolume archives to begin with such
** If a member with link count > 2 was stored in the archive twice,
previous versions of tar were not able to extract it, since they
were trying to link the file to itself, which always failed and
lead to removing the already extracted copy. Preserve the first
extracted copy in such cases.
** Restore script was passing improper argument to tar --listed
** Fixed verification of the created archives. 
** Fixed unquoting of the file names containing backslash escapes
(previous versions failed to recognize \a and \v).
31 Aug 2004 (permalink)

Good news

Welcome to my local CVS Repository.

Today I was heavily hacking on tar. Lots of bugfixes and improvements. See ChangeLog entry for more info.

Bad news

Summer is over :((
24 Aug 2004 (permalink)

Nowe zdjęcia. A oto kod który je wyświetla: webgal.cgi.

22 Aug 2004 (permalink)
Wreszcie skonwertowałem zdjęcia z wyjazdu do Kijowa (zawsze używam starej "Praktyki", stąd potrzeba konwertowania negatywów na JPEG). Oto pierwsze z nich:


Kijów. Andrzejewski zjazd. "Zamek Ryszarda". Okolo 8:00

Musiałem przypomnieć sobie kurs astronomii by obliczyć kiedy słońce będzie w potrzebnym miejscu :^)

Zamkiem Ryszarda nazwał ten gmach wybitny rosyjski pisarz Wiktor Niekrasow (podobno na cześć Ryszarda I "Lwie Serce", z ktorym oczywiście ten gmach aż nijak nie jest związany). O gmachu mówiono dziwne rzeczy, głównie z powodu tego że, jak powiadają mieszkańcy, jego kominy wydają nocą dziwne dzwięki. Swego czasu w "zamku" mieszkało wielu pisarzy i malarzy.

20 Aug 2004 (permalink)

Tak, postęp się na pewno załamał, to możemy sobie spokojnie powiedzieć. Rozglądając się - a mam czterdzieści kanałów w telewizji - nie widzę żadnych, ale to żadnych polepszeń. Widzimy tylko, że dawniej musiało się użyć pałki, a dzisiaj można mordować dzięki laserowemu naprowadzaniu bomb, wyłącznie naciskając jakiś guzik. Dzięki czemu jest się izolowanym od osobistych, emocjonalnych stresów przy tej robocie.
--Stanisław Lem

Takie oto ponure spostrzeżenie...

Hackowałem blogRight-a. Wynikiem jest ta strona.

16 Aug 2004 (permalink)

Chávez guanyà! Estic molt content.

15 Aug 2004 (permalink)

El dia de avui es, potser, decisiu per als veneçolans: es celebra el referèndum revocatori... Fa més de un any que no tinc novetats de Oswaldo i Francisco. Com estaran?

He millorat el diccionari de Quechua una mica. Llavors em torno a tocar quena amb la consciència tranquil·la.

14 Aug 2004 (permalink)

Implemented Anubis Dixie testsuite following the guidelines set forth yesterday.

Nothing more to say. Playing music...

12 Aug 2004 (permalink)
  Coca no es cocaina. Coca es la hoja sagrada.
  Jallalla Bolivia, jallalla Oruro,
  Soy de los cocanis alma, vida y corazon.

    -- Savia Andina


Added chapters about ordinal and monetary numerals.

Anubis authmode testsuite


The testsuite driver starts anubis daemon in authmode as follows:

  anubis --norc --relax-perm-check --altrc target.rc

where target.rc is the full filename to the configuration file for this instance of the program. It contents is described in detail in the next section.

Now, anubis switches to the daemon mode. Theoretically, we could have used DejaGNU's remote.exp to talk to the daemon. However, DejaGNU is not able to handle TLS encryption, so this method does not suite our needs.

Instead we launch a second copy of anubis, but this time using the following command line:

  anubis -Dfi --norc --relax-perm-check --altrc interface.rc

This instance of the program remains in foreground and DejaGNU talks to it using already existing anubis.exp module. Moreover, all the testcases can be run without modifications.

The following diagram illustrates data flow between main testsuite program and anubis daemon.


Configuration files

As usual, both target and interface configuration files are created from their corresponding *.in source files. The purpose of this step is to expand variables TESTDIR and TOP_SRCDIR, thereby providing correct paths to data and binary files. Usually this is done on compilation time by testsuite/etc/Makefile.am. However, to launch the first (authmode) instance of anubis we need to know the port number to bind to. Using any predefined port number is not a good idea, as it may be in use at the time the testsuite is run. Prompting the user to supply the port number is even worst.

The solution is to select the first available port number among TCP port range 1025-65535. For this purpose we use findport.c from the GNU Radius package.

The corresponding part of DejaGNU source will look like:

  # Prepare a sed expression:
  set sed_expr [remote_exec host "$FINDPORT -c1 -s1025 -f's^@AUTH_PORT@^%d^;'"]
  append sed_expr "s^TESTDIR^[board_info $host_board srcdir]^;"
  append sed_expr "s^TOP_SRCDIR^[board_info $host_board top_srcdir]^"
  # Create target configuration file
  set output [remote_exec host \
             "sed -e '$sed_expr' \
               [board_info $host_board top_srcdir]/testsuite/etc/target.in"]
  save_to_file "[board_info $host_board srcdir]/etc/target.rc" $output

  ... Run 'anubis --altrc target.rc' here ...

  # Create interface configuration file
  set output [remote_exec host \
             "sed -e '$sed_expr' \
               [board_info $host_board top_srcdir]/testsuite/etc/interface.in"]
  save_to_file "[board_info $host_board srcdir]/etc/interface.rc" $output

It is supposed that save_to_file writes to the file whose name is given in its first argument the lines from the list given as its second argument.

The amount of time elapsed between creation of the target configuration file and launching first anubis instance should be as small as possible, in order to diminish the probability of some other process occupying the port number retuned by findport. So, it is preferable to start first anubis instance right after creating configuration file for it.

Theoretically, it is still possible that by the time first anubis starts up the port number will become occupied. This will cause the testsuite to fail, so we should make sure an appropriate diagnostic message will be issued.

However, the probability of such failure is quite small. I have been using this approach in GNU Radius testsuite for more than four years and I cannot remember ever having encountered such a situation.

Given all the above, let's now see what should the configuration files contain.

Target configuration file, target.in

    mode auth
    bind @ANUBIS_PORT@
    local-mta TESTDIR/mta -bs -d TESTDIR/etc/mta.log \
              -c TOP_SRCDIR/testsuite/data/anubis.pem \
              -k TOP_SRCDIR/testsuite/data/anubis.pem
    logfile TESTDIR/etc/anubis.log
    ssl yes
    ssl-key TOP_SRCDIR/testsuite/data/anubis.pem
    ssl-cert TOP_SRCDIR/testsuite/data/anubis.pem

    sasl-password-db text://TOP_SRCDIR/testsuite/data/anubis.textdb 
    sasl-allowed-mech CRAM-MD5 DIGEST-MD5 
    # Err, a practical joke:
    smtp-greeting-message "Hej, sloneczko"
    smtp-help-message "Czlowieku, dopomoz sobie sam!"

Interface configuration file, interface.in

    logfile TESTDIR/etc/anubis.log
    remote-mta localhost:@ANUBIS_PORT@
    ssl-oneway yes
    esmtp-auth anubis:guessme


To be continued...

11 Aug 2004 (permalink)

Runasimi news

Added chapter about cardinal numerals in Quechua.
Though a program be but three lines long, someday it will have to be maintained.
-- The Tao of Programming


Writing LINGUA engine was a great experience and it has shown that eXtrans is a nice idea. It has, however, some deficiences. Some of them were already fixed (I hope to make CVS repository available soon). The two most important ones remain:

The diagnostics does not help to find out the exact place in the XML file where the error occurred. Its an awful work to scan the entire source to find out a misplaced or mistyped tag. I have made some improvements which do help in certain cases, but the main part of work is still ahead.

Keeping a separate database of target-source file dependencies makes it difficult to use eXtrans in makefiles. Both Ellinika and Runasimi use all-local rule to override the difficulty, but the solution is far from being optimal.

I'd like to rewrite eXtrans so that it produces usual makefiles instead of keeping its own database of files to be modified.

An interesting approach would be to create a derivative class from XTransBase which would override set_output so that it would add appropriate output file name to the makefile rule being generated. The rest of methods should probably simply call pass and do nothing. At the end of processing this auxiliary class would output the rules it has generated (and, possibly, purge orphan html files).

Theoretically this should work.

The related makefile rule will then look like follows:

	$(EXTRANS) -M $(SOURCE) > .extrans.mk
	$(MAKE) -f .extrans.mk


mailutils Coredumped on reading a single escape character. Wonder why no one has noticed this before!
tar GNU multivolume cannot accept members with filenames longer than 100 characters to straddle the volume boundary. It did not check filename length, however.
10 Aug 2004 (permalink)
Primero vamos a tomar mucha chicha y después nos pondremos a trabajar!

I have finally moved the runasimi site to LINGUA engine!

09 Aug 2004 (permalink)

Back to tar. I hope to fix listed-incremental problem today.

Anubis news:

Committed a fix to the problem recently spotted by Wojtek: when switching to the user's privileges anubis did not clear the list of complementary groups.

Tar news:

Luca Fibbi reported that version 1.14 incorrectly skipped members in a PAX archive. It turned out that it was incorrectly deeming the members to be sparse, and that, in turn, due to the fact that the member header was not decoded prior to calling skip_member(). Lots of interdependencies...
08 Aug 2004 (permalink)
Unha lingua é máis que unha obra de arte; é matriz inesgotable de obras de arte.

No coding today. Playing charango again:)

However, there are some news:

Mailutils news

The "error_t on Sparc" problem has been solved! It turned out that one of Guile includes defined error_t without defining symbol __error_t_defined. It's easy to fix, but Guile people should have known better than doing such things.
07 Aug 2004 (permalink)
all right-thinking people know that (a) K&R are right and (b) K&R are right.
-- Linus Torvalds

I have a strong feeling that back in the days when we were editing our code with ed (I still use it quite often, I must admit) our code contained less errors and was far more readable than today.

I have just finished cleaning up my buddy's code that was written on a 120-columns-per-line screen and contained quite a few copy-n-paste bugs. Sure, one can read a 120-chars single-line declaration. One can even read a whole 80-line screen of such declarations, but I strongly doubt whether one will really understand what he has read and be able to spot out the error. Especially when one has been looking at his screen for 20 straight hours, you know.


My todo list is quite long (as usual), but I have a strong urge to play charango... Its strings will surely keep me away from the console today. Chores will wait. Vielleicht das nächste Mal:))

Anubis news

Implemented XELO extension. XDATABASE EXAMINE now works using MD5 hashes, just as was proposed in the initial 'pixie-dixie' draft.

Mailutils news

Lots of changes. Still cannot understand why compiling guimb/main.c fails at argp.h on Sparc. Hopefully Alex will be able to provide a preprocessor output file, this should solve the puzzle...
06 Aug 2004 (permalink)

Awfully tired of writing docs!

Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing.
-- Dick Brandon

Radius news:

Tar news:

Two updated localizations are available for 1.14: Dutch and Simplified Chinese.

Mailutils news:

Fixed minor bug in 'include/mailutils/daemon.h'.
05 Aug 2004 (permalink)

Started weblog.

Thanks Wojtek for an excellent piece of software!

Radius news: