BradBsabdfl: here's the problem: i'm lazy. i want one screen on which to see everything.12:06
BradBsabdfl: forcing a user to visit two different screens "the bugs" is too much.12:07
sabdflmy report put it all on one screen12:07
sabdfljust in four sections12:07
sabdflupstream, directly assigned12:07
sabdflpackage, directly assigned12:07
sabdflupstream, maintainer12:07
sabdflpackage, maintainer12:07
sabdflbut you made it go away :-/12:08
BradBsabdfl: that's a heck of a lot to think about. i just want one thing to look at.12:08
sabdflBradB: it works well actually12:08
BradBsabdfl: and i can't say that four different things to batch is much easier to solve than the problem at hand :)12:08
sabdflyou don't see sections that don't apply12:08
sabdfli spent a lot of time beating up on myself to try to consolidate these assignments into a single report12:09
sabdfland failed12:09
sabdflthe reality is, we wear different hats in the FLOSS world12:09
BradBi succeeded, but it's just too slow12:09
sabdfland malone is modeling different hats12:09
sabdflso, let's just get it up and running, perhaps somewhat fragmented12:10
sabdflthere are four different groups? show four separately12:10
sabdflthen when we have real users we can revisit that problem12:10
BradBsabdfl: to be honest, i think it'll be (much) easier for me to solve the problem at hand, it would have just taken 15 minutes instead of 2 hours, had their been one thing in the DB i can iterate over to deal with one conceptual entity.12:11
sabdflwe split it up because having one conceptual entity was breaking other things12:12
sabdfland i didn't want to use postgres inheritance12:12
sabdfltime for me to crash a little, be fresh for the arch guys tomorrow12:13
BradBsabdfl: i haven't heard anyone complain about the bug listing in malone. i think it's great (which isn't to say it's perfect, but rather to say that it's got the right ideas)12:13
sabdflBradB: there's room for different approaches12:13
sabdflwe are definitely going to need a complex search page for people to make up fun queries and email them around12:14
sabdflor save as personal queries12:14
sabdflBUT there is also room to have short, simple, focused context-aware listings12:14
BradBsabdfl: sure...i think having an ultra-super-mega search page is worth creating a separate page for12:14
sabdfl"the bugs on this package"12:14
sabdflbradb: yes, it is12:14
sabdflbut you keep taking away my simpler things in favour of the mega search page12:14
BradBsabdfl: but, really, the simple searches of which you speak are just links into what is the current bug listing12:14
sabdflerm... no they are not12:15
BradBsabdfl: and they can all be really, really easily done with code that's already written12:15
sabdflthey are context-aware bug listings12:15
BradBsabdfl: which are context-aware?12:15
sabdflthe simple ones12:15
sabdflthey know which distro, and package you are interested in12:15
sabdflso they just show you that stuff12:15
sabdflwithout knobs and dials to tweak them12:15
sabdflit's gnome vs kde12:15
sabdfli understand you want the kde approach, i want the gnome approach, and there's room for them both12:16
sabdflwhat i'd rather focus on is workflow stuff12:16
sabdflmark a bug upstream12:16
BradBwe're debating something here that nobody has complained about.12:16
sabdflremove a bug assignment12:16
sabdflnobody is USING it12:16
BradBthe dogfooders12:16
sabdfland right now we have a lot of little bits to do12:16
sabdfli'd rather we worked on the selectors, and the little workflow elements12:17
sabdflsome of the things require you to know the datamodel12:17
sabdflthey should have direct answers - how do you reassign a bug?12:17
BradB"little workflow elements" are a huge, as-yet-unimplemented part of malone :)12:17
sabdflin practice, you edit the assignment12:17
sabdflbut there should be a "reassign this" sort of link12:18
sabdflat the moment, it's just auto-generated widgets on the underlying tables12:18
sabdflwe need to get it more process oriented12:18
sabdflso please dont bang hours on a report12:18
sabdflnot just yet12:18
BradBmy next merge will show # bugs, give next and previous links on the nav, and, hopefully be relatively fast for 10,000 bugs12:19
BradBit's the last one that's got me tripped up12:19
BradBbut anyway, i'll get it working12:19
sabdflare you starting to add indexes for that performance, or is that without indexes?12:19
BradBsabdfl: no indexes yet. i've got some kinks to iron out.12:19
BradBthe slowness that remains may be at the db level, i'm not sure12:20
sabdfli'm really happy with the work you are doing12:21
sabdflduring es-conf we'll bring on-stream the debbugs sync engine12:22
sabdflshould really rock12:22
sabdflyou'll be able to surf debbugs in malone12:22
sabdflupdated hourly12:22
sabdflnight all12:23
BradBsee ya tomorrow12:23
sabdflwhat's the trick to running *just* the page tests?12:43
SteveApython test.py -f canonical.launchpad12:43
sabdfli'm still trying to go to bed12:43
SteveAthat runs the page tests + a couple other functional testes12:43
SteveAum, tests12:43
sabdflthanks SteveA12:43
SteveAI hope we all have functional testes12:43
sabdfland that's faster is it?12:43
SteveAthan running make check? yes12:43
BradBpython test.py -vvf is a good way of seeing what's going on12:47
BradBand, unfortunately, python test.py -vvf --test "20-some-pt" doesn't reset the db properly currently12:47
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: added bug # count info and next/prev URLs to batching (patch-845)12:50
BradBSteveA: here's a wild idea: i want to be able to profile how long some tal statements are taking to run. can i do that?12:51
BradBi'm thinking the bottleneck in the 10,000-bugs handling code may be in the TAL itself. hitting the db is murder.12:52
Kinnisonkiko: yes?12:54
kikoKinnison, you rock? :)12:57
kikoI need to run, though!12:57
BradBSteveA: ah, i mentioned to stub yesterday that the new bug may indeed have been to do with the internals of publishing having changed + our custom publisher12:57
SteveAyes, I saw12:57
SteveAI saw from the traceback that it was something to do with layers and view12:57
SteveAbut it has taken a while to track down exactly what it is12:58
BradBindeed, that was a tough one :)12:58
BradBglad to hear you've found it12:58
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: prepare for doap status fields (patch-846)01:00
SteveABradB: might have a problem though -- I need to think about how to upgrade launchpad so that it will work with either current zope or new zope01:06
SteveAthink I can do it with an import trick01:07
BradBhm, i'd like to know more about that, but i have to leave right now unfortunately. i'll catch up with you on the upgrade/backwards compatibility tomorrow(ish...i know you're off to london.)01:11
BradBlater all01:11
=== BradB is now known as BradB|away
SteveABradB|away: I'll be checking in changes soon that will allow lp to work with old and new zope01:11
SteveAyay! it works01:11
BradB|awaywow, nice work SteveA01:13
SteveAI'm about to commit it01:13
=== BradB|away heads off to catch the metro
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Made launchpad forward-compatible with latest zope3 code (patch-847)01:25
SteveAthanks dilys01:26
=== SteveA goes to sleep
KinnisonNight all01:35
=== stub [~stub@dsl-] has joined #launchpad
stublifeless: ping03:34
=== stub [~stub@dsl-] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Sampledata documentation additions and clarifications (patch-848)05:58
dilysNew Malone bug #74: "Remove do-not-use-info-imports project", submitted by Stuart Bishop07:53
dilysNew Malone bug #75: "Adding bug takes you to the wrong screen", submitted by Stuart Bishop07:55
lifelessstub: pong09:13
stublifeless: I wanted to confirm an arch process regarding branches. If a developer working on launchpad--devel--0 creates a branch using 'baz branch launchpad--mybranch--0', hacks away and commits, can PQM be told to merge in changed directly from launchpad--mybranch--0 into rocketfuel@canonical.com/launchpad--devel--0 ?09:15
stubThis is regarding database changes that need to be committed at the same time as code and test updates, so ideally I could checkout someones branch, verify and issue the PQM request.09:16
lifelessfully qualify those branches, and I'll be able to answer09:16
stublifeless: I wanted to confirm an arch process regarding branches. If a developer working on me@canonical.com/launchpad--devel--0 creates a branch using 'baz branch me@canonical.com/launchpad--mybranch--0', hacks away and commits, can PQM be told to merge in changed directly from me@canonical.com/launchpad--mybranch--0 into rocketfuel@canonical.com/launchpad--devel--009:17
lifelessit may work, some of the time, but its not a star.09:17
lifelessso, it will generate spurious conflicts if the timing is wrong.09:17
lifelessthe developer can go baz switch rocketfuel..devel--0; baz branch me...devel--0; baz commit; submit-arch-merge09:18
stubok. I'll need to come up with a better process.09:18
lifelessso whats the use case ?09:19
stubA launchpad developer is happily hacking away and realize they need a database schema update done. Unfortunately if that schema update cannot be made immediately by me because it would cause breakage and tests to fail. So instead the patch needs to be prepared and committed at the same time as their code changes.09:20
=== stub wants baz triangle-merge
lifelessso, what they need to do is not commit those changes to their main branch.09:21
lifelessok, this will work.09:22
lifeless1) branch me..devel to me..d-feature09:22
lifeless2) hack and commit there unti the db stuff is done.09:23
lifeless3) merge that back to me..devel09:23
lifeless4) future work there. MUST NOT merge to rf at this point.09:23
lifeless5) you verify and then merge me..d-feature to rf.09:23
lifeless5) they merge the lsat stuff from d-feature to me..devel09:23
lifelessoops, missed a step.09:24
lifelessnope, won't. garh.09:24
lifelessyes, you need what we're talking about here with baz and graph merges. sory.09:24
stubWe are coping so far. I just look at the patch and say 'ok - commit it as patch-foo.sql'09:25
stubThis actually points out a flaw in the multiple trees vs. single tree project arrangement. If a project is made out of 'web--devel--0' and 'backend--devel--0', and there is an interface change in 'backend-devel--0', then a commit would need to be made simultaneously to both trees.09:30
lifelessthe spec for that is designed in tla already, and pqm can be easily taught that too.09:31
sabdflmorning all09:34
SteveAstub: did you ask lifeless about getting Zope3 into the supermirror?09:55
sabdflstub: pending/mark-bugtracker-naming.sql is ready from my side09:55
stublifeless: put Zope3 into the supermirror!09:55
sabdflthat's *my* kind of asking ;-)09:55
SteveAour source will now work with the latest zope3 code09:56
sabdflstub: regarding pending/mark-doap-status.sql i'm not sure that "status" is the right column name09:56
sabdfli really want to use that to describe whether or not it's been reviewed, and if so whether its active or not09:56
sabdflthis will allow me to generate reports of new ones, and have an admin team go through them and clean out the ones that are pure nonsense09:57
sabdflalso, edit and neaten the descriptions of the projects / products09:57
SteveA"status" is one of those "last resort" names for variables and columns09:58
SteveAthere is almost always a better name, but often it is cumbersome, or hard to think og09:58
sabdflspeak now or forever hold...09:59
stubI havn't looked at the patch yet - just finalizing a commit09:59
sabdflbugtracker-name isn't urgent, it's behind the scenes and can go whenever you like10:00
sabdflthis is the doap-status pending patch that i need for work this morning10:01
stubI think status is fine, because you are using it to describe a linear workflow (new, reviewed, active).10:01
stub(Unless it can be active without having been reviewed)10:02
sabdflit will be active without review...10:02
sabdflNEW and ACTIVE we should treat the same, otherwise people will fel they have to wait for us all the time10:02
sabdflit's just our way of knowing which one wes we have looked at and which we haven't10:02
stubSo we should have a 'reviewed' boolean field (?), because it is indicating an independant binary state10:03
stubAnd an 'active' one10:04
stubUnless we are planning on having more values than just yes/no10:05
sabdflyou;re right10:05
sabdfli was hoping to keep it to a single field but you're right10:05
sabdfllet me restructure the patch on that basis10:06
=== lulu [~lu@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
sabdflstub: dilys will announce the merge shortly10:16
sabdflcould you have a look at that and, if it's good, move it to a patch- during the day?10:17
stubnight ;)10:17
stubI think your patch is fighting with my patch for pqm time, so I can't merge just yet ;)10:18
sabdflyour timezone adjustment to spain should be easy... you're there already!10:19
sabdflhey Kinnison10:20
stublifeless: pqm dead I think10:20
Kinnisonhi sabdfl 10:20
=== carlos [~carlos@69.Red-80-33-181.pooles.rima-tde.net] has joined #launchpad
sabdflstub: doh, small mistake in that patch, will send in a new merge11:21
=== cprov [~cprov@] has joined #launchpad
KinnisonMorning cprov11:29
cprovKinnison: morning, how was yesterday ? I had an unexpected travel to So Paulo. let me know what you've done and what I can do to help you . 11:38
Kinnisoncprov: I've been concentrating on gina as you may have seen from the activity list :-)11:42
cprovKinnison: I've just read you comments/activities, I'll be working on Librarian Wrapper Unittest for today, is it ok for you ?11:45
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: corrected doap status patch (patch-849)11:46
sabdflstub: thar she blows11:52
Kinnisoncprov: perfect11:58
Kinnisondoes stub ever sleep?11:58
=== stub snores loudly
sabdflSteveA: i have moments of exhiliration with z312:10
sabdflno idea how to spell that12:10
Kinnison+++ Whispered to GoogleBot: 'spell exhiliration'12:12
KinnisonGoogleBot   >Perhaps you meant 'exhilaration'?12:12
Kinnisonthere you go ;-)12:12
SteveAjim has started working on a "dead simple" version of zope3.  well, not really a version.  a very minimal pythonic thing, with no zcml, not necessarily page templates.  the kind of thing you'd use for ship-it or supermirror.12:13
SteveAa sort of no lerning curve thing12:14
sabdflwhen we get a browser:form directive would you point me at the docs for it?12:17
SteveAI'll be able to point you at the docs for it before we get the directive.12:17
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: More popups - Person and BinaryPackageName (patch-850)12:24
=== stub hands pqm a banana
=== SteveA [~steve@adsl-213-190-44-43.takas.lt] has joined #launchpad
SteveAx crashed01:03
=== debonzi [~debonzi@] has joined #launchpad
=== salgado [~salgado@200-206-134-238.async.com.br] has joined #launchpad
=== SteveA -> plane
sabdflhi salgado01:53
sabdflhow's the karma chameleon coming along01:53
salgadosabdfl, hello. I'm finishing the move of the people bits to foaf, and I'll start on the karma tonight.01:55
sabdflcool enough01:56
salgadosabdfl, I was thinking about the karma yesterday, and I discussed with kiko if there would be any kind of depreciation of the cached value?01:56
sabdfldepreciation? you mean, it declines over time?01:56
sabdflor deprecation - we prefer not to use the field?01:56
salgadothe former01:57
sabdflkiko and i discussed a karmaactivity table, where you would store a list of the karma-earning actions a person had taken01:57
sabdflso each time the person does something karma-worthy, we throw a row in the table to reflect it01:57
sabdflit would include a datecreated01:57
sabdfland the Person.karma value would be calculated from that table01:58
sabdfland yes, i think it makes sense to calculate it over the past month only01:58
sabdflor, if you want to be fancy, give actions in the last month full weight, the month before that half weight, and before that one third weight01:58
sabdflfor the moment, let's just get the hooks in place to put rows in the table and have a very simple aggregation formula01:59
sabdflwe can tweak it once we have richer data to work with01:59
salgadook, but then we'll have to calculate Person.karma periodicaly (apart from updating it everytime someone calls Person.assing_karma()), right?02:00
salgadoI was thinking about a daily (or weekly or montlhy) depreciation, to avoid having to recalculate the Person.karma.02:02
=== Kinnison asks gina nicely if she'd mind importing d-i too now
salgadosabdfl, ?02:25
sabdflsalgado: let's get the core framework working first02:26
salgadosabdfl, sure. the depreciation is something that can be discussed later02:27
Kinnison\o/ /\o/\ /o_ /o\02:38
Kinnisongina has imported with d-i now02:38
=== Kinnison just has a little more to go before unleashing her on hoary
sabdflwe love gina!02:48
KinnisonShe's a babe02:48
sabdflcprov: where can i find the sourceforge / freshmeat access functions?02:53
KinnisonIs this channel registered?03:20
bob200:42:32           kent |  bob2, do ubuntu keep track of strings they have changed, and if they are accepted upstreams? if accepted upstream, i guess they will be 03:42
bob2                           translated in time..03:43
bob2that's a good idea!03:43
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Database schema patches for Carlos and Mark (patch-851)03:46
=== salgado -> lunch and then classes. come back at night
sabdflelmo: around?03:49
(elmo/#launchpad) sabdfl: yes03:49
carlossabdfl: yesterday, I detected an intrusion in one of my servers. Today seems like another one (the new) has the same problem. Is ok for you If I move my today work to Saturday?03:50
sabdflcan we shuffle the current launchpad.ubuntu.com to dogfood.canonical.com, and make launchpad.ubuntu.com point at macquarie's production launchpad server?03:50
sabdflelmo: ^03:50
sabdflcarlos: yes03:50
carlossabdfl: thanks03:50
(elmo/#launchpad) sabdfl: when?03:50
sabdflelmo: this week03:50
carlosdaf: I will be online, if you need anything from me, just ping me03:51
sabdflcarlos: is there any chance that your compsomise could affect chinstrap?03:51
(elmo/#launchpad) sabdfl: sure - is it ready on your end?03:51
carlossabdfl: no way03:51
sabdflelmo: yes, I think the production code gets updated regularly by lifeless and stub03:51
(elmo/#launchpad) carlos: you were compromised?03:51
sabdflcarlos: so you haven't ever ssh'd to a canonical box from those machines?03:52
carloselmo: not my personal server directly but a gforge server I admin03:52
(elmo/#launchpad) sabdfl: should anyone be around when I do it, or can I Just Do It?03:52
carlossabdfl: no, I only ssh to canonical machines from my local machines03:52
sabdflelmo: we cover enough timezones to be able to fix any issues, so Just Do It03:52
sabdfldaf: if you are around, this might affect the rosetta testers03:52
sabdflbut i don't think so since rosetta.shuttleworthfoundation.org will still point at the same ip address on mawson03:53
carlosI have different passwords and the ssh private certificate is not there, so don't think it's a problem03:53
sabdflcarlos: ok, good luck cleaning up03:53
carlossabdfl: thanks03:53
carlossabdfl: so rosetta.shuttleworthfoundation.org will be the production server now?03:54
sabdflcarlos: no, it will still point at the dogfood server for a while03:55
sabdflcarlos: later on, we can point it at the production server for most users03:56
sabdflthen the advanced rosetta users can use dogfood.canonical.com for testing pre-released features in rosetta, before they move to production03:56
(elmo/#launchpad) sabdfl: are we still client cert protecting both sites?04:00
sabdflelmo: yes please04:01
=== BradB|away is now known as BradB
cprovsabdfl: they are under lib/canonical/launchpad/scripts/nicole/, to be precise in sourceforge.py05:03
bob2minor nit: you can enter random shit in the arch "version" field for a new rcs and it won't complain05:20
bob2er, for a source05:22
=== debonzi [~debonzi@] has joined #launchpad
lifelessbob2: yeah, because we don't trust that form.05:46
=== BradB wishes Zope 3 worked with profiling tools
BradBIs there any easy way to turn on debugging in SQLOS? I want to have SQL statements printed out somewhere, to perhaps get an idea of what's making the bug listing take 1m 30s for 7,000 bugs.06:16
Kinnisoninitialise it with debug=1 ?06:17
KinnisonWhere 'it' is something I'm not certain of yet06:18
KinnisonThe sqlobject documentation refers to initialising the 'connection' with debug=106:18
BradByeah, i know about that :) i wasn't sure where this is done though.06:18
=== BradB hunts around for something looking like our db connection
sabdflBradB: log_statement = true06:19
sabdflin /etc/posgresql/postgresql.conf06:19
sabdflthen restart postgres06:19
sabdfland tail the log06:19
BradBthat in combination with log_duration rocks my world06:22
BradB45 seconds of it is our vocabs, eesh06:36
BradBall the more reason that we really want to upgrade Z306:37
(elmo/#launchpad) postgres has stats stuff to tell you about index usage etc. too07:01
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Soyuz sourcepackage translation portlet fixed. (patch-852)07:13
BradBlulu: I added the RSS feeds for freshmeat and lwn, and shortened all feeds to five each. I think Simon'll be the right one to respond re: the question specific to ZWiki.07:16
BradBI put anymore optimization work on hold, since the work on the selection widgets will make at least half the problem magically disappear (since the hack of using normal vocabs will be no more.)07:19
BradBlifeless: ping07:22
dilysMalone bug #19 fixed for package malone: Bug listing needs paging07:22
BradBsabdfl: ping07:24
dilysMalone bug #18 fixed for package malone: Bug workflow needs to make it easy to resolve bugs07:29
=== salgado [~salgado@200-206-134-238.async.com.br] has joined #launchpad
dilysMalone bug #68 fixed for product Malone: Bug assignments search needs Next and Prev nav options07:33
=== BradB is now known as BradB|lunch
bob2I've got a sqlobject, which is not being commited07:55
bob2commit is called07:55
bob2no exceptions thrown07:55
bob2but nada in the db07:55
lifelessBradB|lunch: pong07:57
sabdflBradB|lunch: pong07:58
=== Kinnison kicks gina in the unmentionables
sabdflKinnison: with the beeeatches you got to do the slappin', not the kickin'07:59
Kinnisonsabdfl: the way gina is behaving I'm beginning to wonder if she's "All Woman"07:59
KinnisonI have to fix these FMO things or else decide how to cleanly work around them for publishing purposes08:00
sabdflFMO things?08:01
(elmo/#launchpad) fuck me over08:01
(elmo/#launchpad) err, that's what it means08:02
(elmo/#launchpad) it's a kiko-ism08:02
Kinnison            if not srcpkg:08:03
Kinnison                print "\t** FMO courtesy of TROUP & TROUT inc. on %s (%s)" \08:03
Kinnison                    % (bin.source, bin.source_version)08:03
Kinnisonelmo: kiko really loves and admires you, doesn't he?08:03
lulunight all :o)08:03
Kinnisonnight lu08:04
=== Kinnison hugs lu
=== lulu hug back!
=== lulu [~lu@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad []
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Fixing on Librarian Wrapper and soyuz/people moved to FOAF from salgado (patch-853)08:13
Kinnisoncprov: thanks for your efforts on the librarian wrapper today08:15
=== BradB|lunch is now known as BradB
BradBlifeless: stub mentioned something he wanted to get you to do so that it would be easy for us LPers to upgrade Z3 without requiring anything from you...is there something you can think of doing that would make it easy for easy to upgrade Z3 relatively painlessly whenever we decide we need to?08:20
BradBsabdfl: do you have an idea in mind for the shortest distance to assigning a bug? i wanted to fix #47, which refers to that.08:22
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: doap workflow, manifest work, product portlet cleanup (patch-854)08:23
sabdflBradB: shortest distance to assigning a bug?08:32
BradBsabdfl: in the collector issue you said:08:33
BradBThe idea is that bugs are New until the assignee "accepts" them, at which time they become Open. We really need a fast way to accept bug work, rather than changing the initial state.08:33
BradBDo you know what the fast way to accept bug work is?08:33
sabdflok... "changing state" is just an HTTP call, right? so imagine we had a report that had two images - "accept" and "reject"08:34
BradBI can imagine a UI down the road that allows one-click bug acceptance, but i think that's pushing it a bit right now08:34
sabdflclicking on them gets JS to send that HTTP call08:34
sabdfland changes the state in the report08:35
sabdflclick click click down the list and you've done it08:35
sabdflgot to go.. back later08:35
=== dafydd [daf@muse.19inch.net] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: Zope 3 compatibility fix, Carlos' upload database code (patch-855)09:50
sabdflhey daf10:22
BradBI expect there to be an easy way to fetch a URL in javascript. It appears that I expected wrong.11:02
=== Kinnison decides that working from 9am to 10pm has got to be enough
=== Kinnison goes to have some dinner and to read his library book
=== BradB tries something
BradBiframe's rock11:20

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!