[01:30] <gary_poster> Hello ubuntulog2!  Glad to see ya.  Will be even more glad to see your results in http://irclogs.ubuntu.com/2011/02/04/
[12:56] <bac> hi gmb
[12:57] <bac> gmb: my babysteps branch is at lp:~bac/launchpad/accordionoverlay if you have time to just see what i've started before we talk later.
[12:58] <gmb> bac: Sure thing, I'll take a look in a couple of minutes.
[12:58] <bac> won't take long...not much there yet
[13:04] <gmb> bac: You call 3580 lines "not much"? 0.o
[13:04] <bac> oh, yeah
[13:04] <bac> i forgot i added in the gallery widget
[13:04] <gmb> bac: Which bits can I ignore (on the basis that they're third party, I suppose)?
[13:04] <bac> i can push up the pre-req branch
[13:06] <gmb> bac: That'd be a help, thanks.
[13:06] <bac> gmb: will do.  just sucked into a CHR conversation now, though
[13:06] <gmb> Ok, no worries
[13:14] <bac> gmb: is "list related bugs" a superset of all of the other bug lists, such as subscribed, commented, etc?
[13:15] <gmb> bac: I'm drawing a blank here. Which page is this on?
[13:15] <bac> bug.lp.net/~gmb
[13:15] <gmb> (My guess, incidentally, is "yes")
[13:16] <gmb> bac: Yes, that's right. It's a superset.
[13:28] <gary_poster> bac, danilos, gmb, hi.  kanban/mumble in 2.  we are now logged here, btw, per bac's suggestion and thanks to is team
[13:29] <danilos> gary_poster, thanks for the notice, I'll keep quiet in here then :)
[13:29] <gary_poster> lol
[13:49] <gmb> bac: http://pastebin.ubuntu.com/562529
[13:51] <danilos> gary_poster, fwiw, my branch depends (so far) on your lp:~gary/launchpad/bug548-db-2 — is that the right one to use?
[13:51] <danilos> gary_poster, (I see -tests as well, so I figured I'd better ask :)
[13:52] <gary_poster> danilos: yeah.  There are more changes since then to get tests passing--and even more than -tests--but they build on -db-2 .  Once I get test passing and get this landed on db-devel and your branch gets the code merged, we should be good
[13:53] <danilos> gary_poster, excellent, thanks :)
[13:53] <gary_poster> danilos: please make sure you hand off that branch to me/the team so we can run with it while you are gone
[13:53] <danilos> gary_poster, I will!
[13:53] <gary_poster> thank you :-)
[15:08] <gary_poster> bac, gmb, danilos, I have a "deliver our weekly goals and problem solve" meeting scheduled in about 22 minutes on the canonical calendar.  I scheduled it later than our daily meeting because I thought it deserved separate attention, but now I find myself annoyed by the interruption. :-/  I also forgot to tell you all about it, and get your feedback.
[15:08] <gary_poster> Despite my annoyance at my own scheduling, I am still leaning towards suggesting that we go through with the meeting, because I think we have things to deliver, and because I think having a team problem solving time has seemed promising so far.
[15:08] <gary_poster> So, questions:
[15:08] <gary_poster> 1) I can show something on staging.  can anyone else show anything today?
[15:08] <gary_poster> 2) Would you all like to push this till later today, say 17:00 UTC (noon for me and Brad) or 16:30, so it is nearer the EoD of Danilo and Graham?
[15:08] <gary_poster> And comment: I'll try to be as quick as possible; 15 minutes is a goal, 30 minutes is a limit.
[15:09] <danilos> gary_poster, wfm (either of the times)
[15:09] <gary_poster> cool
[15:09] <bac> either time is ok
[15:09] <gary_poster> ok
[15:09] <gmb> gary_poster: Ditto; I'm fine with either (though I've nothing to show thanks to Windmill)
[15:09] <gary_poster> :-/
[15:10] <danilos> gary_poster, and on 1), I'm QAing LIFECYCLE change since it should be on qastaging, but it keeps timing out on me so I am struggling a bit
[15:10] <gary_poster> :-/ understood
[15:10] <gary_poster> gmb, bac, danilo, ok, let's aim for 16:30 UTC, 11:30 for me and bac
[15:10] <gmb> Ok
[15:10] <gary_poster> I'll update the calendar
[15:11] <gary_poster> and we can talk then about good times for the mtg
[15:11] <gary_poster> in later weeks
[15:11] <gary_poster> thank you
[15:18] <danilos> gary_poster, btw, my email listed in google calendar is danilo.segan@canonical.com, and I generally don't know how to set it up so it recognizes danilo@canonical.com as well; I've noticed that my items sent to danilo@canonical.com don't end up in my calendar in there, so if you have a suggestion on how to fix that, I'd be very happy — if not, can you please send future invitations to danilo.segan@ :)
[15:18] <gary_poster> danilos: :-) ack, I'll go fix those
[15:23] <danilos> gary_poster, also, note that current "show off time" works fine today, but would really be my EOD on Fridays otherwise as it is 17:30
[15:24] <gary_poster> danilos: gotcha.  yeah, we'll try to agree on a good time
[15:24] <gary_poster> on the call I mean
[16:28] <gary_poster> bac, danilos, gmb, 2 min delivery mtg warning
[16:28] <gmb> yup
[16:28] <bac> rt
[16:29]  * bac fetches tea and morsels
[16:30] <gary_poster> danilos and bac, unmute when you are ready :-)
[16:34] <gary_poster> https://bugs.staging.launchpad.net/~gary/+structural-subscriptions
[16:42] <danilos> gary_poster, "cronscripts/send-bug-notifications.py -vv"
[17:04] <danilos> gary_poster, oh, btw, on the DB permissions problem I am having in my branch, I had to add SELECT, INSERT to another two users: checkwatches and updateremoteproduct (for scripts dealing with remote bug syncing, afaict)
[17:04] <danilos> gary_poster, all for personsettings table, that is :)
[17:04] <danilos> gary_poster, the tests that failed for me were "-t bugtracker-person.txt -t externalbugtracker-bug-imports.txt -t externalbugtracker-comment-imports.txt -t externalbugtracker-comment-pushing.txt -t externalbugtracker-debbugs.txt -t product-update-remote-product.txt"
[17:05] <gary_poster> danilos, yeah, gimme one sec, I'll make a commit, push, and suggest you merge
[17:05] <danilos> gary_poster, cool, thanks
[17:10] <gary_poster> danilo, lp:~gary/launchpad/bug548-db-3 .  You'll need to rerun make schema, of course.  actually danilo can I convert that into a mid-implementation call, hopefully leading into a review if am I fast enough? :-)
[17:10] <gary_poster> I made some changes that I question
[17:10] <danilos> gary_poster, sure thing
[17:10] <gary_poster> thank you
[17:11] <gary_poster> so, I'll start blathering here while you get the branch :-)
[17:11] <gary_poster> som, the change you need is just in security.cfg
[17:11] <gary_poster> that is already approved by lifeless
[17:12] <gary_poster> the changes I made recently are in the last two revisions.  The ones I'm partcularly interested in are in lp:~gary/launchpad/bug548-db-3
[17:12] <gary_poster> eh I mean
[17:12] <gary_poster> bzr diff -r-2
[17:13] <gary_poster> In particular, in particular, lib/lp/registry/model/person.py
[17:13] <gary_poster> Where I added that UnwrittableStub
[17:13] <gary_poster> meh Unwritable
[17:13] <gary_poster> So the reason it has to be there is that various things read attributes off of person automatically
[17:14] <gary_poster> one particular example is the webservice snapshotter
[17:14] <gary_poster> a NotImplementedError on a read for a team-specific attr did not go over well with that code
[17:14] <gary_poster> I *can* make a read-only attr for teams though
[17:14] <gary_poster> that works fine
[17:14] <danilos> gary_poster, I am looking at it
[17:14] <gary_poster> cool thanks
[17:15] <danilos> gary_poster, please do go on explaining it :)
[17:15] <gary_poster> yeah :-) you wanna switch to mumble?  I can go faster
[17:15] <gary_poster> I'll keep on here for now
[17:16] <gary_poster> So, I don't love that stub for two or three reasons
[17:16] <gary_poster> 1) it's generic and it doesn't need to be yet.  However, it was easy to do, and Stuart wants to make a similar thing in reverse (team-only settings)
[17:16] <gary_poster> so it would be useful there
[17:17] <danilos> well, it kinda is ugly :)
[17:17] <gary_poster> yeah
[17:17] <danilos> gary_poster, was it not possible to do something like doNotSnapshot for this particular field for teams?
[17:17]  * gary_poster doesn't know of doNotSnapshot
[17:17] <danilos> (I don't know what doNotSnapshot does on a lower level, it might be something like this :)
[17:17] <gary_poster> heh, no idea
[17:17] <gary_poster> but it is an existing pattern, which is good
[17:18] <gary_poster> new pattersn are bad :-)
[17:18] <danilos> gary_poster, it's to stop stuff from being traversed for API implementation, I have no idea if it's anything like this and whether it'll solve a problem for you at all :)
[17:19] <danilos> gary_poster, the only thing I know is that it exists and that when you see web service call requesting another million objects, you need to put a doNotSnapshot around the exported field :)
[17:19] <danilos> i.e. usually for collections, but maybe it can work here as well
[17:19] <gary_poster> it is not conditional
[17:19] <gary_poster> (I just looked it up)
[17:20] <gary_poster> so I can't say "only snapshot this if this is not a team"
[17:20] <gary_poster> it's just a marker interface assertion
[17:20] <gary_poster> on an interface field
[17:20] <gary_poster> and I think that this might very well want to be exported in the webservice
[17:20] <gary_poster> I suppose that would be a simple fix, which I should not ignore...
[17:21] <danilos> gary_poster, right
[17:22] <gary_poster> I'm loooking throught the failed tests to see if that was the only problem with this implementation
[17:22] <danilos> gary_poster, so, I can't come up with any better suggestion on how to do what you are doing with the UnwritableStub
[17:23] <gary_poster> I could build a type
[17:23] <gary_poster> which would be faster
[17:23] <gary_poster> on the run-time side
[17:23] <gary_poster> I'd be switching __getattr__/__set_attr__ magic for "make me a class" magic
[17:24] <gary_poster> the only advantage of type really is that it would be faster in the Python, and I would not have to do that yucko __dict__ thing, if it doesn't start with '_', which I hate :-P
[17:25] <gary_poster> Ah
[17:25] <gary_poster> No, doNotSnapshot doesn't slove all the problems
[17:25] <gary_poster> we have other things that are doing verifyObject, for instance
[17:25] <danilos> gary_poster, heh, well, you could also make a non-generic PersonSettings implementation for teams-only, but considering you are going quite some length to avoid non-generic solution, I should better shut up :)
[17:25] <gary_poster> and they fall over
[17:26] <gary_poster> heh
[17:26] <gary_poster> I also don't like re-listing attributes
[17:26] <gary_poster> it feels error prone
[17:26] <gary_poster> I could certainly do
[17:26] <gary_poster> class UnwritablePersonSettings:
[17:27] <gary_poster>     @property
[17:27] <gary_poster>     def selfgenerated_bugnotifications(self):
[17:27] <gary_poster>         return True
[17:27] <gary_poster> and be done, but then I've had to define the default, what, four times?  five?
[17:27] <danilos> gary_poster, to be honest, I don't feel very smart at this late hour, so I am struggling following all the alternatives you are describing :)
[17:27] <gary_poster> :-)
[17:28] <gary_poster> fair enough
[17:28] <danilos> (though, late hour might just be an excuse :)
[17:28] <gary_poster> heh :-)
[17:28] <gary_poster> danilo, well, merge my vranch, and fix that thing you are working on, and I'll see if I can come up with something that makes me slightly happier in < 15 min
[17:28] <gary_poster> branch
[17:28] <gary_poster> this will at least unblock you
[17:29] <danilos> gary_poster, right, thanks
[17:38] <danilos> gary_poster, fwiw, I've confirmed: if there is only a direct subscription, LIFECYCLE subscription works correctly (i.e. it mutes all other emails)
[17:38] <gary_poster> cool
[17:39] <gary_poster> thank you
[17:39] <gary_poster> do we have a test for the other circumstance to your knowledge?
[17:39] <gary_poster> (the failing one)
[17:41] <danilos> gary_poster, no, unfortunately
[17:44] <danilos> gary_poster, also, all the tests I've tried pass with your branch merged in
[17:45] <gary_poster> cool
[17:46] <gary_poster> yeah, ec2 failed with some, and my branch fixes everything ec2 complained about
[17:47] <danilos> gary_poster, so, generally, my branch for 548 is ready to land, and I am pretty confident all lp.bugs tests pass
[17:47] <gary_poster> awesome
[17:47] <gary_poster> so you are just waiting on me ;-)
[17:47] <gary_poster> may I land it for you?
[17:47] <danilos> gary_poster, do you want me to set off an ec2 test run that'll email you when the test run is finished
[17:48] <danilos> gary_poster, yeah, by all means :)
[17:48] <danilos> gary_poster, if you want to just do the test run yourself, that's fine as well :)
[17:48] <gary_poster> yeah the ec2 test run that would be  awesome thank you
[17:48] <danilos> gary_poster, also, before heading off for the day, I'd like to look into the lifecycle stuff and see exactly what's left to do
[17:49] <gary_poster> makes sense
[18:16] <gary_poster> danilo, you still here?  If so, you can try bringing me back from the edge. :-)
[18:16] <gary_poster> http://pastebin.ubuntu.com/562678/
[18:17] <gary_poster> This PersonSettings thing is supposed to grow...
[18:17] <gary_poster> Argh!  I'm horrible at this kind of thing :-)
[18:17] <gary_poster> Because I want to do #1
[18:17] <gary_poster> But I think it will make people unhappy :-/
[18:18] <gary_poster> I'll go have some lunch :-P
[18:18] <gary_poster> don't worry about it if you are gone danilo, you need to go start your break :-)
[18:19] <danilos> gary_poster, heh, I am still around
[18:22] <danilos> gary_poster, I think you can go with 1 if you come up with a nice little name for it like doNotSnapshot
[18:23] <danilos> gary_poster, it would be nice if one could simply do if isteam: self.personsettings = makeReadOnly(PersonSettings()) or something like that
[18:23] <danilos> gary_poster, which is basically what you are doing
[18:23] <danilos> gary_poster, so as long as you come up with decent names, I think option 1 is just fine
[18:38] <danilos> gary_poster, ok, I've added a comment to bug 711901 with a test case (I did it against my bug-584 branch because I had end-to-end test set-up in there, and as soon as it lands, test is usable in it's current form)
[18:38] <_mup_> Bug #711901: Implement direct lifecycle subscriptions <qa-ok> <Launchpad itself:Fix Committed by danilo> < https://launchpad.net/bugs/711901 >
[18:39] <danilos> gary_poster, is it ok if I leave it up to you to create a card on the kanban board and file a bug if/when needed?
[18:40] <danilos> gary_poster, also, ec2 test run is going on for my bug-548-use-preference branch, it should email you at gary.poster@canonical.com as well
[18:42] <gary_poster> danilos: ok, thanks for advice
[18:42] <gary_poster> yes, I can file bug
[18:42] <gary_poster> have a great weekend
[18:42] <danilos> gary_poster, thanks a lot :) enjoy yours as well
[19:27] <gary_poster> bac, you available for a review soon?  It's potentially easy...and maybe not. :-/
[19:27] <gary_poster> https://code.launchpad.net/~gary/launchpad/bug548-db-3/+merge/48651
[19:28] <bac> gary_poster: yes
[19:28] <gary_poster> thank you
[19:28] <gary_poster> you may need context
[19:28] <gary_poster> though I tried to give enough
[19:32] <gary_poster> I just committed a change reverting  one line of a comment in garbo.py from "# TeamParticipation, EmailAddress, as all Person entries will be" back to "# TeamParticipation or EmailAddress, as all Person entries will be"
[19:32] <gary_poster> and pushed
[19:50] <bac> gary_poster: i need some help understanding what is going on in readonly_settings
[19:50] <bac> which, to me, means there is an opportunity for some explanatory comments in the code
[19:50] <gary_poster> in the function itself, or what its goals are?
[19:50] <bac> both.
[19:50] <gary_poster> at least, yes
[19:50] <gary_poster> ok cool
[19:50] <bac> closure_f makes my head hurt
[19:51] <gary_poster> yeah ok
[19:51] <bac> what are you doing there?
[19:51] <gary_poster> You are familar with the old closure-in-a-loop problem?
[19:51] <gary_poster> where you want the closure to have the value within the loop
[19:51] <bac> let's say i'm not, for our viewers out there to follow
[19:51] <gary_poster> :-) ok
[19:52] <gary_poster> So, when you want to make a closure
[19:52] <gary_poster> for each value in a loop
[19:52] <gary_poster> in Python each closure is bound to the locals
[19:52] <gary_poster> not a snapshot
[19:53] <gary_poster> but the mutable collection of locals
[19:53] <gary_poster> so
[19:53] <gary_poster> for i in range(4):
[19:53] <gary_poster> no try again
[19:53] <gary_poster> l = [lambda: i for i in range(4)]
[19:53] <bac> would this go faster spoken?
[19:53] <gary_poster> yeah probly :-)
[20:05] <gary_poster> I'll keep my headphones on so you can yell into mumble if you like :-)
[20:12] <bac> gary_poster: the rest of it looks good, so pending some good wordsmithing on the readonly_settings method it'll be mostly done.
[20:12] <gary_poster> awesome thanks bac
[20:12] <bac> please try to clean up some lint, too.  the redef of 'Reference' in model/person in particular
[20:13] <bac> sorry to ask for that since you're under the clock, but it's easy
[20:13] <gary_poster> understod, will do
[20:33] <gary_poster> bac, pushed, and the mp is updated.  I may have gone overboard on the comments. :-)
[20:34] <bac> gary_poster: where did the oauth file come from?
[20:34] <gary_poster> ?
[20:34] <gary_poster> looking
[20:34] <gary_poster> not me
[20:35] <gary_poster> I think it is like the widgets stuff
[20:35] <gary_poster> merge artifacts
[20:35] <gary_poster> this branch has been around for a while
[20:35] <gary_poster> in various forms
[20:35] <gary_poster> I haven't merged db-devel because it would make all the previous MPs confused
[20:36] <gary_poster> the way to confirm that I haven't touched it is to merge my branch into db-devel...but I haven't :-)
[20:36] <bac> gary_poster: ok, just so long nothing sneaks in
[20:36] <bac> your new comments are fantastic
[20:37] <bac> i read them aloud to jojo and he nodded his head appreciatively
[20:38] <gary_poster> lol
[20:38] <bac> r=bac
[20:38] <gary_poster> thank you!