/srv/irclogs.ubuntu.com/2012/12/12/#juju-dev.txt

wallyworlddavecheney: are you able to take one more look at https://codereview.appspot.com/6867073/ and see if it's now good to go?00:05
davecheneywallyworld: surethign00:15
wallyworldthanks00:15
wallyworlddavecheney: the current config schema works for ec2, but for OpenStack username, tenantname, authorisation url, (and even region) should be supported to allow these things to go in the environment YAML file rather than having to be set via env vars. is this a reasonable assumption?00:55
davecheneywallyworld: sounds reasonable00:56
davecheneyin the ec2 config you can specify your key and stuff in either the environs.yaml, or ENV vars00:56
davecheneywallyworld: am I talking about the same thing ?00:56
wallyworldyes00:57
wallyworldin config/config.go the schema is defined00:57
wallyworldbut it only has ec2 things00:57
wallyworldmeaning the only way to connect to openstack is to use env vars for the required parameters00:57
wallyworldwell at least that's how i see it00:57
wallyworldi could be wrong00:57
davecheneywallyworld: will check about ec2 things00:58
davecheneyby config/config.go is the generic configuration items00:58
davecheneythen each provider has their own */config.go which adds the specific items like region, et al00:59
davecheneywallyworld: please hold, checking00:59
wallyworldok00:59
wallyworlddavecheney: yes you are right, found it00:59
wallyworldeach provider does have it's own schema setup01:00
wallyworldi will look at that, thanks01:00
davecheneywallyworld: so the idea is config/config.go is the generic config (it's at the bottom of the file, which is confusing)01:00
davecheneythen that struct is embedded in the config struct for each provider01:00
davecheneyso they /extend/ (sort of)01:00
davecheneythen config with their own attributes01:00
davecheneyconfiguration was *ahem* contenious01:00
wallyworld:-)01:01
wallyworldlike error handling :-)01:01
davecheneydon't mention the war01:01
wallyworldi don't want to mention it but i am trying to get a code review approved :-)01:02
wallyworldand it has been contentious01:02
davecheneyyou and me both01:05
=== tasdomas is now known as domas
=== domas is now known as domasm
=== domasm is now known as tasdomas
TheMueMorning all08:42
fwereade__TheMue, heyhey08:46
fwereade__TheMue, does that review look roughly sane to you?08:46
TheMuefwereade__: Oh, thought you're not here today.08:47
TheMuefwereade__: Looked good on a first view I've yesterday done on my mobile. Will start with it in a few moments. Still tired a bit from yesterday evening.08:48
fwereade__TheMue, no worries :)08:50
dimiternTheMue, fwereade__: morning!08:51
fwereade__dimitern, heyhey08:51
TheMuefwereade__: So you're out tomorrow and Friday?08:51
TheMuedimitern: Hiya08:51
fwereade__TheMue, yeah, but I'll work a half day one of those days to make up for mon morn08:51
TheMueOk08:52
fwereade__dimitern, jam, mgz, TheMue, mramm: I believe that all of you will have some interest in https://codereview.appspot.com/6922051 -- comments would be most welcome10:18
TheMuefwereade__: Will have a look in a few moments.10:18
fwereade__(it's the doc stuff we were talking about yesterday)10:18
dimiternfwereade__: 10x, I'll have a look10:19
mgzblopom.10:23
dimiternis there a way to stop http.ServeMux from redirecting with 301 when I have /path/ defined, so I can handle both /path/ and /path with the same handler?10:42
Aramyo.10:43
dimiternnow i have mux.Handle("/path/", somehandler) and passing "/path" responds with 301 -> /path/10:43
dimiternAram: hey10:43
TheMueAram: Hiya10:46
TheMuefwereade__: Btw, while I'm reading your texts, my CL is back in again.10:47
fwereade__TheMue, cheers, I'll take a look when I'm done with my bug-capture pass10:49
TheMuefwereade__: Great, thanks.10:49
fwereade__mramm, when you're around, there's a huge list of new bugs culled from TODOs in the docs -- sorry I didn't get to them yesterday :(10:57
mrammfwereade__: thanks!10:57
mrammfwereade__: no problem, there was no hurry10:58
mrammfwereade__: but it is good to have them so that we can get in on the fancy burn down chart action10:58
fwereade__mramm, cool10:59
dimiternnevermind, I found a way around :)11:00
fwereade__Aram, morning11:00
fwereade__Aram, I would appreciate any comments you might have on https://codereview.appspot.com/6922051 -- I'm particularly concerned that I not propagate misinformation11:01
dimiternfwereade__, TheMue, jam: PTAL https://codereview.appspot.com/692404311:02
fwereade__dimitern, I should get to that shortly11:02
dimiternfwereade__: cheers!11:02
TheMuedimitern: Will do after ending with Wiliams.11:02
dimiternTheMue: thanks11:03
Aramfwereade__: looking.11:06
TheMuefwereade__: Yay *hug*11:19
fwereade__TheMue, haha, I was just about to say it in chat11:19
fwereade__TheMue, I imagine you had an alert hooked up to a confetti cannon for that LGTM :)11:20
fwereade__niemeyer, morning11:20
TheMuefwereade__: My mobile signals the Google mail sent after the review immediately.11:20
fwereade__TheMue, nice11:20
TheMuefwereade__: Exactly, I'm starting a party now. ;)11:21
TheMuefwereade__: Btw, really like the work you've put into your documents. I'm still reading and it's great so far. Also helping new team members getting into the system.11:22
fwereade__TheMue, cool, thanks :)11:22
fwereade__TheMue, they're still very rough11:22
TheMuefwereade__: But written in a good readable way.11:23
fwereade__TheMue, excellent :D11:23
niemeyerfwereade__: Yo11:30
niemeyerGood morning all11:30
fwereade__niemeyer, how's it going?11:30
niemeyerfwereade__: Good stuff, still waking up :)11:30
TheMuefwereade__: Could you explain your comment on line 145 a bit more?11:33
fwereade__TheMue, it's just an extension of what I was saying about the tomb access -- if the underlying Stop fails, watcher.Stop will kill the supplied tomb11:35
fwereade__TheMue, and that error is actually a consequence of the one you return11:35
fwereade__TheMue, so we'll get misleading kill reasons if we're unlucky11:35
fwereade__TheMue, in general I like it when tomb.Kills are not scattered too widely, it makes it hard for me to follow expected shutdown procedures11:36
TheMuefwereade__: To make it more clear, which Stop() do you mean here? The machind isn't running at that point.11:36
fwereade__TheMue, 145 watcher.Stop(unitw, &fw.tomb)11:37
fwereade__TheMue, this will call unitw.Stop, and perhaps fw.tomb.Kill11:37
TheMuefwereade__: Ah, now I've got it.11:37
rogpeppe1morning all11:38
fwereade__rogpeppe1, heyhey11:38
=== rogpeppe1 is now known as rogpeppe
TheMuefwereade__: I've been confused, becaus e machineData has a stop() too but that could not be used here.11:38
TheMuerogpeppe: Morning11:38
fwereade__TheMue, yeah, the tombs are an aspect of the FW about which I am not wild11:38
fwereade__TheMue, but I have no interest in further delaying this work because of them11:38
TheMuefwereade__: OK11:39
fwereade__TheMue, I can see why they're the way they are, and I'm not sure I have a better suggestion anyway :)11:39
TheMuefwereade__: *lol*11:39
rogpeppefwereade__, niemeyer: can i run an idea past you for crackfulness?11:41
fwereade__rogpeppe, btw, your comments on https://codereview.appspot.com/6906046/ have (probably) been addressed11:41
fwereade__rogpeppe, ofc11:41
niemeyerrogpeppe: Sure11:41
rogpeppefwereade__: i'm wondering about having the agents use a juju.Conn (without an Environ) instead of always State directly11:41
rogpeppefwereade__: that way we can put an API connection in there too11:42
fwereade__rogpeppe, hmm, gut says -1 (mainly because I'm not sure what a Conn without an Environ actually is)11:42
fwereade__rogpeppe, but I have always been a bit ambivalent about Conn itself anyway11:43
niemeyerThat sounds like turning COnn into State, which doesn't sound very appealing on itself11:43
rogpeppefwereade__: it's a wrapper around the State. (almost nothing that you do on the Conn actually involves the environ, actually)11:43
niemeyerrogpeppe: It's a high-level wrapper for comfortable library-like usage11:43
rogpeppeniemeyer: i'm not suggesting hiding the State completely11:43
rogpeppeniemeyer: just making it so that agents can access functionality through the API when they want11:44
niemeyerrogpeppe: I don't think I get it.. they should use functionality through the API at all times11:44
dimiternrogpeppe: hey :) wanna take a look - https://codereview.appspot.com/6906046/11:44
rogpeppeniemeyer: agreed, but i was thinking this might be a reasonable transitional step11:45
niemeyerrogpeppe: The idea still scapes me11:45
fwereade__niemeyer, I think the issue is that that's unworkable until we have a complete API, and that the "Conn" suggestion allows a path there without a big bang change11:45
niemeyerescapes11:45
fwereade__niemeyer, rogpeppe: suggestion: drop the word "Conn" from the discussion11:45
niemeyerfwereade__: I don't see how it changes the problem11:45
niemeyerfwereade__: Huh.. I think I don't know what we're talking about :)11:45
niemeyer<rogpeppe> fwereade__: i'm wondering about having the agents use a juju.Conn (without an Environ) instead of always State directly11:46
niemeyerHow do we drop Conn from that proposal?11:46
fwereade__niemeyer, rogpeppe: so it becomes "we need to be able to use parts of the API before we have a complete API, and I think we should have a type containing both a State and an ApiState"11:46
rogpeppefwereade__: yes11:46
rogpeppefwereade__: Conn was just a place i thought might be reasonable for doing that11:46
fwereade__rogpeppe, I remain -1 on putting that into Conn, myself11:47
niemeyerfwereade__: Well, sure.. just put add both of them to the function that creates the worker11:47
rogpeppehmm, i wonder if api.State could just embed state.State11:47
fwereade__rogpeppe, that's kinda dirty, but I think I like it11:48
fwereade__rogpeppe, we can get an instant picture of how far we have to go by comenting out the embed and trying to build :)11:48
rogpeppefwereade__: i'm not entirely sure it'll work though11:48
niemeyerIt feels pretty dirty indeed, and it's not clear what the advantage is comparing to doing the obvious and having two values and using each of them when we want to11:49
fwereade__niemeyer, I am not really keen on having all our client code have to keep track of two "state" things, and transitioning every client over call by call11:49
rogpeppeniemeyer: it means that, potentially, we can add new calls to the api and have them automatically used by all state clients.11:49
fwereade__niemeyer, not having to do that is the main advantage of the suggestion, I think11:49
niemeyerfwereade__: What would be the problem with doing so?11:50
niemeyerfwereade__: We can also get an instant picture of what is left11:51
fwereade__niemeyer, busywork, confusion, places we miss11:51
dimiternI'll grab some lunch11:51
fwereade__niemeyer, in my own personal calculus of nastiness the two approaches are roughly equal, but for different reasons11:52
niemeyerfwereade__: All of those things seem equally applicable to the previous suggestion11:52
niemeyerfwereade__: The difference is that the second one is explicit11:52
rogpeppein a way, the api *is* a wrapper around state.State, if you want to look at it that way, so embedding it doesn't feel too untoward11:52
fwereade__niemeyer, isn't just a matter of removing a method from State and adding it to ApiState every time?11:53
niemeyerfwereade__: You know exactly what is going on11:53
niemeyerfwereade__: Which is a surprisingly important property11:53
rogpeppei'm not sure i want to change everywhere to pass two things around where we're only talking to one state11:53
fwereade__niemeyer, (huh, yeah, my previous comment applies in both places)11:53
niemeyerrogpeppe: That's great.. let's try to avoid that by actually finishing that work :)11:54
rogpeppeperhaps we could just pass around api.State and have a state.State member11:54
rogpeppeso all existing code calls apiState.State.Foo11:54
niemeyerrogpeppe: This seems much more hackish to me11:55
rogpeppehmm, but that doesn't work11:55
niemeyerrogpeppe: It's pretty much impossible to tell if things you're passing apiState in actually are ported or not, without investigating all calls11:55
niemeyerrogpeppe: In general, when something is ported we can actually *port* it11:56
niemeyerrogpeppe: Take State out, put api.State in11:56
niemeyer(or whatever the name is)11:56
niemeyerrogpeppe: and that's it11:56
niemeyerrogpeppe: No two states11:56
niemeyerrogpeppe: If that's hard to do and there is value in doing it gradually, it seems rather sane to have the two values around11:57
niemeyerrogpeppe: so the one variable isn't a big deal11:57
rogpeppeniemeyer: ok. in practice, i think that means one big change all at once, but that's probably inevitable really11:57
niemeyerrogpeppe: There's no reason for that to be the case11:57
rogpeppeniemeyer: because once you start talking to, say, api.Machine, then api.Machine must implement all the relevant state.Machine methods11:58
niemeyerrogpeppe: That seems rather orthogonal11:58
niemeyerrogpeppe: It's not like any of these approaches would solve it11:58
rogpeppeniemeyer: the embedding approach *could*, i think. but it might end up hackish, yeah.11:59
niemeyerrogpeppe: That's a great reason not to even try it11:59
rogpeppeniemeyer: the hacks would eventually go :-)11:59
niemeyerrogpeppe: If we don't put them there, they are already gone right now.. magic! :)12:00
rogpeppeniemeyer: ok fair enough, it was just a thought.12:01
niemeyerrogpeppe: Sure, always happy to brainstorm12:01
* fwereade__ lunches12:01
dimiternrogpeppe: ping13:58
rogpeppedimitern: pong13:58
dimiternrogpeppe: PTAL https://codereview.appspot.com/6906046/13:58
dimitern:)13:58
rogpeppedimitern: ah, sorry, looking now.13:59
rogpeppedimitern: um, are you sure that's the right CL?14:00
dimiternrogpeppe:  whoops :) no sorry https://codereview.appspot.com/6924043/14:01
niemeyerrogpeppe: Hopefully that's the end of the default-series fix: https://codereview.appspot.com/686807014:08
rogpeppeniemeyer: will look after i'm done with dimitern's review14:09
niemeyerSuper, thanks14:09
niemeyerSomeone else's review would be appreciated too14:09
niemeyerI'll step out for lunch and move to review mode in the afternoon14:09
jcastro_niemeyer: heya, whens your next core team call? I have a sort of plan to tackle the docs14:35
dimiternjcastro_: I think it's every tuesday at 13 UTC and 22 UTC14:41
jcastro_thanks!14:42
fwereadejcastro_, fwiw, I have some *very* rough docs in review -- they weren't even really intended as documentation in anything but the loosest sense14:47
jcastro_yeah14:48
fwereadejcastro_, but if you can see past the crappy aspects, then they are hopefully clear and current, and should be considered a provisional source of truth for (parts of) juju-core14:48
jcastro_so right off the bat when reorging them, I think we should have them be in 2 major sections, user docs, and developer docs.14:48
fwereadejcastro_, https://codereview.appspot.com/6922051/14:48
jcastro_right now they're kind of jumbled together14:48
fwereadejcastro_, indeed -- and I'm afraid that the above suffers similarly to a degree14:49
jcastro_it's like having to read a physics book to learn how to light your stove, don't care about the guts, I just need fire, and so on.14:49
fwereadejcastro_, those who have read the glossary have been generally positive though14:49
fwereadejcastro_, it's not super-fluffy but it should be clear14:49
jcastro_fwereade: lifecycles.txt is awesome14:51
fwereadejcastro_, ty :D14:51
rogpeppeniemeyer: LGTM14:56
jcastro_fwereade: I think our ecosystem team can easily handle the "using juju" and charm parts. And then have you guys handle the core sections.14:56
jcastro_fwereade: it might make us more focused instead of "hey everyone, try to fix the docs."14:56
fwereadejcastro_, the trouble is I'm not *really* trying to fix the docs14:57
fwereadejcastro_, I wrote a few in-case-I-die braindumps that are pretty useful -- almost documentation -- and they are sliding in that direction almost by accident14:58
jcastro_heh15:00
fwereadejcastro_, the other problem is that the charm parts in particular have changed in some ways -- which I have tried to capture in charms-in-action -- but that document is not comprehensive15:00
fwereadejcastro_, this is less of a big deal than you might think, because AFAWCT charms do tend to work15:01
jcastro_that's ok, as long as one of us on ~charmers understands it we can massage it15:01
rogpeppedimitern: replied15:02
dimiternrogpeppe: cheers!15:03
fwereadejcastro_, jolly good -- I just have to tell you about it somehow then :)15:04
niemeyerjcastro_: Team calls are on Tuesday generally15:42
niemeyerrogpeppe: Thanks!15:42
niemeyer // Note that ... this comment shouldn't be here!15:44
fwereadeniemeyer, haha :)15:44
niemeyer;-)15:44
fwereadeniemeyer, btw, sorry -- I responded to this ancient CL but apparently failed to, er, repropose it15:45
fwereadeniemeyer, the bug's been marked invalid as failed to repro but I don't see any harm to a laxer timeout anyway15:45
niemeyerfwereade: Where's that?15:46
fwereadeniemeyer, waiting for unit public address to be set on uniter startup15:46
fwereadeniemeyer, you commented "shouldn't there be a StartSync here"15:46
niemeyerfwereade: Ah, indeed15:46
fwereadeniemeyer, I said "no but yes" and went offf to fix it and decided the answer was actually just "no"15:46
niemeyerfwereade: I also failed there.. I recall about a fix I should have sent to make one of those tests more resilient a century ago15:47
fwereadeniemeyer, at least I'm not alone then, cheers :)15:47
niemeyerfwereade: So, why is the answer no, out of curiosity?15:47
fwereadeniemeyer, because we could use a watcher to detect the change, but we'd have to keep spamming syncs at it15:47
fwereadeniemeyer, so "watcher + spam syncs" seemed more complex than "poll" and I resolved thatit was better as it was15:48
niemeyerfwereade: Ah, sure, I wasn't suggesting that specific change originally15:48
niemeyerfwereade: I was suggesting just the StartSync15:49
niemeyerfwereade: Which shall reduce the timeout necessary, hopefully15:49
fwereadeniemeyer, ah, ok -- I think that's not necessary because the uniter's not waiting for anything to set it15:49
fwereadeniemeyer, it's just about the first thing it does15:49
fwereadeniemeyer, so, indeed, 5s is generous15:50
fwereadeniemeyer, but the theory we developed was that it was possibly a rogue canonistack pause and we may as well be resilient to such things15:50
niemeyerfwereade: Imagine E is an event we're waiting for, SS in StartSync, R is the time we read the state to see if it's what we expect, and dot (.) is time passing.. if we just loop, it may go like:15:50
fwereadeniemeyer, (I'm 80% sure it was exposed in one of davecheney's canonistack runs)15:51
niemeyerfwereade:  E . R . . . . . . E15:51
niemeyerfwereade: With SS, it becomes:    E . SS . E . R15:51
niemeyerfwereade: So the global timeout may be shorter..15:52
niemeyerfwereade: Actually, it's more clear as15:52
niemeyerfwereade:  R .. R .. R .. R ..  R .. E15:52
niemeyervs.15:52
niemeyerfwereade:  SS R .. SS E15:53
niemeyerOr something like that15:53
fwereadeniemeyer, ok, I see a nicer way to do it than I had before, just a mo15:55
niemeyerHmm16:11
niemeyerGot a failure on16:11
fwereadeniemeyer, huh, perhaps not16:12
niemeyerprovisioner_test.go:103:16:12
niemeyer    c.Errorf("provisioner did not start an instance")16:12
niemeyer... Error: provisioner did not start an instance16:12
niemeyerAnyone seen this before?16:12
fwereadeniemeyer, does SS do this:16:12
fwereadeniemeyer, sorry, restate: how long after a call to StartSync will a change not send of a watch channel?16:13
fwereadeniemeyer, *on* a watch channel16:14
fwereadeniemeyer, hm, I'm not sure that question makes sense even, bother16:14
niemeyerfwereade: Yeah, there doesn't seem to be a definitive answer to it16:18
fwereadeniemeyer, so, that is my problem16:18
niemeyerfwereade: Why does it matter in this case?16:18
fwereadeniemeyer, I know an event will occur at some future time16:18
fwereadeniemeyer, butthat any given StartSync's sync may not happen to complete in time to see that change16:18
niemeyerfwereade: There's not even a "completion" of StartSync so to speak16:19
niemeyerfwereade: (that's the "Start" in it)16:19
fwereadeniemeyer, ok, so a StartSync causes a sync to occur16:19
fwereadeniemeyer, and at some stage in the future that sync will complete16:19
niemeyerfwereade: Right, it schedules a sync to occur16:19
niemeyerfwereade: Yes, in the near future16:19
fwereadeniemeyer, and after that sync is complete it is unhelpful re detecting future events16:20
niemeyerfwereade: Hmm.. that seems to lack context16:20
niemeyerfwereade: It may be helpful or not16:20
fwereadeniemeyer, 5 minutes from now, I will change a unit that you are watching: is it helpful for you to call StartSync now and expect it to deliver the event faster when it does come?16:21
fwereadeniemeyer, I believe it is not16:21
niemeyerfwereade: That's the graph above16:21
niemeyerfwereade: Compare this:16:21
niemeyerfwereade:  R . . . . . . . . . R . E . . . . . . . R16:23
niemeyerfwereade: With this:16:23
niemeyerfwereade:  SS R . .  E . . . . . . R16:23
niemeyerfwereade: Makes sense?16:25
fwereadeniemeyer, I'm sorry, I'm not taking your point :(16:25
niemeyerfwereade: Sorry.. hmm16:25
fwereadeniemeyer, as a point of common ground, would you confirm or deny my previous statement re 5-minute waits?16:25
niemeyerfwereade: It's false16:26
niemeyerfwereade: StartSync is unrelated to the time of the event16:26
niemeyerfwereade: It's related to the time of the watch loop instead16:26
niemeyerfwereade: We dont' call it to make the event happen faster.. we call it to observe its occurrence faster16:26
fwereadeniemeyer, yes, I am well aware of this16:26
niemeyerfwereade: Okay.. the problem is I think you understand everything I'm saying, so I'm unsure about which piece is missing there or here16:28
fwereadeniemeyer, I was trying to ask whether the observation delay in an event 5 minutes in the future will be reduced by a call to StartSync now16:28
fwereadeniemeyer, my understanding is that it will not16:28
niemeyerfwereade: It will not, and that's unrelated to the reason why StartSync is suggested16:28
niemeyerfwereade: Which is why it's unclear16:28
fwereadeniemeyer, ok, what do you believe StartSync will speed up?16:29
niemeyerfwereade: It speeds up the observation of events when you're polling repeatedly16:29
niemeyerfwereade: It makes the time of the poll rule the time of the watcher refreshing16:30
niemeyerfwereade: This is all unrelated to how long it will take for the event to actually happen16:30
fwereadeniemeyer, sorry, phone16:33
fwereadeniemeyer, ok16:34
fwereadeniemeyer, I think we may be talking at cross purposes16:34
niemeyerfwereade: I'm pretty sure about it :)16:34
fwereadeniemeyer, when I "poll", I refresh the unit every 50ms and see if it has the address I want16:34
fwereadeniemeyer, I do not see how startsync factors in here16:34
fwereadeniemeyer, because none of the events that lead the unit's address to be set are waiting for any watchers16:35
fwereadeniemeyer, *if* I were to use a unit watcher, then I could maybe avoid any sort of polling -- but actually, if I want events to arrive in a timely way, I need to call StartSync repeatedly16:36
fwereadeniemeyer, because the sync might complete before the change I'm waiting for actually happens16:36
fwereadeniemeyer, so I need to start a new sync every, say, 50ms16:36
fwereadeniemeyer, ...or am I on crack?16:37
niemeyerfwereade: No, quite possibly I'm the one off16:38
niemeyerfwereade: So is there no watcher in the pipeline towards the expected point?16:39
fwereadeniemeyer, I'm pretty sure not16:39
niemeyerfwereade: Okay, so surely there is no need to refresh the watcher :)16:39
niemeyerfwereade: Phew, sorry16:39
fwereadeniemeyer, no worries, it's a pretty unexpected situation for juju ;)16:40
niemeyerfwereade: Yeah :-)16:40
niemeyerfwereade: LGTM16:40
niemeyerfwereade: Sorry for the confusion16:40
niemeyerYouTube is the new radio16:41
fwereadeniemeyer, np :)16:41
niemeyerOne of these days I'll make a small app that allows one to type a search statement, and it'll just pick entries out of the list for playing16:42
niemeyerIt'd also be nice to have a no-video mode to save bandwidth16:42
* Aram can't listen to lossily compressed audio.16:44
niemeyerAram: Having less hearing accuracy has its advantages :-D16:49
AramI suppose.16:50
* Aram bought tickets to The Hobbit.16:50
AramI was undecided between IMAX 3D and regular 3D.16:50
Arambut I had to chose regular since the IMAX is not available in English.16:50
rogpeppei'm done for the day18:18
rogpeppeg'night all18:18
niemeyerrogpeppe: Nighty night18:21
* niemeyer => exercising20:49

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