/srv/irclogs.ubuntu.com/2012/07/25/#launchpad-dev.txt

wgrantBert_2: It's the table at the top of the bug page that shows status/importance/etc.00:00
Bert_2wgrant: mmm, on submitting a filled in bug my instance now errors on that00:00
wgrantWhat's the error?00:01
wgrantCould be another missing celebrity breaking a permission check00:01
Bert_2here's the full oopsinfo: http://pastebin.com/dzEKFBYd00:02
Bert_2it seems to be the case I cannot view bugdetails, only the table of bugs00:03
Bert_2the oops I gave you is shown on displaying a specific bug00:03
wgrantAh, I think I know what that is.00:03
wgrantGive me a sec00:03
Bert_2take your time ;)00:04
wgrantBert_2: On https://launchpad.dev/ubuntu/+edit (or the equivalent for your domain), select 'Bugs in this project are tracked in Launchpad'00:10
Bert_2wgrant: did that, and it fixed it :O00:12
Bert_2so, why was it not working and why is it now ?00:12
wgrantIf you click on the expander icon at the left of the task table, you'll see that the Distribution widget defaults to Ubuntu00:13
wgrantThat's a bit of a hack -- it's hardcoded00:13
wgrantThe widget is configured to only show distros that track their bugs in Launchpad, so the default value of Ubuntu was illegal.00:14
Bert_2the Target:Distribution:Ubuntu thing you mean ?00:14
wgrantYeah00:14
Bert_2oh, I see00:14
Bert_2thanks a lot man, I'm pretty sure I couldn't have found that by myself :p00:15
wgrantYeah, it was pretty obscure, but I was able to guess it right away as I've had the misfortune of running into that code before.00:17
wgrantI'm fixing the script to add those essential celebrities and set that Ubuntu bit00:18
Bert_2wgrant: awesome, that'll help a lot of people out in the future00:18
Bert_2now as we'll be using bugs, answers and bluepints I'll let you know if I run into any more issues so the script is fully up to date ;)00:19
wgrantYup00:19
Bert_2awesome :D00:19
Bert_2wgrant: thanks again for your help, now I'm off to bed, bye00:33
wgrantBert_2: Night.00:33
StevenKwgrant: http://pastebin.ubuntu.com/1109290/00:47
StevenKwgrant: I wouldn't expect subscriber to be there for the new tests -- so I'm guessing I have something backward00:48
wgrantStevenK: Will look soon00:49
StevenKwgrant: Is it soon yet? :-)01:10
spmStevenK: it is "Too Sooooon!"01:11
wgrantStevenK: +        subscribers = BugSubscriberSet().union(01:21
wgrant+            self.structural_subscribers,01:21
wgrant+            self.all_pillar_owners_without_bug_supervisors,01:21
wgrant+            self.all_assignees)01:21
wgrantStevenK: None of those seem to be filtered01:21
StevenKwgrant: I thought self.structural_subscribers would be? Although the structuralsubscription model code is messy at best01:37
wgrantStevenK: Right, but the others aren't...01:38
StevenKself.all_pillar_owners_without_bug_supervisors probably does not require filtering01:40
StevenKself.all_assignees is currently causing me grief01:41
wgrantIt requires filtering01:41
wgrantTo /dev/null01:41
wgrantThat's the thing we said we were going to delete01:41
wgrantOn the basis that it doesn't make sense01:41
StevenKAh01:41
wgrantAnd things that don't make any senses probably shouldn't exists01:41
* StevenK deletes it01:41
wgrant-plurals01:41
* wgrant stabs the branch scanner01:41
wgrantStevenK: Separate branch01:41
StevenK:-(01:41
wgrantProbably the same branch as the bug supervisor default sub removal01:42
StevenKWhich is *after* this branch. Bah.01:42
wgrantNah01:42
wgrantCan be before this branch01:42
wgrantBug supervisor default structsub removal, that is01:42
wgrantNot the default private_bugs direct subscription01:42
StevenKwgrant: http://pastebin.ubuntu.com/1109408/ Ignoring the printf debugging, it seems like forbidden_recipients_filter and forbidden_subscribers are backwards02:27
wgrantStevenK: What suggests that?02:29
StevenKwgrant: My printf debugging does02:30
wgrantSpecific examples?02:30
wgrantAh02:31
wgrantWell, yes, forbidden_subscribers is backwards02:31
wgrantSo I'd suggest making it not backwards02:31
StevenKSo forbidden_recipients_filter is backward?02:31
wgrantforbidden_recipients_filter returns Storm conditions that restrict the returned subscriptions to those which have access02:31
StevenKOh, damn it, that is still keyed on BugSubscription02:34
StevenKI need both BugSubscription and StructuralSubscription02:34
StevenKSo no wonder it returns [] :-(02:38
StevenKwgrant: http://pastebin.ubuntu.com/1109443/ is the StructuralSubscription query03:12
wgrantStevenK: Does it work?03:15
wgrantlifeless: Is bzrlib's Graph.find_difference meant to be slow?03:15
wgrantlifeless: It's taking upwards of 5 minutes to calculate for one of my LP branches. It was about 5000 mainline revs behind devel, and it chokes on the merge I did yesterday.03:16
lifelessit uses _find_border_ancestors03:21
lifelesswhich notes: This will scale with the number of uncommon ancestors.03:21
lifelesswgrant: what is it doing? Can you lsprof it ?03:21
wgrantlifeless: My smaller test cases are 5x faster after a pack. Trying the original case again now03:27
wgrant     1039155            0      2.3077      2.3077   <method 'extend' of 'list' objects>03:30
wgrantblink03:30
wgrantThat takes 11s unprofiled, and it's b.repository.get_graph().find_difference('william.grant@canonical.com-20120717002424-zaimmc2rnew8s0qp', 'launchpad@pqm.canonical.com-20120724215633-t9eizm9m7wlb8nwo') -- the former rev being a merge from devel a week ago, so it's only a week of revisions.03:31
wgrantAfter packing the full 14-month diff takes 150s.03:32
wgrantI'm not quite sure why calculating a 277-node graph difference requires more than a million list extends...03:34
lifelessI don't, at this remove, remember which apis are fast and which are not.03:35
lifelessI *think* this is meant to be fast03:35
StevenKwgrant: No, which is why I'm pasting it03:45
wgrantAnd 476s for the full diff on an unpacked repo.03:45
wgrantStevenK: What doesn't it do?03:45
wgrantStevenK: Note that that is finding forbidden subscribers03:45
StevenKwgrant: I thought Not(Or(*get_bug_privacy...) would filter out forbiddens03:46
wgrantStevenK: get_bug_privacy_filter filters bugs based on privacy03:48
wgrantYou use it when you want bugs that are visible to someone03:49
wgrantRead it :)03:49
wgrantThe first clause it returns is information_type.is_in(PUBLIC_INFORMATION_TYPES)03:49
StevenKwgrant: Right, so it looks like the filtering in the depths of structural subscriptions was backward03:50
StevenKIntegrityError: duplicate key value violates unique constraint "accesspolicy__product__type__key"04:01
StevenKDETAIL:  Key (product, type)=(27, 4) already exists.04:01
StevenK:-(04:01
StevenKwgrant, wallyworld: https://code.launchpad.net/~stevenk/launchpad/one-linkcve/+merge/11658204:48
wallyworldStevenK: so you no longer need @export_operation_as('linkCVE')04:50
StevenKOh, duh04:51
wallyworldother than that looks ok i think04:52
StevenKwallyworld: And it's -15 now :-)04:52
StevenKwallyworld: That change has pushed04:53
wallyworlddone04:53
StevenKwallyworld: Thanks04:54
wallyworldnp04:54
StevenKwgrant: Do you have a suggestion how to squeeze filtering into BugSubsciptionInfo.duplicate_subscriptions ? I've been thinking about using filter_forbidden_subscriptions, but the multiple dupes thing is tripping me up.05:13
adeuringgood morning07:52
=== frankban changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: frankban* (rvba) | Firefighting: - | Critical bugs: 4.0*10^2
jmlhas the font rendering on Launchpad changed recently?08:16
czajkowskijml: yes I think huw as working on that08:16
czajkowskidont know if it landed though08:17
jmlczajkowski: as in, "it's a bug and huw is fixing it", or as in, "yes, and it's a work in progress", or as in, "yes. tremble at our newly attained beauty?"08:17
jmlcertainly looks nicer to me :)08:18
czajkowskihe was working on it08:19
czajkowskiit's not a bug08:19
czajkowskiand I think the code was landed and rolled out08:19
czajkowskiso yes praise our new beauty!08:20
jmlczajkowski: :)08:21
=== almaisan-away is now known as al-maisan
wgrantstub: The sampledata changes are not noise. There are two new product columns that I added last week, and one removed from bugsummary.09:06
wgrantBut they were all changes made by patches, so nothing to review.09:07
stubwgrant: cool.09:25
Ergo^morning10:49
Ergo^gmb, ping10:49
czajkowskiErgo^: as I said yesterday, already, he's offline for 2 weeks.10:50
Ergo^yes, jsut noticed he showed online now ;-)10:50
czajkowskiyes a lot of us run screens and while we're connected we may not always be here10:51
jelmerczajkowski: to be fair, some launchpadders seem to have trouble with the concept of "holidays" :P10:51
czajkowskijelmer: yes you and wgrant do, gmb doesn't :)10:51
Ergo^seems my xchat client shows "away" statuses, with delay10:52
czajkowskimpt: I have a bug for you!10:54
czajkowskipayback!10:54
mptczajkowski, mmmm, delicious10:54
czajkowskimpt: mind if I show it to you10:55
czajkowskimuch easier than me attempting to explain10:55
czajkowski.c10:55
mptI am waiting with bated breath10:55
=== matsubara is now known as matsubara-afk
=== al-maisan is now known as almaisan-away
wgrantwallyworld, rick_h_: I think your JS changes may have conflicted, as I have a failure on ec2.11:53
wgrantactual    = ["Failure in /var/launchpad/test/lib/lp/bugs/javascript/tests/test_duplicates.html.lp.bugs.duplicates_tests.test_duplicate_form_submission_success: Unexpected error: Result of expression 'uri' [undefined] is not an object."]11:53
wallyworldhmm. let me check11:54
wgrantThat's the only failure11:54
wallyworldbuildbot seems happy so far but i think the yui tests are run near the end11:56
wgrantYeah, this was in the last 5 minutes of the test suite11:56
wallyworldbollocks11:56
wgrantI have another instance 15 minutes behind that hasn't failed yet11:56
wgrantAh11:56
wgrantNow it has11:56
wgrantIn the last two minutes11:56
wallyworldi'll have to pull devel and take a look11:57
wallyworldbut i have something i need to attend to first11:57
rick_h_wgrant: looking, yea bet it's something with the lp.client changes11:59
rick_h_I renamed lp_original_uri to just uri looking at wallyworld's change to see if something there didn't agree since tests passed on my end.11:59
wallyworldi didn't make any lp client changes12:06
rick_h_wallyworld: right I did, and wonder if you used it in any way that broke12:06
rick_h_I'm pulling and updating, will run the tests and see12:06
wallyworldok, thanks12:06
wallyworldi used a couple of 'standard' methods12:07
rick_h_right, nothing jumped out at me when I reviewed it yesterday, but will look12:07
Ergo^http://www.happyprog.com/tdgotchi/?repost=true12:09
rick_h_wallyworld: wgrant one word fix, going to just submit straight to pqm to keep from killing buildbot all day if that's cool12:14
wallyworldrick_h_: go for it, thanks!12:14
wallyworldrick_h_: the current build will fail to you will need to force it when it happens12:15
rick_h_wallyworld: will do, thanks for the reminder. Will keep an eye on it12:15
wallyworldnp, thanks for fixing12:15
=== abentley changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: frankban* (rvba), abentley | Firefighting: - | Critical bugs: 4.0*10^2
rick_h_deryck: ping, got a quick sec?13:17
deryckrick_h_, sure.  what's up?13:17
rick_h_deryck: helping popey help someone with an issue using ubuntu-bug and sent me a screenshot: http://uploads.mitechie.com/lp/lp_bug_screenshot.png anything look strange that would toss an error you know of off the top of your head?13:17
rick_h_deryck: wondering if () in the summary or something?13:18
czajkowskirick_h_: we give rather usless error help don't we13:19
rick_h_czajkowski: :) could be a bit better I suppose13:19
deryckrick_h_, no, it shouldn't choke over the parens.13:19
deryckrick_h_, there's some required field or something not displayed.  I wonder if something in extra options was set incorrectly somehow?13:20
deryckrick_h_, or some field with bad data.13:20
rick_h_deryck: ok, I'll see if I can get some more info and maybe talk him into submitting it manually to make sure that works13:22
deryckrick_h_, or maybe he already filed a bug against the token and it's no longer valid? The random number thing in the url is what links to the apport filed data.  Maybe something there.13:22
rick_h_deryck: yea, this was an ubuntu-bug ... filing13:22
Ergo^rick_h_, change that message to Error: Success, that will teach them13:25
rick_h_deryck: ok cool, looks like a bad tag name: rc-6.0.0-0ubuntu5~test113:25
deryckoh dang, standup time.13:33
deryckrick_h_, abentley, adeuring -- coming, sorry.  forgot time.13:33
rick_h_deryck: rgr13:34
deryckadeuring, https://plus.google.com/hangouts/_/6e08b518c64d571c487a6e9da883b81733756c2d?authuser=0&hl=en13:36
abentleyadeuring: Why does test_run_missing_ready_does_not_return_results call a script instead of running the code in-process?14:18
=== Guest69114 is now known as Ursinha
adeuringabentley: I can't remember exactly... Might be related to config dteails.14:19
rick_h_abentley: can you peek at https://code.launchpad.net/~rharding/launchpad/no_more_tmp/+merge/116663 when you get a sec, short one14:35
abentleyrick_h_: You're creating a directory named ${buildout:yui-directory}/yui-${:yui_version}.zip ?14:37
rick_h_abentley: yea, because I copy out to yui-${:yui_version}14:38
rick_h_it was either that or create a tmp directory in there to extract/copy out of14:38
rick_h_and that just seemed like creating a dir for no good reason14:38
abentleyDoes this avoid creating a directory? It sounds like it would just be a different name if you created a tmp directory.14:39
rick_h_abentley: right, this avoids creating the directory and extracting to it vs just extracting straight to yui-version.zip as a dir14:40
rick_h_it's extracting the yui-version.zip from source-deps into build/js/ and then pulling only the build (no tests, docs, etc) from that zip into build/js/yui-3.3.014:40
abentleyrick_h_: I find extensions in directory names surprising.  Would ${buildout:yui-directory}/yui-${:yui_version}-extracted or ${buildout:yui-directory}/yui-${:yui_version}-tmp or something work for you?14:41
rick_h_abentley: sure thing, all the same to me.14:41
rick_h_will update, thanks14:41
abentleyrick_h_: r=me.14:41
sinzuimrevell: do you have time to talk14:48
mrevellsinzui, I think I'm just about to going into a meeting . I'm in the new London office.14:49
sinzuiokay. If you have time today. ping me for a short talk about my anxieties.14:50
* czajkowski hugs sinzui 14:52
czajkowskisinzui: read the warthogs mail14:52
czajkowskiand did laugh14:52
czajkowskiworst holiday from hell?14:52
sinzuiMy in-laws invited me to the same beach for another week of near-death-experiences at the end of August14:54
czajkowskisinzui: will you be going ?14:54
sinzuiI am uncertain. My wife and kids will14:54
jcsackettsinzui: avoid the beach bugs.14:57
sinzuiczajkowski: : this is the non-published link of what I did yesterday. I gave up trying to get the flashes out of the video since it is a known openshot tansition bug: http://youtu.be/Vq6VsKuFY_o14:57
sinzuijcsackett: since Anne did not select the house, there is no guarantee there will be internet.14:58
czajkowskisinzui: cheers14:58
sinzuiI guess I could take the car and drive 2.5 hours to get to that Chinese restaurant14:58
czajkowskisinzui: or... you could tkae a holiday14:58
czajkowskidear purple squad you need to learn how to take off your holidays properly14:59
jcsackettczajkowski: in addition to his many allergies, sinzui has a fatal allergy to not working on launchpad.14:59
czajkowskijcsackett: so does wgrant14:59
sinzuiMy meditation is TDD. Zen and the Art of Test Driven Development. I don't have to work on Lp, but I need to do something.15:00
mrevellsinzui, Hey, I have 15 minutes now or longer than that in 90 minutes. Which works best for you?15:00
czajkowskisinzui: arduinos ?15:00
jcsackettoh, yeah. we should get him started on that. i need to know more people doing arduino hacking.15:01
jcsackettsinzui: can i grab you after you're done talking to mrevell?15:02
sinzuimrevell: now would be fine15:02
=== almaisan-away is now known as al-maisan
mrevellsinzui, I'll grab a room15:02
sinzuimrevell: https://plus.google.com/hangouts/_/410f6d1a701063146f8bb2bc46e26dfa04cd2539?authuser=0&hl=en when you are ready15:02
deryckrick_h_, hey, not sure if it's inviting you:  https://plus.google.com/hangouts/_/73a8173804e27710a1abf877e26aefe3848f70d3?authuser=0&hl=en15:05
abentleyfrankban: Could you please review https://code.launchpad.net/~abentley/launchpad/enable-tests/+merge/116678 ?15:17
frankbansure abentley15:17
sinzuimrevell: http://youtu.be/Vq6VsKuFY_o15:19
deryckrick_h_, abentley, adeuring -- I'm playing with G+ events to get a named hangout for our standup, so forgive if you get event invite spammed now.15:33
abentleyderyck: np15:33
abentleysinzui: do you have a minute to talk about https://bugs.launchpad.net/launchpad/+bug/918745 ?15:40
_mup_Bug #918745: PersonMergeJob sends emails to people who do not care <email> <merge-deactivate> <teams> <Launchpad itself:Triaged> < https://launchpad.net/bugs/918745 >15:40
sinzuiI do15:40
abentleysinzui: I don't understand your comment.  Why would the target of the merge care if the job failed, unless the target of the merge requested the job?15:41
sinzuiabentley: this happens when the user deletes the team, they do not care about it, and there is nothing they can do to fix it.15:42
sinzuiabentley: we can send the email to the person who requested the deletion. It will delay us from fixing the data in the team15:43
sinzuiabentley: we fixed the most common cause last week. We do not allow people to delete teams with private branches because they cannot be given to any other team15:44
abentleysinzui: If this error is not meant to be sent to users, I think we should let the normal oops mechanism handle it.15:44
sinzuiabentley: that is fine. the user will just create a question for us to look up and then fix the data as we do when ~registry gets the email15:45
sinzuiYour change is good because it tells the user the delete failed15:46
abentleysinzui: If we want to send email to a celebrity, that could make sense.  But is the target guaranteed to be ~registry, or could it be a normal user/team?15:49
sinzuiabentley: The email went tot the target of the merge. We get the oopses where ~registry is missing the proper BVP. Other teams get them when the change is a merge. Remember that delete is always a merge into ~registry because there are undeletable artrefacts.15:52
abentleysinzui: Okay, I think I'll go ahead with the change.15:53
sinzuiokay15:54
sinzuiabentley: you want to send the email to the user that scheduled the job?15:54
abentleysinzui: Yes.15:55
sinzuifab15:55
abentleyrvba: I don't know what value is best, either.  In most cases, we don't hit the sleep at all.15:57
abentleyrvba: So maybe it doesn't matter.15:57
rvbaabentley: ok then.15:58
abentleyrvba: But in cases where we race, I guess it doesn't hurt to do a fraction of a second.  The processor has nothing better to do :-)15:58
rvbaabentley: that was my point :)15:58
abentleyrvba: Okay, I'll change the sleep to (0.1) and the range to 100.  Cool?15:59
rvbaabentley: cool.15:59
abentleyrvba: (while I didn't write sleep(1) it in *this* branch, I wrote it yesterday in another branch :-)16:00
=== al-maisan is now known as almaisan-away
=== matsubara-afk is now known as matsubara
Bert_2Hi, blueprintslists in my instance of launchpad come in pages of 5, launchpad.net has pages of 20, I seem to be unable to find any mentioning of a limit in the templates, does anyone know where this number is set ?16:35
=== deryck is now known as deryck[lunch]
sinzuidevelopment launchpad defaults to 5 items per list. This allows us to see batching work with our small sampledata size17:03
Bert_2sinzui: and how can it be changed, cause I can't really seem to find a place to change the 5 to 20 or more17:06
sinzuiit is defined in the schema.17:06
Bert_2schema-lazr.conf ?17:06
sinzuiIt can be redefined in  configs/development/launchpad-lazr.conf17:07
Bert_2what is the option called, cause I don't see any option with a 5 in schema-lazr.conf that have to do with it, I think ?17:08
=== frankban changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: abentley | Firefighting: - | Critical bugs: 4.0*10^2
sinzuiI don't know the name of the key, but it is defined in schema-lazr.conf. Search for 517:09
Bert_2I just did17:09
Bert_2the only ones with just five are announcement_batch_size and bugnotification_interval17:10
Bert_2and consecutive_failure_limit17:10
Bert_2those don't seem to have to do with blueprints :S17:10
sinzuiAs I said, this is about batching, not applications17:11
sinzuiChange the value in configs/development/launchpad-lazr.conf as I suggested17:11
Bert_2so announcement_batch_size is the one ?17:12
Bert_2sinzui: I'm not using development17:14
Bert_2I have my own configdir17:14
sinzuiBert_2: This channel is for launchpad development. There no channel for support, the code is unsupported17:15
Bert_2sinzui: I have supplied multiple additions to the bootstrap-db-from-scratch script, I'm not just here to get support17:17
Bert_2got it, thx anyway sinzui17:22
=== deryck[lunch] is now known as deryck
=== salgado is now known as salgado-lunch
rick_h_abentley: celery test failed on buildbot can you dbl check please?19:03
abentleyrick_h_: sure.19:03
abentleyrick_h_: The fix in r15684 was broken.  It's corrected in r15688.19:08
jonois there an issue with LP code hosting - I am trying to set trunk to my branch and it is rejecting it19:09
rick_h_abentley ok, will force another round19:09
jonothe branch is lp:~jonobacon/ubuntu-accomplishments-system/validation-service19:09
abentleyrick_h_: thanks for letting me know, though.19:10
rick_h_abentley: started up aonther build then, look slike 15688 was merged so here we go again wheee :)19:10
=== salgado-lunch is now known as salgado
sinzuilifeless: do you have a few minutes to discuss/listen to a story about the monsters in the forest of sharing21:42
lifelessI do21:49
lifelesssinzui: skype? G+ ?21:49
sinzuiskype I think21:49
lifelesssigned in .... now21:50
wgrantabentley: I'm rolling back the celery changes, as in 15688 both tests have failed21:59
wallyworldsinzui: we finished the standup. all good, no-one is blocked etc22:35
cjohnstonhello22:42
czajkowskisinzui:  can you talk to cjohnston he has some questions over your recent blog post about project maintainers and private buts22:42
czajkowski*bugs22:42
czajkowskiman I am knackered22:42
* cjohnston thinks its bed time ;-) 22:42
cjohnstonand that may go for me too22:43
cjohnstonlol22:43
sinzuiwgrant: StevenK: look at this22:59
sinzuihttps://bugs.launchpad.net/launchpad/+bug/102909322:59
_mup_Bug #1029093: Can't change the information type of a bug that has dupes filed on deactivated project  <disclosure> <sharing> <Launchpad itself:Triaged> < https://launchpad.net/bugs/1029093 >22:59
czajkowskicjohnston: I suggest asking the question :)23:01
cjohnstonI was waiting to see if he responded (or atleast now that I see that he is here) ;-)23:02
cjohnstonsinzui: I'm a little confused about marking bugs private.. From the help pages for LP, it says that projects can set all bugs by default to be private. I tried implementing this setting and wasn't allowed to because I don't have a commercial licence.. if nothing else, the text is confusing23:03
cjohnstonhttps://help.launchpad.net/Bugs/PrivateBugs#Private_bugs23:04
wgrantcjohnston: Yeah, all the documentation around privacy is pretty terrible.23:07
wgrantWe're almost done completely reworking it (including replacing the default private bugs checkbox), after which the docs can be rewritten23:07
cjohnstonwgrant: quick pm?23:08
wgrantcjohnston: Sure23:08
StevenKwgrant: http://pastebin.ubuntu.com/1111033/ is the dupe query23:09
czajkowskiwgrant: cjohnston is an unsual area, the project is for canonical but he's a contractor23:13
wgrantczajkowski: Yeah23:13
wgrantcjohnston: Might be best to discuss this in #launchpad-ops on irc.c.c23:14
czajkowskiindeed23:15

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