Older blog entries for uweo (starting at number 31)

I released ftpcopy-0.4.0 yesterday. There's no really compelling reason to upgrade.

Buried in work. Unsatisfied with almost everything, especially including the state of the things regarding our building.

Bad weather for what seems to be eternity. Coming to think about it: I'm swimming a lot. Even at the moment. But the people i'm supposed to swim with, in the club, are disappointing. The hall is closed, due to maintainance. We would get 2 lines outside instead ... guess what? "It's the wrong weather for swimming outside". Morons. No, they are worse. [rant censored]

On the bright side: i bought myself an olympus digital camera. Years ago, when the first digital ones were available, i was quite disappointed. The pictures looked bad even on VGA. I didn't look at digital cameras for about 5 or 7 years. I expected improvement, but i was surprised how much better these things are now, at least in the two and three million pixel classes.

Back to work: Write a converter from a relatively sane data format to a misdesigned XML-Format. The men who designed EPP should be shot on the spot. Those idiots who decided to use this piece of shit in it's unfinished state should be shot, too.

I release ftpcopy-0.3.9 yesterday. It fixes two file descriptor leaks. 0.3.8 was supposed to be free of bugs. I obviously didn't remember to close these file handles.

The proof-reading of the library is finished. Even the documentation seems to make sense. Most of the tools still need to be checked.

Be sure to never catch a 17"-monitor with your feet. Yes, the monitor is OK, thanks for asking. The foot? More or less so.

I released ftpcopy-0.3.8 today. There are, fortunately, no really important reasons to update.

Continued to proof-read and document the library. 80% of the public interfaces are done. 100% of the private interfaces are done - except for the documentation. And then i'll have to do the same for the tools and have to write some introduction. Let's say i'm at 50% overall.
The bad thing is: i will not have time to finish it this week.

Life sucks. Bad news anywhere. No, that's not true, but there are some _very_ bad news.

A bug report for ftpcopy came in today: ftpcopy doesn't work over socks5 using runsocks. After a little bit of investigating it turned out that the socks5 library includes a wrapper for select(). This wrapper sets some flag if a non-blocking socket is connected now. Later this flag is needed inside the getpeername() wrapper.
Now there's no such wrapper for poll. Impact: Bang. Connect failed. No, not really, but ftpcopy couldn't tell.

I'll include some way to turn of the usage of poll at compiletime. The clean solution would be to fix socks5, but i don't really like the nec peoples copyright, and i don't like the code. Somebody forgot KISS.
Besides, what's socks good for? Isn't it just an excuse for not using the right firewall?

I wrote:

I'm quite confident that it's stable
Proofreading is better. It wasn't stable, of course. I wrote a buffer to a place on the disk instead of reading it. Quite stupid, but _hard_ to detect. I couldn't believe it when i looked into the code.

I wrote some code in the mean time. I also wait for the next fatal bug report for ftpcopy, but nobody seems to have found it by now. Oh well.

The new code is a caching library with some command line tools around it. Nothing complicated, just a kind of "put this into the cache and if there's not enough space then throw away the oldest entries", but it took me some days to get the bugs out. I'm quite confident that it's stable by now.

Now i want to package it up and release it to the world, hoping that somebody else will not have to reinvent the wheel. But coding for me is one thing, coding for others is completely different. I mean, it hurts to say "you are an idiot and this code doesn't work reliably" to yourself - but it hurts even more if someone else tells this truth to you.
So i better make sure ... what? That's there the problem starts.

  • Documentation. There be a manual page? Sorry, have to write this myself. But i hate writing documentation.
    This time i'm going to not use POD but tmac.an, and try to get something readable from groff -Thtml.
  • Code quality. There's a big difference between "works for me" and "works or does something reasonable in every situation". "works for me" usually means "breaks on machines with different endian or alignment requirements". Think of possible overflows everywhere. What about strange input values or a corrupted cache? I've to re-read the whole stuff. It's _so_ boring.
  • What hidden limitations do the functions have? Remove or document them (the problem is the "hidden" part).
  • Simplicity: make sure that the code is so simple that at least i don't have problems to understand it in 17 months from now. This possibly means to rewrite the function to enter something into the cache. Not funny.

  • Library API: make sure the API is consistent. I tend to not even notice "f(char *buf, bufsize)" against "g(bufsize, buf)". Make sure the functions, constants, ... have reasonable names.
  • Command line API: make sure the tools options and arguments are consistent.
  • Locking: Did i _really_ correctly document the locking requirements? I don't think i'll get it right the first time ...
That's _work_. Boring work. Stuff for some evenings.

And it's summer now. For that kind of stuff winter has been invented, i think.

Sick, including, but not limited to, headaches. Not funny.

Am i just unable to think or is this paragraph of 6.16 of the usefor draft starting with

Whenever an Xref header is created by an agent for an article which includes a Replaces header with "disposition=revise" or "disposition=repost" (6.15), it SHOULD include, within the location field of each newsgroup in the Newsgroups header of whichever of the old articles referenced in that Replaces header is still current, a corresponding "revise:<old-article-locator>" or "repost:<old-article-locator>" for the oldest article known to be replaced, where <oldest-article-locator> is the article-locator under which that oldest article was filed.
not really clear?
I had a hard time understanding this sentence, but if i understood correctly then the chance that this will be implemented in the more important servers is nil.

The new built house is being painted ... but there's no sign that the work on the old one will continue this month.

Junta was the next game, and a funny one, again.

Continued to work on the news server today. Work? Rewrite of almost anything. Fixed a few bugs, added a few test cases. Spent most of the time thinking about some major design problems (like how to get a moderately fast history without needing lots of memory). No conclusion yet, but a few ideas:

  1. move the history to an own daemon process.This should take care of the ever-changing API problem :-)
  2. leave the group index as it is for now.
    can use a daemon for that, too, but later ...
  3. the history stuff will be accessible through a udp socket, just the commands will have to go through a pipe or unix daemon socket.
  4. not having an overview is fine, except for performance. Possible speedup: move the article header caches from the nntps daemons to a cache daemon.
    Is it worth the pain? (not that performance is _so_ bad, but the whole stuff is slower than i like it. The parsing isn't the problem, it's the article read time.)

Apart from that: i'm not feeling well. Am i catching a cold or is it because i didn't sleep enough? (the later is true, anyway)

Gaming evening. And today is the first time in all the long years that i'm certainly not going to win britannia.
That's what you get if everybody else allies against you. Should i get the lowest number of points i'll choose Junta for the next game.

Since the last diary entry i've worked on ftpcopy (0.3.7 released - a bugfix release only), which now has a test suite. I've spent about 16 hours or so on that, including fixes for the bugs i found during that. The time was well invested.

I also worked on upgpverify. It already had a test suite (yes, i took this project serious). The 0.3.3 version adds the ability to deal with signed news using the X-PGP-Sig header.

Junta will almost certainly be the next game.

Work wasn't funny this week (it wasn't since i came back from vacation).

22 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!