Older blog entries for pasky (starting at number 5)

Sorry for lack of update yesterday, I was quite tired because of too little sleep and it's same today. So briefly about yesterday, basically I was attending the Czech Math Olympics - category P (Programming). It was the regional round, and there usually aren't too many people there from this region --- we've been six or seven at best. It's the Computer Science style, that is not those stupid \"Code silly mouse-clicking detecting gadget in half an hour\" practical exercices (I've been on few as well). You had just paper and you ought to describe your thoughts and write your program there. The tasks weren't easy.

Actually, one thing I really hate is writing computer programs (in C or Pascal or another computer language) on paper. It just seems really stupid. They are here to program computers, therefore they should be written into computer. On the other side, they were mostly really just suplementary to the algorithm description, which was the main challenge.

The last year, I thought I did it rather well. Then my best rank was IIRC five of ten points in one task or so. Thus I'm better quite sceptical this time, but I still believe I did better than the last year. I certainly didn't reach the most optimal solutions in all tasks (at least in two I know I'm being suboptimal), but they all should work. Let's see. It's quite important because if you're good enough to progress to the national round, you're also automatically enrolled to MFF of CUNI CZ. That's really tempting and a good motivation. Maybe I'll describe some of the problems from the regional round later if I'll be in mood and have enough time.

Ihaquer confirmed my 2.2 theories, it is indeed not vulnerable.

We've been celebrating the Orthodox Christmas this night.

I'm currently mostly working on BlueCode, chattering on IRC, reviewing few ELinks patches (and I implemented some really simple quick'n'dirty <object> tag support) and now I should be sleeping. Tommorow I'm gonna visit my beloved school again.

I should implement paging of my weblog page (it's already over 100kb), and I should maybe insert some small automagic footer to the XML-RPC message sent to Advogato that my real weblog is elsewhere and only selected entries are cc'd to there (or here, depending on your POV ;). But I'll do that after I will actually sometimes submit some non-technical entry which would have nothing to do on Advogato.

Now I should yet have a look at the History stuff we're supposed to take an exam from tommorow. Bah. (Roughly) 1400 --- 1620. That's gonna be fun. And I should finish the missing bits of my seminary works. I'm translating one piece from Douglas Hofstadter's GEB: EGB in my seminary work for English (I must add some one-page introduction and closing for the translation); I'll be writing about that marvelous book in some other entry surely. The other work is to Math, I'm doing some general overview of Fibonacci (and related) numbers there. It's really just browsing the net looking for interesting stuff. But now I'll be doing only some practical applications (it's easy to talk about various occurences in nature, then some applications in art etc) and a little bit of history (Bonacci, Lucas, ...).

Woohoo, I've actually finally added at least some workaround to always reconnect to the db, this should temporarily fix my weblog page being blank besides the caption most of the time ;-).

Okay, I've planned to do various great stuff today. Well, regarding that, nothing came out of it (as usual). Oh well, I've wrote one paragraph for my article. Otherwise, well, I'm not exactly sure what have I been doing, I can remember some more ELinks reviewing, and some IRC idling.

Then, I've noticed that Linux-2.4.24 came out (fixing the mremap() vulnerability), so I had at least some fun for the evening. First, I was hunting for the vulnerability in 2.2 tree, as it was suggested by the advisory. However, when trying to backport the 2.4 fix (not Linus' 2.6 one, which is quite general and potentially having some side-impacts, so I'm afraid to port it to 2.2), I've found that sys_mremap() in 2.2 is missing that concerned code at all.

Basically, (supposedly) the exploit relies on ability to pass newaddr to mremap(), but in 2.2 mremap() doesn't take it yet. So the only alternative to exploit that is to have the new address automatically assigned by mremap() (and the new address would need to be \"dangerous\" one). However, that's impossible because new size of mremap() must be zero for the exploit and in that case, mremap() would always just munmap() it. Possibilities:

  • There is something I don't know about.
  • The advisory is mistaken and the 2.2 line is NOT vulnerable.
  • If it is vulnerable and I'm not even more misleaded, the 2.4 fix is not complete.

Anyway, mremap() looks dirty, maybe some other vulnerabilities will be discovered in it soon, some people say they are on a track of something. Quite possibly nothing will come up from it, though.

Then I was cleaning up the Kernel's homepage. Basically enhancing w3c compatibility and tidying it up a little. Now I'll just sit and watch how hpa rejects or drops my patches ;-).

And last I was talking with Dave Weinehall, and he said that he'll make 2.0.40-rc7 available later this week (-rc6 is from May 2002) if everything will go well. Great to see 2.0 still maintained.

And I'll be sleeping for only 6 hours again. Screw it.

You know, I committed myself to so many great things today. I slept very little last night so I promised to go sleep early (between 11pm and midnight, hah!) today, I'm going at school tommorow again, after two weeks of Christmas holiday (I'll write some more about last-year school pains in some other entry). And I thought I'll be reviewing some more ELinks commits (well I did but far less than I expected) and be fixing some ELinks glitches (well I did but far less than I expected). And I wanted to do some more BlueCode work (will be worthy mentioning only if I get back to it and then you'll read about it for sure in another entry as well), I did none. At least I finally fixed all the GTS bugs I knew about.

Pah, this CIA thing is indeed pretty time-consuming. But I'm finished with it, I'll just fix bugs in my ciabot.pl CVS CIA client from now on! And I also did some hacking on my own CVS commits-over-mail announcer (which I consider the best one available by now [I'll be happy to be presented by some better one so that I can catch up ;], except that it doesn't support CCMAIL and CVS_SILENT [yet]).

My current plan is pretty clear. First BlueCode, then PaVS (how I'm looking forward for that). That mixed with random writing articles for root.cz (high-priority) and leading ELinks to 1.0 (lower-priority). And that intervowen by doing stuff to earn some money, of course (that is GTS hacking for now). Bah. Well, yes. There's the school as well ;-).

My sister had her birthday today (5 yrs old). She got a nice toy cooking set, some crayons etc - only few presents, she received most at Christmas already ;-). And she'll have her name day in two weeks! Well, we had at least a good tasty cake, done by dad - he can do great cakes.

I didn't do so much as I wanted today :-(. Most of the day I was doing some annoying debugging for GTS (my logic is rather complicated and sick in one part of the exchange alarms watching application I'm doing for them), and I didn't fix it fully yet, so I'll have to finish it tommorow :/. Otherwise, I was working together with scanline on converting ciabot.pl to talk XML to CIA and we were successful.

Also poked Advogato again, and rated few other people, and marked myself as involved in another few projects. It's funny how the web-of-developers works, it's not easy to browser through people certifying themselves and not hit someone you know (as in you at least talked to him through IRC or email directly) every few nodes. Maybe it's sad, but I guess one of my mid-term life goals is to benefit the OpenSource community enough that people decide I attained the Master level (which is rather just a motivating factor for finishing the large number of started projects of mine to some usable shape).

XS26's noc machine again dead, it seems, I jsut randomly poked it when looking for something. Sad state. I don't think I'll get myself largerly involved again, noone is really interested it seems. Zebra sucks ;-).

Yippie! Finally made XMLRPC export to Advogato working --- I can't say that either XMLRPC::Lite or RPC::XML is any well documented, the opposite is truth rather and it took a little of googling and trying random approaches to figure out how to make at least RPC::XML working reasonably. I have to admit that it isn't really that ellegant as in Python, though.

Advogato people, please tell me if you will feel that my overly long, elaborate and boring rants are unappropriate for Advogato and I should rather keep them to myself (there you could also leave your opinions in discussion theoretically available near each entry). Oh and also apologies for the empty entry I have submitted a while ago, I thought naively that I could delete it afterwards. Hmm, actually I could implement these two features (deleting of diary entries and discussion attached to them) in Advogato, what do you think? Would it (especially the discussions) be feasible?

Aside of the usual IRC idling and submitting new hostfs patch for 2.5 UML, I didn't do that much today. I started to resurrect my activities (and unforunately pretty much the only activities) at XS26 a little, repairing some more broken db entries, taking care about some users crying for a long time already and playing with few peerings. I think I should finally allocate few days for a completely rewrite of the software, releasing it as opensource, finishing support for dialup users and user BGP4+ peerings, fixing up the routing and bringing XS26 to as much MIPP as possible and reasonable. So much to do... is it even worth it? Is it going to actually help enough people?

One of the main problems is actually with the routing software. Plainly: we use zebra now, and it sucks. The NL PoP which enables our virtual presence at AMSIX is disabled now due to zebra eating all the CPU there, ospf6d likes particularily crashing and going into infinite loops as well, bgpd is probably the least problematic nowadays but sometimes it does strange things as well. And time by time, the whole zebra suite happens to read from some blocking fd and hang happilly. Zebra just apparently can't keep up in mixed Linux/*BSD environment (that shouldn't be much an issue, though) with relatively big (around 5000 entries) and very dynamic (entries flying in and out with average frequency of one change per minute or so) routing table, at least not for us. Hacking it seems pretty ugly job due to nature of the bugs, which are difficultly trigerrable and unreproducible, happenning seemingly randomly. But what are the alternatives? I know only of BIRD, which would have to be told about IPv6 OSPF (we are using OSPF for choosing routes between individual PoPs and BGP for all the other routes) and the *BSD world.

I've been thinking about some usable enough versioning/revisions keeping system, when becoming annoyed about CVS for another time and thinking what to migrate ELinks source code to and what to use as a suitable platform for tracking of my bunch of Linux Kernel patches (maybe it will be best done manually anyway, it seems... I will see yet). Why I don't like CVS again? (sorted roughly by importance)

  1. The concept of changesets (tracking of whole commits and ability to work with them compactly) is totally absent --- that is particularily annoying during the daily work and pretty much defeats the version tracking ideal.
  2. When merging two branches, intermediate history between the branchpoint and mergepoint of one of the branches is lost, being compressed to one compact diff applied to the other branch. You lost possibility to individually track the evolution of the branch, revert various specific changes etc. This flaw becomes particularily annoying when you are merging with someone else tracking his working copy of the project privately, so you can't at least go and stuff the original branch revision numbers to your CVS to get the needed diffs (see also below about distributed development).
    Being able to merge a branch repeatedly without any problems is obviously a natural requirement as well.
  3. One cannot move and rename files reasonably, I mean without losing history.
  4. Treating directories too specially, being unable to remove them, move them etc. Also the directory structure should be versioned if possible. Let me also stuff here that having 'CVS' subdir crying at you there could be disturbing for some people :^). I can't see reason why it can't be ./.CVS or ./.cvs ...
  5. Dumb permissions system. You can't finegrain permissions gained to individual developers over branches, files etc.
  6. (At least partial) absence of metadata tracking --- files permissions and ownership, in particular. Symlinks and other special files storage is included in this point as well.
  7. It has problems with binary files. Ie. binary diffs support is missing.
  8. Ineffecient communication over network, and usually hackish (pserver) accomplishing of this communication at all.
  9. Absence of distributed development support, where people could easily track their personal copies of the repository and doing what they need there, then being able to ask the maintainer of the central project's repository to revisit their changes and optionally pull them all or only some changesets back to the central repository, where they would merge intelligently without not losing the history. Obviously per-branch write permissions and intelligent merging alone could do, but the branch number could grow in an uncontrollable fashion, the administrative load would be high (since to be able to benefit from this, each potential patch maker which would like to have the history tracked would ask for his account and branch for feature A and branch for feature B) and being able to work on a local copy of a repository is still incredibly useful (were you ever wanting to code something when on vacation or in airplane? do you have dialup connection?).

So I've been also looking around for various OpenSource (yes, the favorite here would be certainly BitKeeper, which seems to excellently implement most of these ideas) tools which would be able to accomplish at least a part of this. Also it should be able to use CVS-compatible interface at least for an readonly access --- 95% (or more) of OpenSource people out there just use CVS and I want them to be still able to easily track the latest ELinks tree.

The first obvious candidate was SubVersion, but the intelligent merging is mandatory for me and svn looks to entirely miss that kind of thing, unfortunately; also, I didn't look at the code but I tend to usually trust Al Viro regarding it ;-). But when forgetting SubVersion, there's frankly not much out there I've found. There's OpenCM, which misses most of the mandatory features listed above, though. Looking at Perforce, I've found only marketing talks and no real list of features which matter. A few other projects lacked any easily accessible features list at all. Anyway, the promising projects are Aegis (from what I saw at web, it is almost ideal; its problem is that the documentation is in .pdf only, which is a highly hostile document format for me) and arch (I'm not sure if that one would be that easy to have CVS frontend).

First I've thought about writing some version managment system reasonable for me from scratch, but now I hope I could adapt and possibly extend (if it has already the most fundamental features, things like metadata tracking or CVS frontend [provided that the underlying concepts aren't *TOO* different] shouldn't be that easy) either Aegis or arch. I will check them out tommorow and we will see if there will come anything out from it ;-). Do you have any other tips for good tools? Or any suggestions regarding my working \"Pasky's Ideal Versioning System Features Specification\"?

Oh, look, I've been *again* writing too much. I should rather sleep, cure from illness, not forget to take Bromhexin regularly. And... <center><table border=\"1\"><tr><td>Don't forget to water the flowers! Don't forget to water the flowers!</td></tr></table></center>

13 Feb 2003 (updated 13 Feb 2003 at 00:58 UTC) »

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!