=== jackson is now known as Guest1629 | ||
=== jackson_ is now known as Noskcaj | ||
=== chihchun_afk is now known as chihchun | ||
=== jackson is now known as Guest7088 | ||
pitti | jibel: FYI, disabling wazn; it needs a reboot | 06:35 |
---|---|---|
elfy | morning DanChapman | 07:14 |
DanChapman | morning elfy :-) | 07:22 |
KI7MT | GM all .. | 07:28 |
Noskcaj | evening KI7MT | 07:53 |
KI7MT | Noskcaj, Hows goes the battles .. saw your not about the up coming meetings, I'm really interested in is autotest and autopkg stuff, was very interesting reading .. but me a python don't see eye-to-eye on things :) | 07:56 |
KI7MT | *note | 07:56 |
jibel | Good morning | 07:56 |
KI7MT | GM | 07:56 |
jibel | pitti, why does wazn need a reboot? | 07:57 |
Noskcaj | KI7MT, for autopilot you'll want to talk to DanChapman. For autopkg, i'm guessing jibel and/or pitti | 07:57 |
jibel | pitti, nm, I read your comment on other channels | 07:57 |
Noskcaj | KI7MT, Timezones make it difficult for me to make meetings | 07:58 |
pitti | jibel: trying to run VMs just hangs; there is a kswapd0 process eating CPU, and causing high load | 07:58 |
pitti | jibel: and it seems there is a stalled apt-get update or so | 07:58 |
pitti | jibel: I don't have root on the box, do you? | 07:58 |
KI7MT | Noskcaj, Yeah TZ can be a problem for allot of us .. was just good reading about it, interesting stuff. | 07:59 |
pitti | jibel: btw, I'm currently working on adt-run understanding a simple package name | 07:59 |
pitti | jibel: i. e. "adt-run libpng --- adt-virt-*" | 07:59 |
pitti | jibel: this will use apt-get source in the testbed | 07:59 |
pitti | jibel: that entirely avoids copying the source, so this should help with linux | 08:00 |
pitti | jibel: and also, it will make our ARM/lxc runners more convenient to use as we don't need to download the source to the host in jenkins | 08:00 |
pitti | actually curious that nobody requested this yet :) | 08:00 |
pitti | in fact I just got it running, need to write tests now | 08:00 |
pitti | OMG I understand autopkgtest's code, I'm d00med | 08:01 |
jibel | pitti, I don't *officially* have root on that box, so I'd rather wait someone from CI | 08:01 |
jibel | pitti, calling adt directly with a package name is definitely interesting | 08:04 |
jibel | pitti, I've been thinking about enabling arm nodes, and we don't need all the overload of the wrapper script around adt-run | 08:04 |
jibel | pitti, just a jenkins slave that calls adt-run, with the results copied into the workspace should be enough | 08:05 |
jibel | and call the ARM job as a non-blocking post-build action of x86 jobs | 08:05 |
pitti | jibel: right, and I fixed --output-dir to be working and actually useful (and cleaning up cruft) | 08:06 |
pitti | jibel: that was my idea, that we can reduce the wrapping of adt-run to a minimum | 08:06 |
pitti | it should just be adt-run --output-dir=... <pkgname> --- adt-virt-lxc --ephemeral trusty-cloud | 08:07 |
pitti | jibel: we'll still need some maintenance jobs for updating the container etc., and you probably don't want to hardcode "trusty" here ^ either, but by and large that ought to work? | 08:07 |
jibel | pitti, yes, but we can keep the setup phase to a minimum | 08:12 |
pitti | jibel: we still need some option to either run "apt-get update" after opening the testbed, or a more generic "run this script before doing anything", right? | 08:16 |
pitti | or should we do that as a separate step? | 08:17 |
pitti | i. e. call lxc-* to update the container, and then call adt-run? | 08:17 |
pitti | the update would then happen in the actual container, not the ephemeral one; although this sounds much less robust | 08:18 |
pitti | probably best if I add an --apt-update option to the lxc runner | 08:18 |
pitti | jibel: hm, hang on, that's not enough -- we also want to enable -proposed | 08:27 |
pitti | jibel: LXC alreay has a concept of hooks; would it work to pass a script to adt-virt-lxc which it could then pass on to lxc for running, or should it rather do that by itself with just the usual autopkgtest way of running commands? | 08:30 |
jibel | pitti, we could do that in a mount hook, not sure how it works with ephemeral containers | 08:32 |
pitti | jibel: I just don't want to fiddle with the container configuration too much; for starters, I wouldn't even know where that lives, and I didn't see an lxc-start optoin for that | 08:32 |
jibel | pitti, another option would be to bind mount a specific directory for each run and execute any executable script in a specific location | 08:35 |
jibel | lxc-start-ephemeral has an option to specify a directory to bind mount | 08:35 |
pitti | jibel: well, adt-virt-* already know how to run a shell script in the testbed | 08:36 |
pitti | jibel: so we could just re-use that | 08:36 |
pitti | then it wouldn't even be limited to adt-virt-lxc, but work for any runner | 08:37 |
pitti | it would then need to be a shell script, but that doesn't seem like a too bad restriction? | 08:37 |
jibel | pitti, how do you do that (make adt-virt-* run a shell script)? | 08:43 |
pitti | jibel: well, you'd read it and call Testbed.execute(), adt-run does that all the time | 08:44 |
jibel | ah, ok | 08:44 |
pitti | that's using the auxverb or shstring, whatever the testbed provides | 08:45 |
elfy | balloons: https://code.launchpad.net/~elfy/ubuntu-manual-tests/1249362/+merge/202809 | 09:36 |
elfy | all that I thought needed doing are done | 09:36 |
slickymaster | morning all | 10:22 |
pitti | rbasak: FYI, what we talked about yesterday: http://anonscm.debian.org/gitweb/?p=autopkgtest/autopkgtest.git;a=commitdiff;h=a615e39eb92b | 10:36 |
rbasak | pitti: that looks great. Thanks! | 10:37 |
rbasak | I hate that whole global variable thing, btw. But I guess the whole virtsubproc interface needs to be changed to fix that. | 10:38 |
pitti | rbasak: in case you do this often, http://anonscm.debian.org/gitweb/?p=autopkgtest/autopkgtest.git;a=commitdiff;h=2262ca0 should make things quite a bit simpler, too; we'll use that for running archive autopkgtests on ARM, to avoid unnecessary copying and extra wrappers around adt-run | 10:38 |
rbasak | That looks handy. | 10:40 |
davmor2 | Morning all | 11:01 |
=== chihchun is now known as chihchun_afk | ||
pitti | jibel: | 11:17 |
pitti | ./run-from-checkout --setup "xapt-get update" libpng --- adt-virt-schroot trusty | 11:17 |
pitti | jibel: err, ignore the "x"apt-get, that was for testing | 11:17 |
pitti | jibel: --setup-commands can either get a file name, or the actual commands | 11:17 |
jibel | pitti, setup will be executed every time the testbed is started? I'm thinking about the revert capability of lxc based containers where the ephemeral container is destroyed between tests | 11:24 |
pitti | jibel: hmm, I need to check that; but that would only happen if you use the binaries from the built source, no? | 11:26 |
pitti | oh, you mean for multiple tests | 11:26 |
jibel | yes for multiple tests | 11:26 |
jibel | run test1, revert, run test2, ... | 11:26 |
pitti | I'll add a test case for that (haven't written tests yet) | 11:28 |
pitti | ATM I just run it once, so that's wrong | 11:28 |
=== _salem is now known as salem_ | ||
pitti | jibel: ok, now works with lxc/revert and multiple tests | 12:24 |
pitti | jibel: oh, debian bug 736416 just came in, interesting | 13:22 |
ubot5 | Debian bug 736416 in wnpp "ITP: debci -- continuous integration system for Debian" [Wishlist,Open] http://bugs.debian.org/736416 | 13:22 |
jibel | pitti, oh, that's interesting | 13:28 |
pitti | jibel: I'm currently writing a response | 13:32 |
pitti | jibel: rebuilding VMs on wazn, the current ones seem broken (connecting hangs at 1/18 tries) | 13:52 |
jibel | pitti, ack | 14:01 |
senan | balloons, danchapman : Good Eve | 14:27 |
DanChapman | senan, hey | 14:32 |
pitti | jibel, rbasak: ok, I now also reduced the number of test bed resets (with LXC) from 3 to 1, there were several unnecessary ones | 15:10 |
rbasak | Nice! | 15:10 |
pitti | jibel, rbasak: can you think of anything else which I should add/change/fix for our arm/lxc autopkgtest endeavour? | 15:10 |
rbasak | Have you considered how to keep the lxc template up-to-date? | 15:10 |
pitti | rbasak: that isn't the job of adt-run itself, but we quickly discussed it | 15:11 |
rbasak | I noticed that "apt-get update" doesn't get run, incidentally. Not sure if that matters if you're not building anything. | 15:11 |
jibel | rbasak, that should be a separate process | 15:11 |
pitti | rbasak: ideally we'd rebuild the trusty-cloud container every day from the current cloud image | 15:11 |
pitti | rbasak: ah, for that I added http://anonscm.debian.org/gitweb/?p=autopkgtest/autopkgtest.git;a=commitdiff;h=6e643986c6 | 15:11 |
pitti | rbasak: i. e. for every test we can run a setup script to enable proposed and do apt-get update | 15:12 |
rbasak | Ah. That'll be handy! | 15:12 |
pitti | rbasak: and also apt-get dist-upgrade if we desire | 15:12 |
pitti | rbasak: but of course we don't want dist-upgrade to run on a weeks old base image, so we need to refresh that daily | 15:12 |
pitti | either by rebuilding the container, or dist-upgrading it | 15:12 |
pitti | as I said yesterday, the output of lxc-create -t ubuntu-cloud is rather poor | 15:13 |
pitti | it has broken apt sources and old packages for some reason | 15:13 |
pitti | if we fix that, we can use that; until then, perhaps just run dist-upgrade | 15:13 |
pitti | perhaps that's also an artifact of using saucy's lxc packages, I don't know | 15:14 |
rbasak | The only other thing I can think of is the necessity to say --gain-root=sudo, instead of adt-virt-lxc somehow telling adt-run what the default should be. But that isn't a blocker. | 15:15 |
pitti | rbasak: how do you mean? | 15:19 |
pitti | for now you need to run lxc-start as root anyway, so the entire adt-run runs as root | 15:19 |
rbasak | pitti: I have to say: "adt-run --gain-root=sudo ... --- adt-virt-lxc" | 15:19 |
pitti | and virt-lxc cna then su to the ubuntu user for non-root tests/builds | 15:19 |
pitti | aah | 15:19 |
pitti | nice, I didn't try that | 15:20 |
rbasak | Since adt-virt-lxc specifies suggested-user=ubuntu and gives adt-run root. | 15:20 |
pitti | nope, doesn't work | 15:20 |
pitti | that calls virt-lxc as user instead of root | 15:20 |
rbasak | Yes | 15:21 |
rbasak | That's the intention. | 15:21 |
rbasak | I run adt-run as a normal user. | 15:21 |
rbasak | adt-virt-lxc calls sudo as necessary. | 15:21 |
rbasak | brb phone | 15:21 |
balloons | mzanetti, ping | 15:23 |
pitti | rbasak: ah, you use per-user containers then? I created mine system-wide | 15:23 |
=== salem_ is now known as _salem | ||
mzanetti | balloons: pong | 15:23 |
balloons | I was going to ask your opinion on reminders app mocking, though I already know it :-) | 15:24 |
balloons | I was planning on going down the server mocking route with autopilot as you know. elopio mentioned this as the best example he's found: http://bazaar.launchpad.net/~ubuntuone-hackers/unity-scope-click/trunk/files/head:/src/tests/autopilot/unityclickscope/ | 15:25 |
mzanetti | balloons: what does this do? | 15:27 |
rbasak | pitti: (done on phone) No, I use system-wide ones. | 15:28 |
mzanetti | balloons: ah... simulates a server and the app would use localhost instead of the real server | 15:29 |
balloons | mzanetti, yes | 15:29 |
mzanetti | balloons: not sure what evernote sends... you'd need to sniff the connection | 15:29 |
rbasak | But since lxc-* (at least in the past) required root, I tried to hide that inside adt-virt-lxc, so that the interface wouldn't change in the future. | 15:29 |
pitti | rbasak: hm, if I call lxc-* as user, it tries to use containers from my ~/.local/... | 15:29 |
pitti | $ lxc-config lxc.lxcpath | 15:29 |
pitti | /home/martin/.local/share/lxc/ | 15:29 |
mzanetti | balloons: I'm a bit afraid it might be a binary protocol | 15:29 |
rbasak | Thus adt-virt-lxc calls sudo, but adt-run should be unaware of that root requirement. | 15:29 |
pitti | $ sudo lxc-config lxc.lxcpath | 15:29 |
pitti | /scratch/lxc | 15:29 |
balloons | I figured before I dove in on this it might be easier to get your thoughts | 15:29 |
balloons | mzanetti, ahh, so not nice json :-) | 15:29 |
rbasak | From adt-run's point of view, it gets root inside the container, and can switch to ubuntu if necessary. | 15:29 |
rbasak | adt-virt-lxc specifies suggested-user=ubuntu, and adt-run uses that. | 15:30 |
pitti | rbasak: right, it's just that lxc now has these system/user modes | 15:30 |
rbasak | But then adt-run tries to call fakeroot, and that doesn't work. | 15:30 |
rbasak | (since fakeroot isn't installed) | 15:30 |
pitti | rbasak: it hasn't been like that in saucy yet | 15:30 |
pitti | $ lxc-config lxcpath | 15:30 |
mzanetti | balloons: no... it's not json for sure. it might be xml, but no idea what libthrift does | 15:30 |
pitti | /data/lxc | 15:30 |
rbasak | Which is a bit silly, because adt-run *had* root inside the container, but gives it away because of suggested-user | 15:30 |
pitti | rbasak: so I think that's new in trusty | 15:30 |
rbasak | So I have to specify --gain-root | 15:30 |
pitti | rbasak: is your host running saucy or trusty? | 15:32 |
rbasak | pitti: trusty right now. I hadn't noticed anything different though. Apart from needing to "chmod 755 /var/lib/lxc", I haven't had to change how I work at all. | 15:32 |
pitti | rbasak: hm, so I wonder why lxc as user now wants to look into my $HOME for containers | 15:33 |
elfy | balloons: if you missed the ping - those testcase updates are done now | 15:34 |
balloons | elfy, I did indeed. Shall I review then? | 15:35 |
elfy | up to you - I've done my bit :D | 15:35 |
elfy | I'd do the testcases - but you don't get karma for it :p | 15:36 |
elopio | I'm walking with the dog. | 15:36 |
elopio | bbs | 15:36 |
* balloons reviews | 15:36 | |
pitti | ubuntu@cyclops-node02:~$ adt-run -o /tmp/adt-libpng --setup "apt-get update" libpng --- adt-virt-lxc --ephemeral trusty-cloud | 15:49 |
pitti | jibel, rbasak: ^ this now works well, and just takes a minute or so | 15:49 |
pitti | of course the --setup needs to be extended a bit | 15:49 |
pitti | /tmp/adt-libpng/ then has apt0t-build-stderr, apt0t-build-stdout, and log | 15:49 |
pitti | IOW, the jenkins attachments that we want | 15:49 |
balloons | elfy, I like your branch names :-) | 15:51 |
jibel | pitti, so in jenkins basically what we need in the job is something like adt-run -o $WORKSPACE/results --setup extended_setup_script $PACKAGE --- adt-virt-lxc ... | 15:51 |
pitti | jibel: correct | 15:51 |
elfy | balloons: lol | 15:51 |
pitti | jibel: where setup_scripts shoudl enable -proposed, run apt-get update, and perhaps dist-upgrade -y (not sure whether we currently do) | 15:51 |
jibel | and cleanup the results dir before jenkins grabs the attachments | 15:51 |
pitti | jibel: the only clutter that I see in it is an empty binaries/ directory | 15:52 |
pitti | jibel: for build-needed they will be there, but not in our case; I'll fix that | 15:52 |
pitti | jibel: all the cruft (fifos, "xout" files, etc.) that you saw in earlier versions are completely gone | 15:52 |
pitti | jibel: enabling -proposed is basically echo'ing the deb+deb-src into sources.list.d/ | 15:54 |
balloons | whoa, so many files changed :-) | 15:55 |
elfy | I know :( | 15:55 |
elfy | I'd have left them all tbh | 15:55 |
balloons | merged and syncing | 15:57 |
balloons | I see several merges from Ki7MT | 15:59 |
balloons | elfy, do you have time / desire to review some of the others? | 16:06 |
balloons | I see you've earmarked the xfce one for david so I'll leave it | 16:06 |
balloons | nvm elfy I'm starting them.. they look fun | 16:12 |
=== _salem is now known as salem_ | ||
pitti | $ time adt-run -o /tmp/adt-libpng --setup "apt-get update" libpng --- adt-virt-lxc --ephemeral trusty-cloud | 16:17 |
pitti | real…………1m10.964s | 16:17 |
pitti | $ ls /tmp/adt-libpng/ | 16:17 |
pitti | apt0t-build-stderr apt0t-build-stdout log | 16:17 |
pitti | jibel: ^ | 16:17 |
pitti | jibel: so the empty binaries/ is gone as well now; I don't think there's anything else to clean up now | 16:17 |
pitti | jibel: it's only installed on node02 for now, in case you want to play around | 16:18 |
pitti | I'll install the official debs tomorrow when they are in Debian and synced into trusty | 16:20 |
pitti | (althuogh they shouldn't look any different from my home-built one) | 16:20 |
balloons | DanChapman, ping | 16:28 |
elfy | balloons: the ki7mt ones - looked like server stuff from memory - no idea here whether they'd be right or wrong | 16:29 |
balloons | elfy, yep no worries. I finished everything but those I believe | 16:29 |
elfy | and I'm trying to ping my own qa team for in-house stuff so as to not bother others | 16:29 |
DanChapman | balloons, pong | 16:33 |
elfy | DanChapman: bit rude :p | 16:36 |
DanChapman | elfy :-D | 16:37 |
pitti | jibel: rolled out everywhere now; I'll start a loop which runs all our autopkgtests on the four nodes, so that I can have a look at the logs/success rate tomorrow | 16:40 |
elfy | DanChapman: I see some green at jenkins for us now finally ... | 16:41 |
DanChapman | elfy yeah finally running again. :-D | 16:45 |
* DanChapman prods balloons 0-- | 16:50 | |
pitti | jibel: ok, started (all except linux and libreoffice, and the known-bad maas* tests); if you see smoke coming out of those nodes, you know why :-) | 16:55 |
balloons | hey DanChapman | 17:08 |
jibel | pitti, Excellent, thanks! | 17:08 |
balloons | so DanChapman there's a few ap tests out there, I saw you reviewing some and leaving comments about where to put them | 17:08 |
balloons | shall we clean that stuff up? | 17:08 |
DanChapman | balloons, sure :-) the desktop tests? | 17:23 |
balloons | DanChapman, yes those things :-) I saw Jackson and some others left some MP's to review | 17:24 |
=== salem_ is now known as _salem | ||
=== _salem is now known as salem_ | ||
DanChapman | balloons, cool :-) Yes so do you mean shall we clean up the MP's or something else? | 17:31 |
balloons | DanChapman, I was hoping to merge or give feedback on all the mp's yes | 17:32 |
balloons | I saw you had started on some so I thought I'd ping you | 17:32 |
DanChapman | balloons, yes so adam/ disc0tech is working on rhythmbox, ive been in contact with him over that MP via email which i will put a copy of the convo's into the MP for clarity. I believe he is going to improve on the current MP so I will note that | 17:34 |
balloons | Yes, I assumed so as I remember having some chats with him | 17:34 |
=== bfiller is now known as bfiller_afk | ||
DanChapman | balloons, err lderan's branch I havn't ran myself so I can't comment on that one and senan's branch was still flaky last time we spoke, i'll run it again to see what it's like now | 17:38 |
balloons | DanChapman, let me know if you need any help or confirmations / etc. I'd just like to provide feedback on all those mp's and merge anything that can be merged :-) | 17:52 |
lderan | DanChapman, okay | 18:05 |
DanChapman | balloons, Yuk emailing a convo to an MP comes out looking horrid :-S anyway feel free to confirm any of them, you can do lderan's if you want? ;p | 18:05 |
DanChapman | lderan howdy o/ | 18:05 |
lderan | DanChapman, :P hello | 18:06 |
=== bfiller_afk is now known as bfiller | ||
balloons | DanChapman, sorry I didn't respond because I saw lderan appear :-) | 19:17 |
elfy | I'm watching that balloons guy :p | 19:24 |
teward | ... i have never had a program EVER take so long to build inside of an schroot before... o.o | 19:25 |
balloons | lol elfy .. so much fun with tests today | 19:25 |
elfy | :p | 19:26 |
balloons | sometimes feels like for every fire you put out, two more appear | 19:26 |
elfy | I know - I've done that lot for you, checked a bunch of our stuff for our next package call, changed stuff, did merge request, synced the tracker, 2 meetings | 19:27 |
elfy | some other stuff | 19:27 |
elfy | you get paid though :p | 19:28 |
balloons | hehe.. you get more props | 19:28 |
balloons | as you should | 19:28 |
elfy | ha ha ha | 19:28 |
teward | balloons: i take it the bug triager role is getting people's names on the QA team's wiki page, I'm seeing bug triage, SRU, etc. showing up more now. | 19:28 |
balloons | are you seeing output too? | 19:29 |
balloons | yes, more people are adding there names, it's good to see | 19:29 |
teward | i'm going to add my name there, but I have to put a "NOTE: THis wiki page is outdated, and may be updated at any time" section on my wiki page first. | 19:30 |
balloons | Letozaf_, buonasera | 20:06 |
Letozaf_ | balloons, buonasera :) | 20:06 |
=== Ursinha is now known as Ursinha-afk | ||
Letozaf_ | balloons, I'm carrying on fixing other locale test failures in calendar app, failures that don't have to do with the bug found yesterday | 20:32 |
balloons | Letozaf_, ahh | 20:33 |
Noskcaj | balloons, Thanks for the merge review. I have a few more packaging things to do first, but i'll get to fixing that eventually | 20:34 |
balloons | Noskcaj, your most welcome. Trying to get through all the autopilot reviews this afternoon | 20:34 |
balloons | * you are | 20:34 |
balloons | Noskcaj, I believe I can merge this one though? https://code.launchpad.net/~noskcaj/ubuntu-autopilot-tests/xfce4-screenshooter/+merge/199723 | 20:34 |
Noskcaj | balloons, yeah, that's all good | 20:35 |
balloons | oO it's using processmanager.. ugh | 20:35 |
balloons | no introspection eh? ohh well | 20:35 |
Noskcaj | most xfce stuff doesn't introspect | 20:35 |
balloons | yea, sadness | 20:35 |
Noskcaj | still, gthumb is huge and needs tests. That will keep me busy | 20:35 |
balloons | can you add anything else to the test? | 20:35 |
Noskcaj | not that i know how | 20:36 |
Noskcaj | even my gthumb thing is as much as i can do | 20:36 |
balloons | Noskcaj, with process manager it gets a bit more fun, but I'm wondering if you could check a hotkey or something | 20:37 |
=== Ursinha-afk is now known as Ursinha | ||
balloons | Noskcaj, it seems lderan is also working on gthumb; https://code.launchpad.net/~lderan/ubuntu-autopilot-tests/ubuntu-autopilot-tests/+merge/202335 | 21:20 |
Noskcaj | i think i'll leave xubuntu autopilot to him, i still can't make stuff work | 21:21 |
balloons | Noskcaj, I did leave a comment on your screenshooter.. can we hit a hotkey and check the app response? | 21:29 |
Noskcaj | balloons, I don't think so | 21:30 |
balloons | Noskcaj, I'm not familar with the app, but does it change at all after pressing the hotkey to take a shot for instance? | 21:30 |
balloons | something simple and basic.. if possible.. beyond checking that it runs without crashing | 21:31 |
balloons | which is quite useful ;-) | 21:31 |
Noskcaj | maybe using PrntScrn to open it? | 21:31 |
balloons | Noskcaj, yes, good example | 21:34 |
Noskcaj | gulp, now i have to do that, don't i | 21:35 |
balloons | I believe Noskcaj :-) | 21:36 |
* Noskcaj add that to the todo list | 21:37 | |
balloons | ty Noskcaj | 21:40 |
Noskcaj | now to try and unbreak the multiplayer games of trusty | 21:40 |
lderan | Noskcaj, you can use process manager to find if a window is open with a specific name if that helps :) | 21:50 |
Noskcaj | lderan, trust me, it's faster you do it than someone teaches me | 21:51 |
lderan | okay :) tho if you do want it teaching then let me know | 21:52 |
=== salem_ is now known as _salem | ||
=== _salem is now known as salem_ | ||
=== salem_ is now known as _salem |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!