[00:02] lifeless, well, on a happier note, can i get a kind of architecture review on markdown? [00:02] sure === poolie_ is now known as poolie [00:03] so [00:03] it will be behind a flag [00:04] istm it might be good to make the rendering be a timeline action? [00:04] or would that be redundant with just profiling it [00:04] if its really 200ms per text [00:04] it could possibly go in memcached but perhaps that could be done later [00:04] I think we'll have issues [00:04] ugh no, memcached is very much not the right hammer here [00:05] so structurally whats going on is that you're generating html out of some content, which is exactly what the template engine does === wgrant changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: wgrant | Critical bugtasks: 292 [00:05] we're then embedding that result literally in the larger template [00:05] Hmm? memcached would be reasonable here, I think. [00:06] the caching could be done in the template [00:06] s//controlled by [00:06] if it really is 200ms that's almost infeasible [00:06] wgrant: one word: bug comments [00:06] lifeless: Myes? [00:06] ow [00:07] wgrant: a situation where we timed out *because* we used memcache [00:07] wgrant: and a place where markdown is [eventually] desired [00:07] Right, but it was timing out because the pages sucked, and there was absolutely minimal benefit to using memcache there. [00:08] It would need testing, but I think it could be useful if implemented properly. [00:08] so we want to use memcache on things that are both expensive to generate and able to be generated once for all viewers [00:08] And if the page didn't suck already. [00:08] but more so we want the first hit to be fast [00:08] wgrant, tangentially, re your email bug, i will add a test that forces an email.Header into it and check its handled correctly [00:08] so we either want preloading (with change updates) or we want rendering to be so fast that memcache communication overhead is slower. [00:09] poolie: you could timeline it yes; if there are questions over its performance thats a great way to ensure we have data. [00:09] so if it's really that slow [00:09] that might be a problem for applying it to all bug comments [00:09] poolie: as there seem to be questions around it, perhaps you want to pull on that thread a little first [00:09] there is python-markdown2 which claims to be an unspecified amount faster [00:09] poolie: so that we don't have markdown for home pages and then get stuck on bug comments [00:09] exactly [00:10] poolie: I'm fine with landing with a restrictive feature flag to find out early adopter issues [00:10] right [00:10] performance to some extent we can test offline [00:11] there is also this thing that api clients will now see markdown in the results [00:11] i think that's ok [00:11] it's close enough to text [00:11] if they eventually want to start rendering it, they can [00:11] so will folk not behind the feature flag [00:11] right [00:11] so people probably don't want to go too crazy til it's widespread [00:12] I think timelining it for now is a good idea [00:12] till the issues/concerns are put to rest [00:12] oh hang on [00:13] rvb's measurement is actually that it's 240µs. [00:14] isn't it? [00:16] yep [00:16] that's not so bad then [00:16] but, worth testing [00:16] no, its not [00:16] the timeit CLI reports time per loop [00:17] the timeit python API reports total time [00:17] but each iteration of the loop formats it 1000 times [00:17] ah [00:17] let me have a play [00:17] ./bin/py -m timeit -vv -s 's="a *b*\n" ; import markdown; md = markdown.Markdown(safe_mode="escape",extensions=[ "tables",])' 'md.convert(s);' [00:17] 1000 loops, best of 3: 231.1 usec per loop [00:17] ./bin/py -m timeit -vv -s 's="a *b*\n" *100; import markdown; md = markdown.Markdown(safe_mode="escape",extensions=[ "tables",])' 'md.convert(s);' [00:18] 100 loops, best of 3: 7.816 msec per loop [00:18] btw, choosing the packaged version is irrelevant to LP: we need things on lucid, and eggs are much more reliable than debian packages (because of version migration) [00:18] yep [00:18] i have it as an egg [00:18] was just using 'packaged' as a very rough metric for 'supported/popular/worthwhile' [00:18] also kind of handy for things like this [00:19] ok, yes, <1 ms is good [00:19] don't timeline it [00:19] poolie: you know about bin/py ? [00:19] bin/py -m timeit ... [00:20] see the lines i pasted? [00:20] heh, I do know [00:20] *now* [00:20] * lifeless slaps his fingers [00:20] :) is ok [00:20] the scaling on longer strings is a little worrying [00:21] we would have trouble at 8ms per bug comment, for instance [00:21] ok so if we say a large comment has about 100 lines of text, it's about 28.69ms to convert it [00:21] hm, with no actual markdown in it, 100 lines, 1.798ms [00:21] so 100 comments is 2.8 seconds, which is 50% of the budget for an entire load [00:22] anyhow, no Big Red Flags [00:22] one 100 line code block, 0.4ms [00:22] strangely [00:22] it needs some love I guess [00:22] arguably typical 10 line comment, 0.3ms [00:22] it might have some pathological cases that can DOS us [00:22] yeah [00:22] OTOH one laptop can DOS us, so not goig to worry about this yet [00:23] especially because the parsing is regexps [00:23] wgrant: one word: bug comments [00:23] can i buy another word? [00:23] timeouts :) [00:23] oh i see [00:23] yeah [00:23] was going to say that, i think [00:23] this is the "you eventually fall off a cliff" case? [00:24] ⸘that⸘ [00:24] github run pygments but clearly limit the highlighting of any segment to say 2s [00:24] would be nice to have that sort of thing [00:24] (also for pygments...) [00:24] poolie: no, it was that we spent more time in memcache chatter than in rendering the comments; we also retrieved them from the DB no matter what [00:24] yes, that can hook in [00:24] huh [00:24] poolie: very poor interactions between late evaluation and a chatty protocol [00:24] so, the other approach is to do it on the client side [00:25] poolie: nowadays memcache is just turned off, and things are much faster. [00:25] which possibly makes rendering the page actually easier on the server, if we can reliably detect to just send json not html [00:41] Someone want to review https://code.launchpad.net/~wgrant/launchpad/observer-merging/+merge/82952? [00:42] wgrant: Line 68 of the diff -- why do you bother pulling in store? [00:43] StevenK: Because I forgot to remove that line when I replaced the check just now. [00:43] Haha [00:43] wgrant: That's my only niggle, r=me [00:43] IAPGS.get only came into existence late last night. [00:43] So I previously queried directly. [00:43] Thanks. [00:43] is http://appbuntu.com a legit site or a spammer ? [00:44] lifeless: NXDOMAIN ? [00:45] WFM [00:45] StevenK: get a better DNS resolver ? [00:45] Oh, *buntu*, not *ubuntu* [00:45] Transcribe error [00:45] UI fail :P [00:46] Well, I didn't click the link, I typed it out from memory so I could whois it [00:46] And my memory fails [00:46] Often [00:46] * StevenK waits for lifeless to say "Frequently" [00:47] there is a link to http://appbuntu.com/2011/04/mengapa-ubuntu-menggunakan-launchpad/ in the blog, marked as spam but it doesn't look like spam to me [00:47] trying to determine if it is / isn't [00:47] StevenK: I did but you've clearly forgotten :P [00:47] I was about to suggest wgrant, but I suspect wgrant is too young for Gilbert & Sullivan [00:48] there was also an andi comment, but francis has address that separately, so I just deleted it [01:21] lifeless, memcached is just off across the board? [01:21] in a flag i think? [01:22] more or less [01:22] I need to go through and rip out the inappropriate uses of it [01:22] hm [01:22] the rules ui could do with some love too [01:23] any new use needs rather deep thought about what its actually saving [01:23] there is currently one reasonable use of memcache in LP - the front page blog contents [01:23] the rest have deep flaws (due to the interaction between views, eager loading and late evaluation), as well as various cachability rule interactions [01:24] do you have a rule of thumb for how long it takes to query it? [01:24] between 1 and 5ms [01:24] sometimes up to 12ms [01:27] lifeless: TBH, since we aren't using it, I feel we should cache the blog contents differently and rip it out [01:27] StevenK: I'm open to that. [01:27] StevenK: OTOH it is a reasonable cache engine and I wouldn't want to reinvent a cache just because we haven't got much use for it [01:29] possibly comments could do it reasonably well [01:29] i mean, markdown could use it [01:29] if the rendering was independent of the request (including the user)\ [01:29] and keyed off the place the text comes from, eg comment N on bug M [01:30] anyhow, later [02:06] one of the problems with the tal:cache stuff (it seems to me) is that it doesn't let you use multi_get at all [02:09] mwhudson: I've been assuming that's the entire performance problem we saw, yes. [02:10] Making a thousand round-trips is not cheap, just like with postgres. [02:10] mwhudson, meaning one api call that gets many results? [02:10] s/api/network [02:10] poolie: yes [02:11] the usual 'don't do potato programming' sort of thing [02:11] sure [02:11] it seems like in theory that could be hooked in to tal [02:11] depending on what it exposes [02:12] It would be nice if we could do multi-stage renders :/ [02:12] you'd have to defer rendering parts of the template, or walk the template twice or something wouldn't you? [02:12] But TAL doesn't make that easy. [02:13] So we would probably have to do something like the current preloading. [02:13] Where we work out what we need beforehand, and poke it all into the caches. [02:14] poolie: Not sure if you saw my note about adding a test for the tag ordering (I had to rush offf shortly afterwards). Just wanted to check if it looked ok (line 59 onwards: https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/81689) [02:14] hi huw [02:14] Rather than the probably more sensible setup of partially rendering the template, finding all the markdown that needs to be rendered, pulling stuff out of the cache, rendering what's left, filling in the template. [02:14] poolie: Hey [02:15] huwshimi, can you look at / think about the markdown branch too [02:15] i don't know if it especially needs anything from you [02:15] poolie: No problems [02:15] is that screenshot up to date? [02:16] wgrant: do you know a template engine that lets you do that sort of thing? [02:16] mwhudson: No [02:17] poolie: That screenshot is up to date, yes [02:17] poolie: This is the branch: lp:~mbp/launchpad/391780-markdown ? [02:17] yep [02:17] the test looks good to me [02:17] mm [02:18] you could add a comment specling out the meaning [02:18] ie that the most popular tags come firstn [02:18] perhaps it's obvious [02:18] poolie: No, you're right [02:18] poolie: Thanks [02:19] poolie: thanks for the link and update in the bug. That's a different place than I was looking.working with. [02:20] I had been looking at https://bugs.launchpad.net/launchpad/+bug/814696 and the link "Diff: 45 lines..." [02:20] <_mup_> Bug #814696: Link to show inline diffs in merge proposals should be green < https://launchpad.net/bugs/814696 > [02:20] mwhudson: wgrant: poolie: also that we don't want to do DB lookups for stuff we're then going to get from memcache. [02:20] mwhudson: wgrant: poolie: the whole template-view interaction is brittle here [02:20] yeah [02:20] Yeah. [02:20] Particularly since the BugMessages are actually subviews. [02:20] i've been very suspicious of passing anything other than dumb data to templates [02:20] Doing a pipelined render would be much nicer, but no :( [02:21] s/been/become/ [02:21] ok [02:21] we can worry about it later [02:21] or not [02:21] :) [02:21] huwshimi, i'm not a very reliable reviewer for the js stuff [02:22] poolie: No problems. I spent quite a bit of time chatting to wallyworld about that anyway [02:22] aside from that it looks good [02:22] i'm keen to see the results live [02:22] good on you for deleting those horrible doctests [02:22] have a badge :) [02:23] what is the actual rule, if any, for tal indentation? [02:23] Nothing special for TAL. You mean XML/HTML? [02:24] yes [02:25] huwshimi: any reason not to make the taglist stuff a module with ATTR, initialize, etc? [02:25] huwshimi: CSS is somewhat broken. [02:25] huwshimi: https://bugs.qastaging.launchpad.net/launchpad/+bug/1234 [02:25] <_mup_> Bug #1234: Gina is an unmaintainable mess of command line options, environment variables and shell scripts < https://launchpad.net/bugs/1234 > [02:25] huwshimi: status/importance are blue [02:26] huwshimi, can i see your current theme things some time? [02:27] rick_h_: I'm not quite sure what you mean, care to elaborate? [02:27] wgrant: ick! [02:28] poolie: Sure, I haven't had a chance to work on it recently, but I'll try and push out a first stage to show people soon [02:28] huwshimi: ok so you declared a namespace, but normally we seem to be using YUI modules, extending base or some decendent of that. For instance, see lp/app/javascript/picker/picker.js [02:28] mwhudson: excellent, the meme is spreading [02:28] see http://yuilibrary.com/yui/docs/base/ for the YUI docs of the pattern [02:29] so you'd end up with more var tagcloud = new TagCloud({any: settings}); [02:30] it allows for others to extend and customize later, more OOP version of things [02:30] rick_h_: No reason other than ignorance [02:30] huwshimi: ok, sorry, a bit new. But if you wanted review I'd definetely say to head down that route. [02:31] overlay for instance is a good example [02:31] there's a base, and several extentions that are used [02:31] extensions that is [02:31] huwshimi: Ah, the stylesheets are combined in the wrong order [02:32] rick_h_: Thanks I'll take a look. This was mostly me pulling the code out of a template and adding a few things/getting it working again, so I didn't really put enough thought into what I was doing :) [02:32] huwshimi: totally understand, been there done that [02:32] typography.css is included later, and it sets link colours that override colours.css [02:32] rick_h_: But, I'll take another look [02:32] huwshimi: Should I roll this back? [02:32] Or do you want to fix quickly? [02:32] awesome, let me know if you need a hand with anything and I'll be happy to help in the morning [02:32] wgrant: I can fix quickly [02:32] rick_h_: Thankyou [02:33] * rick_h_ is heading towards bed here [02:33] huwshimi: Needs to be landed in the next three hours, so not completely urgent. [02:33] wgrant: That's ok, I'm on it [02:34] Thanks. [02:43] wgrant: What should I do with these changes? Commit to the same branch and lp-land? [02:44] huwshimi: Ideally customising the commit message in lp-land to something sensible, but yeah, that sounds reasonable. [02:47] oh breakages [02:47] huwshimi: rick_h_: with the yui module vs namespace thing, what is used depend on the heritage of the code. if it came from lazr-js, then it tends to extend the yui component framework. if it was originally lp code, then it tended to be more procedural and just use functions scoped using namespaces [02:47] lifeless, is there a timeline matcher? [02:48] poolie: not really [02:48] wallyworld___, rick_h_: in this case, I guess I would need to make it a little more generic, ie, not have a hardcoded url etc. right? [02:48] poolie: closest is the underlying matcher of BrowsesWithQueryCount which doesn't use the timeline, it uses a custom storm filter instead [02:48] huwshimi: rick_h_: so the preference moving forward is to use more of the yui component and widget framework for new stuff [02:48] wallyworld___: Is the component still appropriate for this? [02:48] but for simple refactoring, it think "whatever works" is fine [02:49] huwshimi: so, we are talking about the bug tags stuff? [02:49] wallyworld___: Yeah [02:49] -p 5432 [02:49] Blah [02:50] huwshimi: personally, i think the way it was done was fine - it was refactoring what was there already and was a very simple bit of code [02:51] wallyworld___: If you say that I'm not going to fix it :) [02:52] Mostly cause I would like to finish with this bracnh [02:52] but very happy to fix it if it means doing it right [02:53] huwshimi: i'm not sure what value it would add for the effort involved. but as a learning exercise.... [02:55] wallyworld___: Maybe I'll consider it a lesson learned for next time :) [02:56] huwshimi: sure. fwiw, as i said, i would have done it the same way, since it was refactoring existing code and was a simple change [02:57] wallyworld___: thanks for the info [02:57] the stuff I've been doing and seen most of is the YUI module stuff [02:58] so it just struck me as odd when I peeked at it [02:59] rick_h_: yes, i suspect you've been exposed to either the new distro pages or the former standalone lazr-js library that we sucked into the lp code base [03:00] rick_h_: then there's all the other lp javascript, which is mainly the procedural stuff [03:00] rick_h_: it's a bit of a mess, but we do want to evolve to use the yui component and widget framework for significant new stuff [03:00] yea, overlay, inline editor, etc. [03:01] yea, I had heard that, which I +1 :) [03:01] I'm a bit of a YUI fanboi so happy to be working with this stuff [03:01] rick_h_: yep, that's all the lazr-js stuff which was written to be a reusable js lib and formerly packaged separate to lp [03:02] rick_h_: then no-one else was using lazr-js and it was too hard to use separately so we just sucked in all the source code [03:02] into the lp tree [03:02] ah, yea I saw some bzr log stuff for "merge in lazr" [03:02] when I tried to chase some older history items for it [03:03] yeah, we did that at the last epic, in july [03:03] 'bzr lp-land' errors with this: http://paste.ubuntu.com/745525/ any thoughts? [03:04] rick_h_: i'm having "fun" today trying to upgrade to yui 3.4.1, but there's errors thrown by the yui.js code. i may perhaps ping to tomorrow about it. very frustrating [03:04] huwshimi: haven't seen that before [03:04] grrr [03:05] your gnome session isn't [03:05] wallyworld___: yuck, devel is currently on .0 then? [03:05] rick_h_: use currently are using 3.3 [03:05] I really regret not making a fuss about the desktop integration thing [03:05] we've had -lots- of fallout [03:05] s/use/we [03:05] oh, that's right, deryck mentioned skipped 3.4 to jump to 3.5 1st qrt [03:06] qtr that is [03:06] rick_h_: oh, i didn't know that. in that case i may drop it and stick with 3.3 till then [03:06] yea, there's a release schedule for 3.5 and deryck mentioned that would be the migration target [03:06] huwshimi: are you logged into gnome? [03:06] lifeless: That's strange, I'm not running this from ssh or anything [03:06] rick_h_: there's been a fairly major re-packaging in 3.3 -> 3.4 [03:06] so I'd not kill yourself on it [03:06] huwshimi: or ssh'd into the machine ? [03:06] lifeless: Yeah [03:06] huh [03:06] wallyworld___: yea, I was checking out their MVC stuff which moved a few things around [03:06] that is odd [03:07] did unity crash on you or something ? [03:07] rick_h_: the reason for doing it is that i wanted to start looking to use the mvc stuff [03:07] lifeless: Things have been a bit weird today, maybe a reboot is in order [03:07] wallyworld___: yea, I'm porting backbone to the YUI MVC on my bookmark app on the side [03:07] rick_h_: since we are embarking on a major new piece of development (the managing disclosure ui) and i wanted to look at using that [03:08] brb [03:08] wallyworld___: ah, yea it's definitely something to plan from the start from [03:08] rick_h_: so i'm still tempted to try to get 3.4.1 working [03:08] to catch the new way of doing the events and such [03:08] yep [03:09] rick_h_: so you used 3.4.1? [03:09] well, let me know how it goes. I'd be curious to see it [03:10] wallyworld___: yea, 3.4.1 [03:10] but I started out with that, so not sure what the migration points are from 3.3, I've been porting from jquery + backbone + historyjs [03:11] rick_h_: we have a "unique" way of packaging yui which may be part of the issue, not sure [03:11] yea, I've not gotten my head all the way around all of that yet [03:11] references and use of LEP() or something vs YUI() [03:11] rick_h_: we basically cat selected yui js files to a big launchpad.js file [03:12] yea, I've gotten that part and added some things to that [03:13] hopefully have my auto resizing textarea widget done tomorrow and in there soon :) [03:14] rick_h_: so 3.4.1 has split stuff out and re-done the options for seeding yui etc. a trivial change to yui-deps.py to pull in all the new files seems to generate a reasonable launchpad.js but there's an error inside yui when pages load :-( [03:14] lifeless: It worked, then I discovered that I hadn't pushed my change but now can't run lp-land again. [03:14] (it worked, after a restart [03:14] ) [03:14] huwshimi: same error? [03:14] lifeless: Sorry, yes [03:15] rick_h_: cool about the text area widget. great to have that fixed [03:15] lifeless: Can I restart my keyring or something? [03:15] wallyworld___: hmm, I can't find that file [03:15] but makes sense [03:15] huwshimi: possibly, might be listnening on dbus [03:15] rick_h_: utilities/yui-deps.py [03:15] huwshimi: have alook for a .*keyring.* process [03:16] rick_h_: it's run by make [03:16] bah, helps if I tell it to do it recursively [03:16] lifeless: gnome-keyring-daemon? [03:16] sounds like it [03:17] if its dbus activated, killing it should be pretty transparent [03:17] I don't know if it is [03:17] rick_h_: it print out all the js files we want to use and these are cat'ed to launchpad.js [03:17] lifeless: I'll give it a try [03:17] wallyworld___: gotcha, yea not peeked at that. [03:18] http://yuilibrary.com/forum/viewtopic.php?p=27897 [03:18] lifeless: Ah, that seems to have worked. Thanks :) [03:19] that seems sucky, but maybe? [03:19] lol "should be fixed in 3.5.0" [03:19] rick_h_: so you would think that being conservative and grabbing everything and yui-base and using that would work but sadly not. it fails inside YArray.hash :-( [03:19] wallyworld___: well I'd hand modify the file and start small [03:20] just try to get yui concat'd to launchpad.js and get it to load on some url [03:20] and then start adding a module/two at a time [03:21] oh failure [03:21] Failure? [03:21] rick_h_: yeah, i was hoping not to have to resort to doing stuff like that. i may just leave it as i've got lots of other stuff to get done :-( [03:22] wallyworld_: yea, sorry. There's so much to the build of this stuff I think the only sane way is to break it down step by step [03:22] wgrant: Still trying to get my keyring stuff happening [03:22] so I can lp-land that change [03:22] might at least try a JS test file, .html [03:22] huwshimi: :( [03:22] and see if you can just make the few files in one of those work with yui 3.4.1 [03:22] just load it into the html from the cdn [03:23] and see if there's anything in the modules we're writing that's harmful (like the forum post on using requires: ...) [03:23] rick_h_: i'll see what i can do in the time i have left. [03:24] yea, have fun! off to bed for real this time. [03:24] rick_h_: thanks. ttyl [03:24] Night rick_h_. [03:26] wgrant: Ok, done, that change is running through pqm now [03:28] huwshimi: Thanks. [03:29] wgrant: No problems [03:39] I don't know how but I appear to have completely broken my ssh/keyring on my computer [03:43] huwshimi: What's the issue? [03:44] StevenK: Well, now when I try and ec2 land I get "ec2: ERROR: You must have an ssh agent running with keys installed that will allow the script to access Launchpad and get your branch." [03:44] What does ssh-add -l say? [03:45] StevenK: "Could not open a connection to your authentication agent." [03:45] ssh-agent should be started on login [03:46] StevenK: ssh-agent gives me output [03:46] It will [03:46] what I assume to be normal looking output anyway [03:46] No matter if it is running or not [03:47] StevenK: oh, right, that's helpful [03:47] StevenK: How do I get it to run then? [03:47] huwshimi: So you can logout and back in and then see if ssh-add -l behaves or you can fix it for one terminal [03:48] StevenK: I'll try the log out first [03:48] brb [03:50] StevenK: Ok, that fixed it this time. Thankyou! [03:50] I restarted a few minutes ago, but that didn't work [03:50] maybe it needed a logout rather than a restart [04:00] wgrant: Can haz review? https://code.launchpad.net/~stevenk/launchpad/use-userHasPriviledges/+merge/82967 [04:01] StevenK: You can't spell privileged. [04:02] Not "privileges" [04:02] s/Not/Nor/ [04:03] StevenK: Why isn't userHasPrivileges implemented in terms of userHasPrivilegesContext? [04:04] wgrant: Because I couldn't think of a clean way to do it. Suggestions welcome. [04:05] StevenK: Make isOneOfDrivers work on distroseries/productseries if it doesn't already. [04:06] Then call isOneOfDrivers(context) instead of isOneOfDrivers(pillar) [04:06] Mm, it would also need to work for SP and DSP, I suppose. [04:06] But it's doable somehow and better than duplication. [04:06] And make userHasPrivileges a class method? [04:07] No. [04:07] It's still an instance method. [04:07] It just calls the underlying class method with the instance's context. [04:07] You've lost me somewhere, sorry. [04:08] userHasPrivileges does basically the same thing as userHasPrivilegesContext [04:08] The logic should not be duplicated. userHasPrivileges should call into userHasPrivilegesContext [04:08] Oh [04:08] Right [04:15] Does launchpad do something like keyword search? [04:19] statik: lol, you haven't deleted all lp mail... lists.launchpad.net :P [04:19] nigelb: we don't treat some words differently, no [04:20] lifeless: Are there plans for something like that? Or can I just building with the API. [04:20] nigelb: no, why would there be? [04:20] I like how for bugzilla, I can do "bug product:Firefox" in my firefox awesome bar and see all the bugs for that product. [04:21] I think most modern browsers have that feature. [04:22] Ah, thats totally different to keyword search :) [04:22] thats a search grammar - and there are plans for that [04:22] however, I think for awesome bar stuff you should implement it in the bar [04:22] Ah, right. I couldn't figure out what's the right term for it :) [04:22] All the awesome bar stuff wants is a search box into which you can put specific words for specific things. [04:29] lifeless, can i use fixtures as contextmanagers? [04:30] ah nm [04:30] poolie: yes [04:31] so it's not setUp/tearDown but setUp/cleanUp? [04:31] more decoy code! [04:32] lifeless, so is the tearDown method of ZopeViewReplacementFixture wrong? [04:32] it looks like it will never run [04:33] yes, thats buggy [04:33] it should just use self.addCleanup [04:34] self.addCleanup(undefineChecker, self.replacement) [04:34] yes [04:34] very deceptive [04:34] self.addCleanup(self.gsm.adapter.register, ... [04:34] they're run fifo? [04:34] same as the testtools one you are familiar with [04:34] they all execute, fifo, errors are collected and raised at the end [04:35] sure [04:35] i thought it would be tearDown to be consistent with unittest and the code already in that file reinforced that misconcetpion [04:35] it's fine now [04:36] care to fix that bad example while you are thre ? [04:36] of course [04:36] thanks! [04:37] yakkety yak [04:40] don't test back? [04:41] poolie: Whats the fun if you don't shave a couple of yaks ;) [05:16] wgrant: Diff updated, can you have another look? [05:16] wgrant: And I can rename the branch if the name offends you [05:24] wgrant, btw raw_sendmail is tested now [05:24] down to the point it would normally call into zope [05:25] poolie: Nice [05:26] StevenK: Let me see. [05:33] wgrant, did you have any luck working out where an email.Header is being passed to raw_sendmail? [05:34] paranoid_email_content_validatino seems to trap it [05:34] oh [05:35] I can probably dig up a pageid if you haven't solved it yet. [05:35] two different ways to send mail, of course [05:35] Yes [05:35] At least [05:35] maybe i should stop worrying and just flatten the mail [05:35] *value [05:35] then we can see if it still fails [05:36] wgrant: you hjad lxc puking on resolv.conf not existing ? (due to /var/run/resolvconf being awol) ? [05:37] lifeless: don't think so [05:37] Not in months, at least. [05:37] But not at all that I can recall. [05:38] wgrant: did you just move bug 887078 back from Fix Released to In Progress? [05:38] <_mup_> Bug #887078: Builder:+history timeout < https://launchpad.net/bugs/887078 > [05:39] wgrant: its not making /var/run/resolvconf automatically, or something [05:40] jtv: From Fix Committed to In Progress. It's not done yet, AFAICT. [05:40] jtv: The pages are still slow and time out. [05:40] erm, not the the literal packag,e whatever makes resolve.conf on lucid by default [05:41] wgrant: I see. Thanks. [05:49] is there a new request, and a new timeline, for each test? [05:49] wgrant: Did you get distracted? [05:49] StevenK: builddisasters tend to do that. [05:49] poolie: there is no strong correlation between tests and timelines [05:49] Relooking now. [05:49] poolie: tests may make requests [05:50] poolie: if they do, the request gets its own timeline [05:50] so [05:50] i should clear the timeline if i want to observe it later? [05:50] the request will d that [05:50] mm [05:50] this is the sendmail code [05:50] i don't know if there is a request [05:50] do i need to make one? [05:51] so, for that, you want to manually setup a timeline - probably easiest to call adapter.set_request_started() and its matching thing later [05:51] StevenK: I am confuse. [05:51] StevenK: Why not pass the context into userHasPrivilegesContext? [05:51] StevenK: bugtask.target [05:52] ok thanks [05:53] wgrant: From IBugTask.userHasPrivileges? [05:53] StevenK: Yes [05:54] You currently specialcase IBugTask in userHasPrivilegesContext [05:54] Why not specialcase series? [05:54] So you are actually passing the context in there. [05:54] Not a task. [05:54] wgrant: IE, if IProductSeries.providedby() ? [05:55] role.isOwner(context.pillar) or role.isOneOfDrivers(context) or role.isBugSupervisor(context.pillar) [05:56] probably [05:56] Remove the Assuming that isOneOfDrivers works on SP/DSP [05:56] Which it might not. [05:57] I can test this quickly, given wallyworld__'s bitching. [05:57] Hey look, he has two underscores. [05:59] wgrant: Seems to work fine. [06:00] wgrant: Anything else jump out at you? === almaisan-away is now known as al-maisan [06:00] Really? It shouldn't work, AFAICT. [06:01] wgrant: TestBugTaskUserHasPriviliges works fine [06:01] Even for DSP and SP targets? [06:02] Note that we don't want the pillar. [06:09] wgrant: DSP/SP don't have drivers ... [06:10] StevenK: No, which is why it probably won't work. [06:10] StevenK: They need to use the series/pillar drivers. [06:10] StevenK: It's probably better to make them have drivers. [06:10] By adding a drivers property. [06:10] wgrant, ok https://code.launchpad.net/~mbp/launchpad/885972-sendmail-timeline/+merge/82963 should fix your timeline thing [06:10] afaict [06:10] poolie: It's safely unicodable? [06:11] wgrant: And check distribution for DSP and both distribution and series for SP? [06:11] one line of actual fix, ~300 lines of diff to make it testable [06:11] StevenK: SP should be able to just check distroseries [06:11] poolie: Welcome to Launchpad. [06:11] wgrant, i think so: it provides a __unicode__ method that tries to take header encoding into account [06:11] StevenK: since distroseries should inherit distribution [06:11] for fairly low values of 'safe' [06:11] wgrant: You'd think. [06:11] poolie: Ah, missed the not isinstance. [06:11] Was worried it could be a shittily encoded bytestring. [06:11] But that indeed looks reasonable. [06:12] yeah i thought of that too [06:23] poolie: (un)registerUtility behaves sensibly if there's already one? [06:23] yeah apparently it stacks them internally === al-maisan is now known as almaisan-away [06:23] it is not very well documented [06:24] Aha, handy. [06:24] :/ [06:25] to some extent i'm going to leave that for whoever uses it next === almaisan-away is now known as al-maisan === al-maisan is now known as almaisan-away [07:39] I may be imagining things, but did Karl Fogel work on Launchpad at some point? [07:40] His name and nickname seem somewhat familiar. [07:40] yes he did [07:40] community/communication mgr [07:41] well know for svn [07:41] Aha [07:41] Yeah, that and the book that he wrote. [07:41] Gerv from Mozilla keeps posting excerpts from his book to Mozilla Planet and I keep thinking "Why am I familiar with this name" [07:46] hi nigelb [07:48] * wgrant glares threateningly at yuixhr [07:48] * wgrant prepares to disable. [07:54] Hey poolie [07:54] wgrant: It didn't disable itself with the glaring :) [09:11] Hello [09:12] Morning mrevell [09:18] rvba: hi [09:18] rvba: I got your query [09:18] lifeless: hi [09:18] rvba: cachedproperty injection is the general answer to this sort of thing [09:19] rvba: see BranchCollection for some of the more complex examples that are around [09:19] lifeless: yeah, but as soon as I materialize the object, the query gets executed so unless I remove the reference, cachedproperty won't help. [09:20] got a backtrace of that query being triggered ? [09:21] No… but I can work out an example for you if you want. [09:21] run your test with LP_DEBUG_SQL_EXTRA=1 [09:21] or visit a page with ++oops++ [09:21] the test is probably easiest [09:21] Oh, you mean you simply want the query itself. [09:21] no [09:21] Ok, hold on a sec. [09:22] the _EXTRA makes it spit out backtraces [09:22] k === almaisan-away is now known as al-maisan [09:27] lifeless: https://pastebin.canonical.com/56131/ [09:28] lifeless: btw, I wanted to say that having backtraces on oops is a real nice addition to try to find what object should be eager loaded. They are not very easy to read but still really useful. [09:29] rvba: cool, thanks [09:30] rvba: so, that backtrace tells me a lot [09:30] rvba: what do you get from it ? [09:31] The problem is the backreference from preview_diff to bmp. When the previewdiff is created it has to look up the related bmp object. [09:32] nope [09:32] thats not what happens ;) [09:32] ah? [09:32] the quest is triggered at line 166 of the pastebin [09:32] bah [09:32] query, line 165 [09:34] diff_lines_count is accessed at line 156 of the backtrace [09:34] Hum, security check… [09:34] bingo [09:34] the security check is triggering the backref [09:35] __init__ or _storm_loaded are not [09:35] rvba: now, if you are loading the bmp as part of the eager loading [09:36] you can solve this by injecting the bmp into the object [09:36] this involves [09:36] replace the storm reference with a cached property [09:36] and set it [09:36] (or you could poke under the storm hood, but so far we haven't done that) [09:36] for instance [09:38] This reference is also used else were and cachedproperty cannot be 'set', right, only populated so to speak. [09:38] rvba: http://pastebin.com/vbiezhwF [09:38] rvba: it can be with gavins patch [09:38] rvba: or you can update the other call sites, which is arguably better [09:39] Right, I think updating the other call sites sounds better to me. [09:40] rvba: does this help? [09:40] lifeless: it does, thanks! [09:40] rvba: backtraces ftw :) [09:40] Indeed! [09:42] lifeless: btw, by gavins patch you mean ~allenap/launchpad/cached-property-bug-893074? [09:42] yeah [09:43] This will just prevent one from setting a cachedproperty and thinking it's all good right? [09:43] actually yes :) [09:43] There was a *lot* of test fallout from that patch :-/ [09:43] so update the callers [09:43] allenap: win :) [09:43] Okay, just checking ;) [09:46] lifeless: I could also have the cachedreference be called _branch_merge_proposal and only change the callsite in security.py. [09:54] rvba: indeed [09:54] rvba: however that would then make semi-invisible skew [09:54] rvba: better I think for all callsites to use the one attribute [09:55] lifeless: Good point. [10:12] lifeless: on second thought, this means that all the call sites wanting to access the property will use branch_merge_proposal but those setting the property will use _branch_merge_proposal. Or the other way around if I make _branch_merge_proposal be the cachedreference. [10:13] I think it's cleaner if branch_merge_proposal is the reference that you can get/set without trouble. [10:13] Anyone know what's up with staging? [10:13] It's been saying “code update in progress” for a suspicious length of time. [10:14] jtv: staging or qastaging? [10:14] staging [10:14] Hmm. [10:14] That shouldn't be down, AFAIK [10:14] qastaging is down for a DB upgrade. [10:14] * wgrant checks. [10:15] 2011-11-22 09:10:51 CRITICAL lpmain_staging_slave has transaction by postgres open 0:02:01.180763 [10:15] 2011-11-22 09:10:51 INFO No fragile systems connected to the cluster (publish_ftpmaster, publish_distro, process_accepted, buildd_manager, process_upload) [10:15] Get a LOSA to retry the update. [10:15] Tue Nov 22 09:10:51 UTC 2011 ERROR: Failed to run full-update.py === al-maisan is now known as almaisan-away [10:20] rvba: mmm [10:21] rvba: do you agree that all the sites accessing it should use one attribute name [10:21] rvba: the overhead of the (very few) sites that set it doing it differently seems inconsequential to me [10:22] lifeless: but AFAIUI it's not possible, we want the sites getting the prop to use the cachedproperty and the sites setting the property to use the reference. [10:22] yes [10:22] one to write one to read [10:23] So your argument is that it gets read much more often than set right? [10:23] one hopes [10:23] My argument is this: setting the cachedproperty leads to silent data fuck up ;). But Gavin's patch will fix this. [10:24] indeed :> [10:24] rvba: also, you can tell zope to not let writes to that attribute, if you want to [10:24] Interesting things also happen when a cachedproperty is used in a Storm query. [10:24] rvba: or you can set a set for it [10:25] lifeless: right, that would be a good solution. [10:25] rvba: as wgrant notes, you need to use the storm reference in queries (though you shouldn't do that anyhow- should be using the _id [10:26] lifeless: Mm, that's a matter of opinion. [10:26] wgrant: perhaps, but I've yet to see a compelling argument for using the reference itself [10:27] It's type-safe and I've yet to see a compelling argument for using the ID. [10:27] Except that using the reference fails in a couple of cases, which are bugs. [10:28] using the reference is discouraged by storm upstream; it fails in some cases and is ambiguous at best in others. [10:32] Too we can't explicitly define a setter for a cachedproperty à la cachedproperty(_get_branch_merge_proposal, _set_branch_merge_proposal) [10:34] s/Too/Too bad/ [10:36] wgrant: I seem to be back for the time being. Any news on staging? [10:41] number of (storm references in queries + places where the field is set) > number (places where the field is read) [10:43] This is in favor of having the cachedproperty named _branch_merge_proposal. === gmb changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: gmb | Critical bugtasks: 292 [10:46] jtv: [10:46] 21:14:57 * wgrant checks. [10:46] 21:15:40 < wgrant> 2011-11-22 09:10:51 CRITICAL lpmain_staging_slave has transaction by postgres open 0:02:01.180763 [10:46] 21:15:40 < wgrant> 2011-11-22 09:10:51 INFO No fragile systems connected to the cluster (publish_ftpmaster, publish_distro, process_accepted, buildd_manager, process_upload) [10:46] 21:15:41 < wgrant> Tue Nov 22 09:10:51 UTC 2011 ERROR: Failed to run full-update.py [10:46] 21:15:46 < wgrant> Get a LOSA to retry the update. [10:46] Thanks. [10:46] Not much luck with the retry though, evidently. :( [10:51] I didn't ask for a retry. [10:51] Because gnuoy was busy with other stuff. [10:52] jtv, just kicking it off again now [10:52] great, thanks [10:58] Do we need an option to increase the long running transaction threshold? We have reasons to keep it low on production, but staging is another kettle of fish. === matsubara-afk is now known as matsubara [11:15] rvba: the other cases we have have the cachedproperty be branch_merge_proposal [11:15] rvba: I humbly suggest that the difference isn't big enough to outweight consistency [11:16] lifeless: okay then ;) … I hope the test suite will catch it if the cached property is used in a query. [11:17] rvba: I suggest grepping [11:17] Of course I'll do that. [11:17] :) [11:17] :) [11:48] morning [11:51] Morning rick_h_ [11:52] Hey rick_h_. [11:53] lifeless: btw, came across this. I haven't read it yet. It's called "The Vietnam of Computer Science" and it's about ORM. Thought you might be interested: http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx [11:54] uh oh, ORM debates this early? [11:54] heh [11:55] Early is all about perspective. [11:55] so true [11:55] woot! changes landed and are live! [11:55] * rick_h_ does a little happy dance [12:04] meh, I think before people write ORM articles they need to use SqlAlchemy for a big project first [12:04] rick_h_: 0100 :P [12:04] too many bad ones cause people to write this stuff [12:04] and lose the idea that ORM == "no need to know SQL" [12:06] a terrible idea to be sure [12:13] rick_h_: Dear god. SqlAlchemy is scar-inducing :) [12:14] I sometimes prefer writing pure SQL to SqlAlchemy :) [12:14] lol, what? How so? [12:14] oh man, when I first tinkered with Python I put SA is one of the top 5 reasons to use Python [12:14] Its awesome, etc. [12:14] Hey StevenK. I was going to try and increase JS timeouts yet again for my new yuixhr tests, but I was unable to build. versions.cfg says Twisted 11.1.0, but our dist directory has 11.1.0pre1 [12:15] Just that it takes a while to settle in. [12:15] yea, that's true [12:15] but all the good frameworks do [12:15] StevenK Making a custom Twisted release requires changing files [12:15] gary_poster: Hm, lemme check. [12:15] IIRC [12:15] I find if it's too easy to start, you'll grow out of it before the end of the project [12:15] gary_poster: But 11.1.0 is a REAL release! [12:16] StevenK, then maybe you did not push up the changes? [12:16] to the download-cache [12:16] gary_poster: But it passed ec2! [12:16] StevenK... [12:16] rick_h_: heh, agreed. [12:16] StevenK: Maybe you didn't test for it? :D [12:16] lemme look at my download-cache again [12:17] nigelb: The download-cache is not seeded on ec2 instances, if buildout works and the tests pass, the upgrade is good. [12:17] nigelb: That is, "troll failed" [12:17] StevenK: Damn. I'll blame travel exhaustion for it. [12:17] gary_poster: It's here in my download-cache [12:18] StevenK: I was "closer" to you for a weekend :) [12:18] gary_poster: r401 [12:18] StevenK, sorry, bizarre system confusion. From emacs term, bzr up in my download cache said there wasn't anything to get, and from a normal terminal in updated, getting Twisted. I have no idea what is going on over here, but it isn't your fault :-P [12:18] Thanks StevenK [12:19] That's what you get for using emacs to do your dirty work. [12:19] :-P [12:19] s/to do your dirty work//g [12:19] nigelb: Oh? [12:19] :D [12:19] StevenK: Kuala Lumpur! [12:19] lol, from ORM flames to emacs...on fire today [12:20] Amazing weekend with Mozilla people for Mozcamp Asia. [12:23] nigelb: Pfft, like Australia was that much further ... [12:23] StevenK: Well... it made sense to keep an Asia event *in* Asia... ;) [12:24] How far is Australia from KL? [12:24] * nigelb checks [12:26] Interesting. Not too far. [12:28] rick_h_: have you read the article? [12:28] jml: It was an interesting comparison. [12:28] I bookmarked to finish reading later. [12:28] jml, I gave it a run through skimming [12:28] nigelb: yeah, it's on my readitlater list [12:28] basically seems to make the general argument people start using and ORM and refuse to lose and give it up [12:29] thus enduring more pain and suffering [12:30] rick_h_: so are you saying that if only he'd used Python & SQLAlchemy instead of whatever other technologies he's using, he'd not have a problem with ORMs at all? [12:31] no, I'm saying that people get fussy over ORMs, but what ORM you use can great change your outlook [12:31] having used several ORM in PHP land and Python land [12:31] things like the verbosity stuff he talks about is better in python [12:32] along with things like the ability of Python to add/modify objects at will make it more flexible for a lot of ORM tricks [12:32] and SA improves a lot because it's two layers, the expression layer makes crazy things possible [12:32] while the ORM layer makes typical things pretty and easy [12:32] but most ORM solutions don't break down nicely like that [12:33] but SA has its own pain points for sure [12:33] I've always thought it was a compromise of the lesser of the two evils. [12:34] And that depends on the situation. [12:34] it makes you have to learn more, there's two solid layers to understand, and it expects you to actually write your own layer above it [12:34] which I think is very important [12:34] Oh. [12:35] SA excepts developers to abstract SA out of their operations? [12:35] well, I argue that you write an API layer that your app accesses and you wrap all your SA [12:35] that way you can swap out the back end/what SA is doing without breaking your app [12:36] http://python.mirocommunity.org/video/4392/pyohio-2011-sqlalchemy-tutoria [12:36] Hrm. Fair. [12:36] for thoughts on it :) [12:36] I have seen projects doing exactly that. [12:36] https://crash-stats.mozilla.org/ for one does that. [12:36] Backend is something python-ish and SA. [12:36] yea, I think that's the only way to go and really solves a lot of problems with DRY and such [12:37] and makes the breaking down to SQL and such less icky [12:37] This changes my POV for a few things. Now I need to go back and think things through :) [13:03] nigelb, rick_h_, I think ORMs are evil, from experience, and even pure object databases seem easier than they are. However, a good alternative is tricky. I am interested in the pure data + SQL composability for functions that is being explored in Clojure-land with projects like Korma. http://sqlkorma.com/ . It allows abstractions while being much closer to what the database actually manipulates. [13:03] http://nathanmarz.com/blog/clojure-or-how-i-learned-to-stop-worrying-and-love-the-paren.html has a related argument. [13:04] * gary_poster retreats back into cave, with a madman hair wig on [13:04] gary_poster: I think Haskell has similar stuff [13:05] gary_poster: incidentally, thanks for the Clojure conference write-up. Was a good read. [13:05] * jml has had the "simple vs easy" talk flagged for watching for a couple of weeks now. Surprisingly hard to find an uninterrupted 1hr+ of time to watch things. [13:06] jml: heh, yea. I wanted to watch some YUIConf videos so scheduled it as group viewing at CHC this week [13:06] make everyone else suffer my wishes! bwuhahaha [13:06] CHC? [13:06] sorry, CoffeeHouseCoders, weekly meetup I run locally for devs [13:06] http://coffeehousecode.appspot.com/ [13:06] detroit branch [13:07] gary_poster: yea, that second link is a lot of stuff I'd do with SA [13:07] creating almost little sql "widgets" and then using them into larger queries and such later on [13:08] rick_h_: you can do that in storm, fwiw [13:08] yea, I look forward to getting into some storm stuff later on. [13:08] I know I gave it a look when it first came out and really didn't follow it afterwards [13:08] well, first went OSS public I guess vs "first came out" [13:09] I'm still floored people suffer through the django orm though ugh [13:09] jml, cool, glad you liked write-up. Yeah, not surprised Haskell has similar stuff. And yeah, understood about the hour. I put it on one weekend while I was supposed to be cleaning a room. Cleaning the room was pretty slow, but hey, I saw the video! :-) [13:09] gary_poster: I like though that this clojure stuff keeps things sql'y. Keep people from getting away from that idea [13:09] gary_poster: :D [13:09] right [13:10] ah, imapfilter running now. This ought to help with all these lists [13:10] gary_poster: yeah, I've got to disassemble a whiteboard this weekend, might have this in the bg then :) [13:10] sounds perfect jml :-) [14:08] sinzui: ping [14:08] hi bac [14:08] do we have a sprite with a spinner not on a white background? like transparent? [14:10] rick_h_, no, I don't think we do. We only have spinner.gif or whatever it's called, that is over white. [14:10] yea, ugh. Ok [14:18] deryck, rick_h_: just do one in CSS [14:19] dobey: http://fgnass.github.com/spin.js/ import this? :) [14:19] dobey: when I tried to do a css3 spinner it had cross browser issues [14:19] and a TON of vendor prefixing fun [14:20] eh :) [14:20] yeah, css 3 spinners are just showing off. And painful. We can get a new image if you need. [14:21] actually, I use it on my bookie plugin, but the animation freezes while the ajax request takes place [14:21] yea, I figured I'd check on the stand up the best way to move forward on it [14:21] I need a spinner on a grey background and not sure if a fresh bug or something else it the right way to move it forward === matsubara is now known as matsubara-lunch [14:40] http://www.yuiblog.com/blog/2011/11/15/yui-3-5-0-roadmap-and-timelines/ [14:40] deryck: ^ [14:45] deryck: lp:~abentley/launchpad/history-model [14:46] abentley, ok, will take a look now. [14:48] qastaging looks unhappy. Known issue? [14:49] abentley, not to me. Not sure if others know. [14:50] abentley: deryck The update failed this morning at 09:10:51 UTC [14:50] gnuoy has kicked it off again after that. [14:50] rvba: Cool, thanks. [14:50] s/has/ [14:51] Not sure were we're at now… gnuoy? [14:51] rvba, hi === abentley changed the topic of #launchpad-dev to: qastaging is down, but being worked on. |https://dev.launchpad.net/ | On call reviewer: gmb | Critical bugtasks: 292 [14:52] gnuoy: hey, can you tell us where we're at with qastaging's update? [14:52] hmm, it hasn't logged anything for the past few hours [15:01] abentley, a ha! [15:01] abentley, the event name has changed since it's a new object. It's now: buglisting-model:fields-changed [15:03] deryck: I don't follow. The event is still being constructed using this.constructor.NAME + ':fields-changed' where NAME is buglisting-config-util [15:04] abentley, no, because NAME is the buglisting model object. the event is fired from the new object, not buglisting config util objects. [15:05] deryck: Ah, so this is a keyword-this trap. [15:06] abentley, right, in YUI's event handling "this" always gets bound back to the object firing the event. [15:06] sinzui, the "project group report" we talked about is the +milestones page for project groups, right? [15:06] abentley, or rather to the host object, since the event is the ATTR change event. [15:07] deryck: Okay, adding "this" to the end of .after() fixed it. [15:08] deryck: thanks! [15:08] abentley, yup. Long term, I think the addListeners stuff should move up to the model object, since it's really after that object updates that we're interested in. And then the tests updated. [15:08] abentley, np! [15:17] gary_poster, yes, you can see an example of the report that is being used: https://launchpad.net/landscape-project/+milestone/11.11.2 [15:17] thanks sinzui [15:28] gmb: if you get a quick second: https://code.launchpad.net/~rharding/launchpad/bug_814697_missing_spinner/+merge/83034 [15:32] deryck: btw, the trick of setting a global, e.g. "debug_me=true" and doing if(debug_me){debugger;} works pretty well. === matsubara-lunch is now known as matsubara [15:34] abentley, ok, nice. I'll have to remember that. [15:36] gmb, I also have a branch that needs review, if you're not too overloaded. [15:36] rick_h_, Sure [15:36] deryck, I'm not. I'll take a look after rick_h_'s [15:37] gmb, awesome, thanks! https://code.launchpad.net/~deryck/launchpad/field-visibility-persistence-891780/+merge/83037 [15:37] sinzui, Any particular reason you assigned bug 867593 to me? [15:37] <_mup_> Bug #867593: Displayed number of comments hidden is sometimes +1 to the actual value < https://launchpad.net/bugs/867593 > [15:37] abentley, bug 890745 is fixed release, right? I think it's another case of tagger not handling pre-reqs right. [15:37] <_mup_> Bug #890745: dynamic bug listings don't handle next and prev correctly on first and last batch < https://launchpad.net/bugs/890745 > [15:37] gmb, lifeless assigned a bug regarding comment numbering to you, tagged it as regression, then raised it to critical. He wanted your opinion... [15:38] deryck: that's right. [15:38] abentley, ok, thanks. [15:38] rick_h_, approved. [15:38] But that bug was a dupe of an older bug. I made you the assignee of the master, and also a related bug that I think a numbering fix will also fix [15:38] gmb ty [15:39] gmb, so I am channeling lifeless and asking for you opinion of all bugs assigned to you tagged with "comments" [15:41] sinzui, Uhm, okay. I'm slightly confused as I don't know which bug it was that lifeless assigned to me. But I think for the sake of sanity we should unassign those bugs. I'm up to my eyes in bug 881019 at the moment so it makes more sense for someone else to take them if they have the time. [15:41] <_mup_> Bug #881019: Lp login is broken after account merge < https://launchpad.net/bugs/881019 > [15:43] gmb, This is the bug I saw 45 minutes ago https://bugs.launchpad.net/launchpad/+bug/893375 [15:43] <_mup_> Bug #893375: Comment order wrong and not all comments shown < https://launchpad.net/bugs/893375 > [15:44] * gmb looks [15:44] gmb: you have my sympathies with that bug. I suspect the issues will not really be fixed until this feature is implemented with ISD: bug 770107 [15:44] <_mup_> Bug #770107: launchpad relies on login.ubuntu.com but does not sync email addresses < https://launchpad.net/bugs/770107 > [15:46] sinzui, That may well be the case. Okay, now that I have a better idea what's going on, I'm happy enough to be assigned to those bugs. [15:47] Thanks for the clarification. [15:49] (I think the fencepost error is a result of the fact that the BugComment code basically consists of all the Aale of which bigjools's Luftkissenfahrzeug is always voll. [15:49] gmb: really do not know what is going on. the openididentifier -> account <-person <- emailaddress -> account relationship seems to permit different answers on how you join... [15:50] sinzui, Yeah. It's a pain. At the moment I'm working on removing Person.account to see if that causes any fewer problems. Unfortunately, lots of things have now broken. [15:50] gmb ... So the code that might try to setup or fix user data may get an different set of linked object when logging the userin or showing a list of object [15:50] gmb so email is the link between person and account? [15:54] sinzui, That's the plan (you suggested it here https://bugs.launchpad.net/launchpad/+bug/881019/comments/1, which is where I got the idea from). [15:54] <_mup_> Bug #881019: Lp login is broken after account merge < https://launchpad.net/bugs/881019 > [15:54] deryck: the only place we should be using field_visibility_defaults is when the user asks us to reset to the default. In other places, we should be using field_visibility. [15:54] Unfortunately, it _might_ be too inefficient. Not sure yet because I haven't got the test suite passing. [15:55] abentley, agreed. Did I not do this somewhere? [15:55] deryck: Yes, in the getter and setter for BugListingConfigUtil.field_visibility [15:57] gmb: Yes, I was not certain it would scale. [15:57] abentley, do you mean the valueFn? [15:57] deryck: yes, the valueFn and the setter. [15:58] abentley, so the valueFn only returns default values. it will never be used in most cases, where you pass in a config. if nothing was defined, I think we should use field_visibility_defaults there.... [15:59] deryck: If nothing was defined, I think we should use LP.cache.field_visibility. [16:00] abentley, I guess that's fine. [16:00] deryck: Those are the setting that were used to render the initial view. [16:00] i.e. server-side. [16:01] abentley, sure. That's probably better. I initially liked be explicit with a config, which is why I didn't sniff the cache for it.... [16:02] abentley, but that will fix the issue of the bar not being in sync with the page, and we can drop the explicit config on object creation. [16:03] abentley, as for the setter, I'm trying to recall why I merged with the defaults there. I had some reason that escapes me, but hopefully the tests will reveal that if you change it to merge with field_visibility. [16:03] deryck: But you do sniff the cache, implicitly, by using get('field_visibility_defaults'), which hits the cache. [16:05] deryck: So it's a question of which cache value you hit, and if field_visibility_defaults is defined field_visibility is also defined and better. [16:05] abentley, right, I'm fine to change it to sniff for field_visibility. Was just trying to explain my reasoning, i.e how the code go to where it is. [16:07] deryck: okay. It wasn't clear to me that the valueFn was intended to be a fallback. [16:07] abentley, yeah, that's all I was trying to say, in that the common case, and in current template usage, it's never hit. [16:08] abentley, but if we make that change to sniff for field_visibility, we can drop the explict config for field_visibility from the template and fix a bug. [16:09] Does anyone know of a way query users to know if someone was former canonical employee? [16:09] Ah, I had to type that to remember I can check the TeamMembership deactivated status [16:10] deryck: I'd rather make field_visibility and field_visibility_defaults mandatory. We can just pass the LP.cache in as the config object. [16:13] abentley, as the config or as part of the config? [16:14] deryck: I meant as the config, but we could pass it in as part of the config instead. [16:14] abentley, if we do, let's make it part, so we don't have to append srcNode type configs to the cache, or our reference of it..... [16:14] abentley, but what is the advantage of passing it in, versus sniffing for it? We only need it in a couple places. [16:15] deryck: I don't know what a "srcNode type config" is. [16:15] deryck: decoupling and explicitness. [16:16] abentley, I meant srcNode type of things that go in the config. i.e. we have to specify things that are in ATTRS plus srcNode beyond just field_visibility. [16:16] deryck: I don't know what srcNode is. [16:17] abentley, srcNode is what the widget framework uses to know where on the page to stick the widget you're rendering. [16:17] srcNode: Y.one('#mydiv-for-this-widget') [16:17] that ^^ goes in config usually, beyond any custom attrs. [16:18] deryck: Okay but that's needed for the BugListingConfigUtil, not the model. Right now, the model just needs field_visibility and field_visibility_defaults. [16:18] abentley, right. [16:18] abentley, also, can we just pass around values in the config, rather than the whole cache. and maybe that's what you meant. [16:19] so field_visibility: LP.cache.field_visibility rather than config.cache = LP.cache. [16:20] abentley, hmmm, well I guess for the model object the cache actually does make sense as the config.... [16:20] abentley, sorry, I'm stuck thinking about BLCU. [16:20] deryck: so we certainly can do new BugListingModel({field_visibility: LP.cache.field_visibility, field_visiblity_defaults: LP.cache.field_visibility_defaults}), but it just seems verbose at this point. [16:21] abentley, if you only needs those two bits from the cache, I prefer that. But I'm not going to be a jerk about it. :) [16:21] abentley, but if you need more from the cache, using it as the config is fine. [16:33] deryck, approved, with comments. [16:35] gmb, thanks! Good suggestions all the way around. === deryck is now known as deryck[lunch] === beuno is now known as beuno-lunch === salgado is now known as salgado-lunch === gmb changed the topic of #launchpad-dev to: qastaging is down, but being worked on. |https://dev.launchpad.net/ | On call reviewer: - | Critical bugtasks: 292 === beuno-lunch is now known as beuno === deryck[lunch] is now known as deryck === salgado-lunch is now known as salgado [18:21] if I've got one of the new hash-style oops that should still be findable via lp-oops shouldn't it? [18:22] abentley deryck either of you guys have a sec to help me figure out what I'm missing from getting yui simulate to help me test my events? [18:22] yes, if it has synced to devpad [18:22] production doesn't have the rabbit config toggled on yet (liam is still getting the glitches out of monitoring) [18:22] yep, just wanted to make sure I wasn't sat here hitting refresh for nothing [18:23] rick_h_, did you include node-event-simulate in the requires line for the test module? [18:23] yea [18:23] and if I manually interact with the html on the page the event fires [18:23] so everything seems "hooked up" [18:23] but running node.simulate('keyup') or 'valueChange' isn't doing me any good for automated testing [18:25] rick_h_, so everything in the basic example here matches what you're doing? http://yuilibrary.com/yui/docs/event/index.html#simulate [18:27] deryck: yea, loggerhead is hating me, but the relevent bits: http://paste.ubuntu.com/746203/ [18:30] oh, nvm [18:32] I had to do it right, can't simulate valueChange and when simulating keyup, you need the value code and the keydown to go with it [18:33] http://paste.ubuntu.com/746211/ changing to that works [18:34] rick_h_, alrighty then. there you go. :) [18:50] am I missing an easy way to check assertion counts in YUI test? I see Y.assert has a count and _getCount() but nothing public I'm seeing [18:52] rick_h_, what are you wanting to count? how many assertions you make? [18:52] yea, sanity check because I've got to do some timeout waiting [18:53] so want to verify that there were 3 assertions in this test kind of thing === jcsackett_ is now known as jcsackett [18:54] rick_h_, do you know about "waits"? Are you using that, or actual setTimeouts? [18:55] yea, I'm using a setTimeout right now. I guess if I go to wait/resume it'd "catch" the case I'm looking for [18:56] nvm then, I'll try to find out later on. Seems like there's some stuff there for it, but my searches are coming up empty [18:59] rick_h_, yeah, I think it would be better to use waits then count the assertions. [18:59] gotcha, thanks === jcsackett_ is now known as jcsackett [19:46] deryck: for this plugin, is there a good place to document it at? [19:46] the doc directories all seem really just doctests [19:47] rick_h_, the dev wiki is where we tend to put pure documentation. [19:47] rick_h_, and we usually do a launchpad-dev email to say "hey I did this, it's available, and docs are at $LINK" :) [19:48] ah ok, was looking for things like usage examples and such for the lazr stuff in the code [20:19] deryck: ok, phew...let my first big MP get a thrashing! https://code.launchpad.net/~rharding/launchpad/bugfix_891735/+merge/83068 [20:20] rick_h_, that's a nice size change. :) [20:21] rick_h_, can you hunt around for another reviewer. Trying to get stuff landed I'm behind on. [20:21] little better than one liners so far? [20:21] sure thing [20:21] rick_h_, but if no one else can do it, I will, certainly. [20:21] understand, was an FYI [20:21] come out reviewers come out wherever you are please [20:21] fresh meat to hack up on [20:22] jcsackett abentley or should I ping anyone else in particular? no rush on things [20:22] rick_h_: I'm happy to look at it. [20:24] awesome, thanks! [20:24] rick_h_: Could you add a screenshot, please? [20:25] abentley: I guess, it just looks like a textarea [20:25] I don't dress anything up at all [20:25] a movie perhaps? [20:25] or would that be a bit much [20:25] rick_h_: We usually request screenshots for UI changes, but if there's nothing to see, that's okay. [20:26] yea, it's invisible until you use it [20:31] rick_h_: lifeless has a good point. We already have auto-sizing behaviour for bug descriptions, just not on bug creation. [20:33] right, I noted that in my MP. It definitely does, and it's built around multiple elements, only on edits, and the whole toolbar/save event workflow [20:33] rick_h_: I thought you were referring to the bug title. [20:33] in discussion it was thought this was light enough and different enough to be useful since the inlineedit isn't easily pulled out atm to use for this [20:34] no, in the pre-impl note? [20:35] rick_h_: It seems pretty unfortunate to have different widgest for creating text fields vs editing them, don't you think? [20:36] yes, definitelty, but the original goal here was that if this gets tested and is ok, we could enable this across all textareas on the site as part of the global ui [20:36] which is a bit hard to do with the inlineedit module [20:36] out of this I've got a couple of bugs to push against the inline edit to help it's resizing, and then as a larger scope can look to see if somehow that can use this plugin for handling textareas [20:37] but it's very tied in currently [20:39] rick_h_: I really don't get it. Bad enough to have an inconsistent one-off field, far worse to have many inconsistent fields. [20:39] inconsistent how? [20:40] I admit that just adding to this one place in the bug report isn't great, but that's where the bug/idea came out of and it needed a home to start at [20:40] rick_h_: you'd have a better idea than me, but generally when there are two implementations of something, they are never quite consistent. [20:40] I didn't want to make it global without getting it in front of more people/eyes [20:41] abentley: yes, true. but this is only resizing, while the other is an implmentation that includes some resizing logic [20:41] but really deals with a lot more [20:41] some parts are definitely something to add to the inlineedit, support for min/max heights and such [20:42] but it's really a lot more than just a resizing widget [20:42] and stripping that logic out to make it global was deemed more work than it's worth at the moment [20:47] rick_h_: By doing this, you'd be adding tech debt. Bug #723417 doesn't seem to justify adding tech tebt-- it could just be solved by changing a CSS class or something. [20:47] <_mup_> Bug #723417: Further information input area shrunk making it difficult to input and review details < https://launchpad.net/bugs/723417 > [20:47] rick_h_: wouldn't be possible to implement this as YUI plugin? [20:47] that could be used standalone like here [20:47] flacoste: he has. [20:48] yes, that's how it's implemented [20:48] and used on the textarea editor [20:48] I chatted with him about the inline editor. [20:48] then couldn't use this plugin in the textarea inline editor? [20:48] long term it's possible. Right now there isn't clear separation of that in the inline editor [20:48] right [20:48] so it needs some updates to be able to use this plugin as a base for multiline [20:48] that's well possible [20:48] abentley, flacoste -- the inline editor tightly couples the single line and multi-line editor to the same widget. [20:48] right [20:49] that's the tech debt, really. [20:49] it's not like he can just plug the text area, which is what I also suggested. [20:49] right [20:49] the inline editor needs some love [20:49] it's a lot of work to make the inline editor clean first. [20:49] right [20:50] once the inline editor is cleaned up, then yes, it would be trivial to plug the text area for resize. [20:50] so we are all in agreement then! [20:50] this approach is sane [20:50] agreed, would love to hack on it some. This was kind of a chance for my first "large" work through the JS code and the process [20:50] once we clean the inline editor mess [20:50] yeah. [20:50] we can use this new clean plugin to remove the coupled functionality in the editor [20:50] yup [20:50] deryck: there can be multiple pieces of tech debt. [20:51] abentley, sure. But I don't think this is creating debt. [20:51] abentley, it's saying "here's the one true way to do resizing text areas." [20:51] abentley, the debt already exists in that the inline editor was poorly factored to start with. and can't make use of this one true way. [20:51] deryck: To me, duplicating functionality is tech debt pretty categorically. [20:52] abentley, we're not really duplicating. There is no generic way to resize text areas. The inline editor resizes as one of a million things that it does. ;) [20:53] bear in mind, I have no issues with rick_h_ continuing work on this in a follow up branch to clean up the inline editor. [20:54] deryck: I understand that there is no generic way to resize text areas. [20:54] abentley, so do you think he shouldn't land this? [20:54] deryck: I still see it as functionality duplication. [20:55] abentley, so are you suggesting he shouldn't land it? Or that he shouldn't land it without also fixing the inline editor? [20:56] deryck: I am not happy either saying he shouldn't land it or that he should. [20:56] heh [20:56] come on, commit! :) [20:57] deryck: This is a case where code review is covering pre-implementation material. [20:57] hah, I knew my first code would get a tearing into! [20:57] deryck: and that always sucks. [20:58] abentley, yeah, it does. but he and I did discuss that in a pre-imp. it's a lot of work to rip that stuff out of the editor and add this. and I saw value in him getting this widget first and then turning to the editor. [20:58] abentley, would you have suggested something different? [20:59] deryck: Yes, I would have said if we don't want to work on the in-line editor, we should delay working on a generic resizable textarea until we are ready to work on it. === almaisan-away is now known as al-maisan [21:00] abentley, well, I never said we don't want to work on the inline editor. But also, I do see value in this by itself. How can someone clean up the editor if they don't have this to replace the current stuff that's bad? [21:00] I definitely think doing both in the same branch is too much. [21:02] deryck: They can clean up the editor by extracting its resizing functionality and making it modular. [21:02] deryck: And then making it pluggable. [21:03] so what if I were to remove the one place it's currently used, and just try to land as "added a plugin" for now based on code/tests [21:03] and then work on the inline edit using this plugin as a next step before it gets used anywhere [21:04] abentley, no, you can't extract it. you need to first convert the single inline editor widget into two widgets, one for text inputs and one for text areas. [21:06] deryck: I haven't looked at that code. Maybe that's true in this case. [21:07] abentley, it is, I promise. I'm not trying to be a dick. I'm just telling you it is a lot of work to fix. [21:07] and it's really not worth pulling out; it's poorly written, using an updateSize thing that is called after so many different events. === matsubara is now known as matsubara-afk [21:08] rick_h_: I would rather not commit unused code. If you're actually committing to fixing the tech debt by fixing the inlineeditor, that is enough for me. [21:13] abentley, FWIW, I'm fine with rick_h_ committing to doing the follow up work. [21:13] i.e. I don't have anything else he has to do instead of that. [21:14] deryck: You should also understand that I'm on my third day of de-duplicating functionality, and so I'm perhaps more sensitive to these issues than normal. [21:14] abentley, yeah, fair enough. :) [21:15] well I have to run here in a sec. What should I do from here? [21:16] rick_h_: I see you're setting skip_animations true, so why do we need to wait "a slight sec"? [21:16] rick_h_, if you're leaving, let's just take up the issues in the standup, if abentley doesn't mind. [21:17] standup tomorrow, I mean. [21:17] rick_h_: we can pick up tomorrow. I'm the on-call-reviewer anyway, tomorrow. [21:17] abentley: because in testing, chrome was too fast that if I checked right away it still grabbed the orig sizing values [21:17] and the 100ms there seemed to slow it down just enough for chrome to finish the ui redraw [21:17] abentley: ok, sounds good to me [21:18] thanks and sorry for the trouble [21:18] abentley, while I have you, too :) Does mustache have a syntax for negative conditions? I assume there's no "else" block, but is there an "if this value is None" kind of expression? [21:18] rick_h_: np [21:18] deryck: Yes. [21:19] deryck: e.g. {{^repo}}{{/repo}} [21:20] abentley, ah, thanks! I would have never guessed the ^. And I couldn't find it in docs. [21:20] abentley, now searching docs for "^" I do ;) [21:20] deryck: :-) [21:24] it was also something hard to google for. I got lots of "Are mustaches hot or not" hits. === jcsackett_ is now known as jcsackett === al-maisan is now known as almaisan-away [22:23] hi all [22:24] hi poolie [22:24] poolie: what's happening with https://code.launchpad.net/~xaav/loggerhead/export-tarball/+merge/66408? [22:24] do we have anybody on the hook to integrate this? [22:24] no [22:24] i think there should be [22:24] :( [22:25] it is a real shame it has been neglected for so long [22:26] so [22:27] perhaps i am well placed to shepherd it in [22:27] poolie: thanks! [22:28] i think it only requires a merge to loggerhead, updating the version in LP and then QA? [22:29] probably a ton of qa [22:30] i think that's the main real commitment [23:00] "17045 tests run in 4:54:26.362705, 1 failures, 303 errors" hah! [23:04] Heh [23:04] Which branch was that? [23:06] wgrant: Opinions on http://pastebin.ubuntu.com/746479/ ? [23:07] I guess. [23:07] wgrant: I'm still working on the branch, so if you'd prefer a loop or something, say something. :-P [23:12] wgrant: Oh, the branch was to do with the tag cloud, the errors were all because "ImportError: No module named lpbuildd" [23:12] huwshimi: Ah, merge devel. [23:12] wgrant: Yeah, I figured that might fix it [23:22] should make it about an hour quicker too...