/srv/irclogs.ubuntu.com/2011/11/22/#launchpad-dev.txt

poolie_lifeless, well, on a happier note, can i get a kind of architecture review on markdown?00:02
lifelesssure00:02
=== poolie_ is now known as poolie
poolieso00:03
poolieit will be behind a flag00:03
poolieistm it might be good to make the rendering be a timeline action?00:04
poolieor would that be redundant with just profiling it00:04
lifelessif its really 200ms per text00:04
poolieit could possibly go in memcached but perhaps that could be done later00:04
lifelessI think we'll have issues00:04
lifelessugh no, memcached is very much not the right hammer here00:04
lifelessso structurally whats going on is that you're generating html out of some content, which is exactly what the template engine does00:05
=== wgrant changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: wgrant | Critical bugtasks: 292
lifelesswe're then embedding that result literally in the larger template00:05
wgrantHmm? memcached would be reasonable here, I think.00:05
pooliethe caching could be done in the template00:06
poolies//controlled by00:06
poolieif it really is 200ms that's almost infeasible00:06
lifelesswgrant: one word: bug comments00:06
wgrantlifeless: Myes?00:06
poolieow00:06
lifelesswgrant: a situation where we timed out *because* we used memcache00:07
lifelesswgrant: and a place where markdown is [eventually] desired00:07
wgrantRight, but it was timing out because the pages sucked, and there was absolutely minimal benefit to using memcache there.00:07
wgrantIt would need testing, but I think it could be useful if implemented properly.00:08
lifelessso we want to use memcache on things that are both expensive to generate and able to be generated once for all viewers00:08
wgrantAnd if the page didn't suck already.00:08
lifelessbut more so we want the first hit to be fast00:08
pooliewgrant, tangentially, re your email bug, i will add a test that forces an email.Header into it and check its handled correctly00:08
lifelessso we either want preloading (with change updates) or we want rendering to be so fast that memcache communication overhead is slower.00:08
lifelesspoolie: you could timeline it yes; if there are questions over its performance thats a great way to ensure we have data.00:09
poolieso if it's really that slow00:09
pooliethat might be a problem for applying it to all bug comments00:09
lifelesspoolie: as there seem to be questions around it, perhaps you want to pull on that thread a little first00:09
pooliethere is python-markdown2 which claims to be an unspecified amount faster00:09
lifelesspoolie: so that we don't have markdown for home pages and then get stuck on bug comments00:09
poolieexactly00:09
lifelesspoolie: I'm fine with landing with a restrictive feature flag to find out early adopter issues00:10
poolieright00:10
poolieperformance to some extent we can test offline00:10
pooliethere is also this thing that api clients will now see markdown in the results00:11
pooliei think that's ok00:11
poolieit's close enough to text00:11
poolieif they eventually want to start rendering it, they can00:11
lifelessso will folk not behind the feature flag00:11
poolieright00:11
poolieso people probably don't want to go too crazy til it's widespread00:11
lifelessI think timelining it for now is a good idea00:12
lifelesstill the issues/concerns are put to rest00:12
poolieoh hang on00:12
pooliervb's measurement is actually that it's 240µs.00:13
poolieisn't it?00:14
poolieyep00:16
pooliethat's not so bad then00:16
pooliebut, worth testing00:16
lifelessno, its not00:16
lifelessthe timeit CLI reports time per loop00:16
lifelessthe timeit python API reports total time00:17
pooliebut each iteration of the loop formats it 1000 times00:17
lifelessah00:17
lifelesslet me have a play00:17
poolie./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
poolie1000 loops, best of 3: 231.1 usec per loop00:17
poolie./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:17
poolie100 loops, best of 3: 7.816 msec per loop00:18
lifelessbtw, 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
poolieyep00:18
pooliei have it as an egg00:18
pooliewas just using 'packaged' as a very rough metric for 'supported/popular/worthwhile'00:18
pooliealso kind of handy for things like this00:18
lifelessok, yes, <1 ms is good00:19
lifelessdon't timeline it00:19
lifelesspoolie: you know about bin/py ?00:19
lifelessbin/py -m timeit ...00:19
pooliesee the lines i pasted?00:20
lifelessheh, I do know00:20
lifeless*now*00:20
* lifeless slaps his fingers00:20
poolie:) is ok00:20
lifelessthe scaling on longer strings is a little worrying00:20
lifelesswe would have trouble at 8ms per bug comment, for instance00:21
poolieok so if we say a large comment has about 100 lines of text, it's about 28.69ms to convert it00:21
pooliehm, with no actual markdown in it, 100 lines, 1.798ms00:21
lifelessso 100 comments is 2.8 seconds, which is 50% of the budget for an entire load00:21
lifelessanyhow, no Big Red Flags00:22
poolieone 100 line code block, 0.4ms00:22
pooliestrangely00:22
lifelessit needs some love I guess00:22
pooliearguably typical 10 line comment, 0.3ms00:22
lifelessit might have some pathological cases that can DOS us00:22
poolieyeah00:22
lifelessOTOH one laptop can DOS us, so not goig to worry about this yet00:22
poolieespecially because the parsing is regexps00:23
poolie<lifeless> wgrant: one word: bug comments00:23
pooliecan i buy another word?00:23
lifelesstimeouts :)00:23
poolieoh i see00:23
mwhudsonyeah00:23
mwhudsonwas going to say that, i think00:23
pooliethis is the "you eventually fall off a cliff" case?00:23
lifeless⸘that⸘00:24
mwhudsongithub run pygments but clearly limit the highlighting of any segment to say 2s00:24
mwhudsonwould be nice to have that sort of thing00:24
mwhudson(also for pygments...)00:24
lifelesspoolie: 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 what00:24
poolieyes, that can hook in00:24
pooliehuh00:24
lifelesspoolie: very poor interactions between late evaluation and a chatty protocol00:24
poolieso, the other approach is to do it on the client side00:24
lifelesspoolie: nowadays memcache is just turned off, and things are much faster.00:25
pooliewhich possibly makes rendering the page actually easier on the server, if we can reliably detect to just send json not html00:25
wgrantSomeone want to review https://code.launchpad.net/~wgrant/launchpad/observer-merging/+merge/82952?00:41
StevenKwgrant: Line 68 of the diff -- why do you bother pulling in store?00:42
wgrantStevenK: Because I forgot to remove that line when I replaced the check just now.00:43
StevenKHaha00:43
StevenKwgrant: That's my only niggle, r=me00:43
wgrantIAPGS.get only came into existence late last night.00:43
wgrantSo I previously queried directly.00:43
wgrantThanks.00:43
lifelessis http://appbuntu.com a legit site or a spammer ?00:43
StevenKlifeless: NXDOMAIN ?00:44
wgrantWFM00:45
lifelessStevenK: get a better DNS resolver ?00:45
StevenKOh, *buntu*, not *ubuntu*00:45
StevenKTranscribe error00:45
lifelessUI fail :P00:45
StevenKWell, I didn't click the link, I typed it out from memory so I could whois it00:46
StevenKAnd my memory fails00:46
StevenKOften00:46
* StevenK waits for lifeless to say "Frequently"00:46
lifelessthere 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 me00:47
lifelesstrying to determine if it is / isn't00:47
lifelessStevenK: I did but you've clearly forgotten :P00:47
StevenKI was about to suggest wgrant, but I suspect wgrant is too young for Gilbert & Sullivan00:47
lifelessthere was also an andi comment, but francis has address that separately, so I just deleted it00:48
poolielifeless, memcached is just off across the board?01:21
pooliein a flag i think?01:21
lifelessmore or less01:22
lifelessI need to go through and rip out the inappropriate uses of it01:22
pooliehm01:22
pooliethe rules ui could do with some love too01:22
lifelessany new use needs rather deep thought about what its actually saving01:23
lifelessthere is currently one reasonable use of memcache in LP - the front page blog contents01:23
lifelessthe rest have deep flaws (due to the interaction between views, eager loading and late evaluation), as well as various cachability rule interactions01:23
pooliedo you have a rule of thumb for how long it takes to query it?01:24
lifelessbetween 1 and 5ms01:24
lifelesssometimes up to 12ms01:24
StevenKlifeless: TBH, since we aren't using it, I feel we should cache the blog contents differently and rip it out01:27
lifelessStevenK: I'm open to that.01:27
lifelessStevenK: 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 it01:27
pooliepossibly comments could do it reasonably well01:29
pooliei mean, markdown could use it01:29
poolieif the rendering was independent of the request (including the user)\01:29
poolieand keyed off the place the text comes from, eg comment N on bug M01:29
poolieanyhow, later01:30
mwhudsonone of the problems with the tal:cache stuff (it seems to me) is that it doesn't let you use multi_get at all02:06
wgrantmwhudson: I've been assuming that's the entire performance problem we saw, yes.02:09
wgrantMaking a thousand round-trips is not cheap, just like with postgres.02:10
pooliemwhudson, meaning one api call that gets many results?02:10
poolies/api/network02:10
mwhudsonpoolie: yes02:10
mwhudsonthe usual 'don't do potato programming' sort of thing02:11
pooliesure02:11
poolieit seems like in theory that could be hooked in to tal02:11
pooliedepending on what it exposes02:11
wgrantIt would be nice if we could do multi-stage renders :/02:12
mwhudsonyou'd have to defer rendering parts of the template, or walk the template twice or something wouldn't you?02:12
wgrantBut TAL doesn't make that easy.02:12
wgrantSo we would probably have to do something like the current preloading.02:13
wgrantWhere we work out what we need beforehand, and poke it all into the caches.02:13
huwshimipoolie: 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
pooliehi huw02:14
wgrantRather 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
huwshimipoolie: Hey02:14
pooliehuwshimi, can you look at / think about the markdown branch too02:15
pooliei don't know if it especially needs anything from you02:15
huwshimipoolie: No problems02:15
poolieis that screenshot up to date?02:15
mwhudsonwgrant: do you know a template engine that lets you do that sort of thing?02:16
wgrantmwhudson: No02:16
huwshimipoolie: That screenshot is up to date, yes02:17
huwshimipoolie: This is the branch: lp:~mbp/launchpad/391780-markdown ?02:17
poolieyep02:17
pooliethe test looks good to me02:17
pooliemm02:17
poolieyou could add a comment specling out the meaning02:18
poolieie that the most popular tags come firstn02:18
poolieperhaps it's obvious02:18
huwshimipoolie: No, you're right02:18
huwshimipoolie: Thanks02:18
rick_h_poolie: thanks for the link and update in the bug. That's a different place than I was looking.working with.02:19
rick_h_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 <qa-ok> <trivial> <ui> <Launchpad itself:Fix Committed by rharding> < https://launchpad.net/bugs/814696 >02:20
lifelessmwhudson: wgrant: poolie: also that we don't want to do DB lookups for stuff we're then going to get from memcache.02:20
lifelessmwhudson: wgrant: poolie: the whole template-view interaction is brittle here02:20
mwhudsonyeah02:20
wgrantYeah.02:20
wgrantParticularly since the BugMessages are actually subviews.02:20
mwhudsoni've been very suspicious of passing anything other than dumb data to templates02:20
wgrantDoing a pipelined render would be much nicer, but no :(02:20
mwhudsons/been/become/02:21
poolieok02:21
pooliewe can worry about it later02:21
poolieor not02:21
poolie:)02:21
pooliehuwshimi, i'm not a very reliable reviewer for the js stuff02:21
huwshimipoolie: No problems. I spent quite a bit of time chatting to wallyworld about that anyway02:22
poolieaside from that it looks good02:22
pooliei'm keen to see the results live02:22
pooliegood on you for deleting those horrible doctests02:22
pooliehave a badge :)02:22
pooliewhat is the actual rule, if any, for tal indentation?02:23
wgrantNothing special for TAL. You mean XML/HTML?02:23
poolieyes02:24
rick_h_huwshimi: any reason not to make the taglist stuff a module with ATTR, initialize, etc?02:25
wgranthuwshimi: CSS is somewhat broken.02:25
wgranthuwshimi: https://bugs.qastaging.launchpad.net/launchpad/+bug/123402:25
_mup_Bug #1234: Gina is an unmaintainable mess of command line options, environment variables and shell scripts <lp-foundations> <Launchpad itself:Fix Released by debonzi> < https://launchpad.net/bugs/1234 >02:25
wgranthuwshimi: status/importance are blue02:25
pooliehuwshimi, can i see your current theme things some time?02:26
huwshimirick_h_: I'm not quite sure what you mean, care to elaborate?02:27
huwshimiwgrant: ick!02:27
huwshimipoolie: 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 soon02:28
rick_h_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.js02:28
lifelessmwhudson: excellent, the meme is spreading02:28
rick_h_see http://yuilibrary.com/yui/docs/base/ for the YUI docs of the pattern02:28
rick_h_so you'd end up with more var tagcloud = new TagCloud({any: settings});02:29
rick_h_it allows for others to extend and customize later, more OOP version of things02:30
huwshimirick_h_: No reason other than ignorance02:30
rick_h_huwshimi: ok, sorry, a bit new. But if you wanted review I'd definetely say to head down that route.02:30
rick_h_overlay for instance is a good example02:31
rick_h_there's a base, and several extentions that are used02:31
rick_h_extensions that is02:31
wgranthuwshimi: Ah, the stylesheets are combined in the wrong order02:31
huwshimirick_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
rick_h_huwshimi: totally understand, been there done that02:32
wgranttypography.css is included later, and it sets link colours that override colours.css02:32
huwshimirick_h_: But, I'll take another look02:32
wgranthuwshimi: Should I roll this back?02:32
wgrantOr do you want to fix quickly?02:32
rick_h_awesome, let me know if you need a hand with anything and I'll be happy to help in the morning02:32
huwshimiwgrant: I can fix quickly02:32
huwshimirick_h_: Thankyou02:32
* rick_h_ is heading towards bed here02:33
wgranthuwshimi: Needs to be landed in the next three hours, so not completely urgent.02:33
huwshimiwgrant: That's ok, I'm on it02:33
wgrantThanks.02:34
huwshimiwgrant: What should I do with these changes? Commit to the same branch and lp-land?02:43
wgranthuwshimi: Ideally customising the commit message in lp-land to something sensible, but yeah, that sounds reasonable.02:44
huwshimioh breakages02:47
wallyworld___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 namespaces02:47
poolielifeless,  is there a timeline matcher?02:47
lifelesspoolie: not really02:48
huwshimiwallyworld___, 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
lifelesspoolie: closest is the underlying matcher of BrowsesWithQueryCount which doesn't use the timeline, it uses a custom storm filter instead02:48
wallyworld___huwshimi: rick_h_: so the preference moving forward is to use more of the yui component and widget framework for new stuff02:48
huwshimiwallyworld___: Is the component still appropriate for this?02:48
wallyworld___but for simple refactoring, it think "whatever works" is fine02:48
wallyworld___huwshimi: so, we are talking about the bug tags stuff?02:49
huwshimiwallyworld___: Yeah02:49
wgrant-p 543202:49
wgrantBlah02:49
wallyworld___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 code02:50
huwshimiwallyworld___: If you say that I'm not going to fix it :)02:51
huwshimiMostly cause I would like to finish with this bracnh02:52
huwshimibut very happy to fix it if it means doing it right02:52
wallyworld___huwshimi: i'm not sure what value it would add for the effort involved. but as a learning exercise....02:53
huwshimiwallyworld___: Maybe I'll consider it a lesson learned for next time :)02:55
wallyworld___huwshimi: sure. fwiw, as i said, i would have done it the same way, since it was refactoring existing code and was a simple change02:56
rick_h_wallyworld___: thanks for the info02:57
rick_h_the stuff I've been doing and seen most of is the YUI module stuff02:57
rick_h_so it just struck me as odd when I peeked at it02:58
wallyworld___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 base02:59
wallyworld___rick_h_: then there's all the other lp javascript, which is mainly the procedural stuff03:00
wallyworld___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 stuff03:00
rick_h_yea, overlay, inline editor, etc.03:00
rick_h_yea, I had heard that, which I +1 :)03:01
rick_h_I'm a bit of a YUI fanboi so happy to be working with this stuff03:01
wallyworld___rick_h_: yep, that's all the lazr-js stuff which was written to be a reusable js lib and formerly packaged separate to lp03:01
wallyworld___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 code03:02
wallyworld___into the lp tree03:02
rick_h_ah, yea I saw some bzr log stuff for "merge in lazr"03:02
rick_h_when I tried to chase some older history items for it03:02
wallyworld___yeah, we did that at the last epic, in july03:03
huwshimi'bzr lp-land' errors with this: http://paste.ubuntu.com/745525/ any thoughts?03:03
wallyworld___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 frustrating03:04
wallyworld___huwshimi: haven't seen that before03:04
huwshimigrrr03:04
lifelessyour gnome session isn't03:05
rick_h_wallyworld___: yuck, devel is currently on .0 then?03:05
wallyworld___rick_h_: use currently are using 3.303:05
lifelessI really regret not making a fuss about the desktop integration thing03:05
lifelesswe've had -lots- of fallout03:05
wallyworld___s/use/we03:05
rick_h_oh, that's right, deryck mentioned skipped 3.4 to jump to 3.5 1st qrt03:05
rick_h_qtr that is03:06
wallyworld___rick_h_: oh, i didn't know that. in that case i may drop it and stick with 3.3 till then03:06
rick_h_yea, there's a release schedule for 3.5 and deryck mentioned that would be the migration target03:06
lifelesshuwshimi: are you logged into gnome?03:06
huwshimilifeless: That's strange, I'm not running this from ssh or anything03:06
wallyworld___rick_h_: there's been a fairly major re-packaging in 3.3 -> 3.403:06
rick_h_so I'd not kill yourself on it03:06
lifelesshuwshimi: or ssh'd into the machine ?03:06
huwshimilifeless: Yeah03:06
lifelesshuh03:06
rick_h_wallyworld___: yea, I was checking out their MVC stuff which moved a few things around03:06
lifelessthat is odd03:06
lifelessdid unity crash on you or something ?03:07
wallyworld___rick_h_: the reason for doing it is that i wanted to start looking to use the mvc stuff03:07
huwshimilifeless: Things have been a bit weird today, maybe a reboot is in order03:07
rick_h_wallyworld___: yea, I'm porting backbone to the YUI MVC on my bookmark app on the side03:07
wallyworld___rick_h_: since we are embarking on a major new piece of development (the managing disclosure ui) and i wanted to look at using that03:07
huwshimibrb03:08
rick_h_wallyworld___: ah, yea it's definitely something to plan from the start from03:08
wallyworld___rick_h_: so i'm still tempted to try to get 3.4.1 working03:08
rick_h_to catch the new way of doing the events and such03:08
wallyworld___yep03:08
wallyworld___rick_h_: so you used 3.4.1?03:09
rick_h_well, let me know how it goes. I'd be curious to see it03:09
rick_h_wallyworld___: yea, 3.4.103:10
rick_h_but I started out with that, so not sure what the migration points are from 3.3, I've been porting from jquery + backbone + historyjs03:10
wallyworld___rick_h_: we have a "unique" way of packaging yui which may be part of the issue, not sure03:11
rick_h_yea, I've not gotten my head all the way around all of that yet03:11
rick_h_references and use of LEP() or something vs YUI()03:11
wallyworld___rick_h_: we basically cat selected yui js files to a big launchpad.js file03:11
rick_h_yea, I've gotten that part and added some things to that03:12
rick_h_hopefully have my auto resizing textarea widget done tomorrow and in there soon :)03:13
wallyworld___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
huwshimilifeless: It worked, then I discovered that I hadn't pushed my change but now can't run lp-land again.03:14
huwshimi(it worked, after a restart03:14
huwshimi)03:14
lifelesshuwshimi: same error?03:14
huwshimilifeless: Sorry, yes03:14
wallyworld___rick_h_: cool about the text area widget. great to have that fixed03:15
huwshimilifeless: Can I restart my keyring or something?03:15
rick_h_wallyworld___: hmm, I can't find that file03:15
rick_h_but makes sense03:15
lifelesshuwshimi: possibly, might be listnening on dbus03:15
wallyworld___rick_h_: utilities/yui-deps.py03:15
lifelesshuwshimi: have  alook for a .*keyring.* process03:15
wallyworld___rick_h_: it's run by make03:16
rick_h_bah, helps if I tell it to do it recursively03:16
huwshimilifeless: gnome-keyring-daemon?03:16
lifelesssounds like it03:16
lifelessif its dbus activated, killing it should be pretty transparent03:17
lifelessI don't know if it is03:17
wallyworld___rick_h_: it print out all the js files we want to use and these are cat'ed to launchpad.js03:17
huwshimilifeless: I'll give it a try03:17
rick_h_wallyworld___: gotcha, yea not peeked at that.03:17
rick_h_http://yuilibrary.com/forum/viewtopic.php?p=2789703:18
huwshimilifeless: Ah, that seems to have worked. Thanks :)03:18
rick_h_that seems sucky, but maybe?03:19
rick_h_lol "should be fixed in 3.5.0"03:19
wallyworld___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
rick_h_wallyworld___: well I'd hand modify the file and start small03:19
rick_h_just try to get yui concat'd to launchpad.js and get it to load on some url03:20
rick_h_and then start adding a module/two at a time03:20
huwshimioh failure03:21
wgrantFailure?03:21
wallyworld_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:21
rick_h_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 step03:22
huwshimiwgrant: Still trying to get my keyring stuff happening03:22
huwshimiso I can lp-land that change03:22
rick_h_might at least try a JS test file, .html03:22
wgranthuwshimi: :(03:22
rick_h_and see if you can just make the few files in one of those work with yui 3.4.103:22
rick_h_just load it into the html from the cdn03:22
rick_h_and see if there's anything in the modules we're writing that's harmful (like the forum post on using requires: ...)03:23
wallyworld_rick_h_: i'll see what i can do in the time i have left.03:23
rick_h_yea, have fun! off to bed for real this time.03:24
wallyworld_rick_h_: thanks. ttyl03:24
wgrantNight rick_h_.03:24
huwshimiwgrant: Ok, done, that change is running through pqm now03:26
wgranthuwshimi: Thanks.03:28
huwshimiwgrant: No problems03:29
huwshimiI don't know how but I appear to have completely broken my ssh/keyring on my computer03:39
StevenKhuwshimi: What's the issue?03:43
huwshimiStevenK: 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
StevenKWhat does ssh-add -l say?03:44
huwshimiStevenK: "Could not open a connection to your authentication agent."03:45
StevenKssh-agent should be started on login03:45
huwshimiStevenK: ssh-agent gives me output03:46
StevenKIt will03:46
huwshimiwhat I assume to be normal looking output anyway03:46
StevenKNo matter if it is running or not03:46
huwshimiStevenK: oh, right, that's helpful03:47
huwshimiStevenK: How do I get it to run then?03:47
StevenKhuwshimi: So you can logout and back in and then see if ssh-add -l behaves or you can fix it for one terminal03:47
huwshimiStevenK: I'll try the log out first03:48
huwshimibrb03:48
huwshimiStevenK: Ok, that fixed it this time. Thankyou!03:50
huwshimiI restarted a few minutes ago, but that didn't work03:50
huwshimimaybe it needed a logout rather than a restart03:50
StevenKwgrant: Can haz review? https://code.launchpad.net/~stevenk/launchpad/use-userHasPriviledges/+merge/8296704:00
wgrantStevenK: You can't spell privileged.04:01
wgrantNot "privileges"04:02
wgrants/Not/Nor/04:02
wgrantStevenK: Why isn't userHasPrivileges implemented in terms of userHasPrivilegesContext?04:03
StevenKwgrant: Because I couldn't think of a clean way to do it. Suggestions welcome.04:04
wgrantStevenK: Make isOneOfDrivers work on distroseries/productseries if it doesn't already.04:05
wgrantThen call isOneOfDrivers(context) instead of isOneOfDrivers(pillar)04:06
wgrantMm, it would also need to work for SP and DSP, I suppose.04:06
wgrantBut it's doable somehow and better than duplication.04:06
StevenKAnd make userHasPrivileges a class method?04:06
wgrantNo.04:07
wgrantIt's still an instance method.04:07
wgrantIt just calls the underlying class method with the instance's context.04:07
StevenKYou've lost me somewhere, sorry.04:07
wgrantuserHasPrivileges does basically the same thing as userHasPrivilegesContext04:08
wgrantThe logic should not be duplicated. userHasPrivileges should call into userHasPrivilegesContext04:08
StevenKOh04:08
StevenKRight04:08
nigelbDoes launchpad do something like keyword search?04:15
lifelessstatik: lol, you haven't deleted all lp mail... lists.launchpad.net :P04:19
lifelessnigelb: we don't treat some words differently, no04:19
nigelblifeless: Are there plans for something like that? Or can I just building with the API.04:20
lifelessnigelb: no, why would there be?04:20
nigelbI like how for bugzilla, I can do "bug product:Firefox" in my firefox awesome bar and see all the bugs for that product.04:20
nigelbI think most modern browsers have that feature.04:21
lifelessAh, thats totally different to keyword search :)04:22
lifelessthats a search grammar - and there are plans for that04:22
lifelesshowever, I think for awesome bar stuff you should implement it in the bar04:22
nigelbAh, right. I couldn't figure out what's the right term for it :)04:22
nigelbAll the awesome bar stuff wants is a search box into which you can put specific words for specific things.04:22
poolielifeless, can i use fixtures as contextmanagers?04:29
poolieah nm04:30
lifelesspoolie: yes04:30
poolieso it's not setUp/tearDown but setUp/cleanUp?04:31
pooliemore decoy code!04:31
poolielifeless, so is the tearDown method of ZopeViewReplacementFixture wrong?04:32
poolieit looks like it will never run04:32
lifelessyes, thats buggy04:33
lifelessit should just use self.addCleanup04:33
lifelessself.addCleanup(undefineChecker, self.replacement)04:34
poolieyes04:34
poolievery deceptive04:34
lifelessself.addCleanup(self.gsm.adapter.register, ...04:34
pooliethey're run fifo?04:34
lifelesssame as the testtools one you are familiar with04:34
lifelessthey all execute, fifo, errors are collected and raised at the end04:34
pooliesure04:35
pooliei thought it would be tearDown to be consistent with unittest and the code already in that file reinforced that misconcetpion04:35
poolieit's fine now04:35
lifelesscare to fix that bad example while you are thre ?04:36
poolieof course04:36
lifelessthanks!04:36
poolieyakkety yak04:37
lifelessdon't test back?04:40
nigelbpoolie: Whats the fun if you don't shave a couple of yaks ;)04:41
StevenKwgrant: Diff updated, can you have another look?05:16
StevenKwgrant: And I can rename the branch if the name offends you05:16
pooliewgrant, btw raw_sendmail is tested now05:24
pooliedown to the point it would normally call into zope05:24
wgrantpoolie: Nice05:25
wgrantStevenK: Let me see.05:26
pooliewgrant,  did you have any luck working out where an email.Header is being passed to raw_sendmail?05:33
poolieparanoid_email_content_validatino seems to trap it05:34
poolieoh05:34
wgrantI can probably dig up a pageid if you haven't solved it yet.05:35
poolietwo different ways to send mail, of course05:35
wgrantYes05:35
wgrantAt least05:35
pooliemaybe i should stop worrying and just flatten the mail05:35
poolie*value05:35
pooliethen we can see if it still fails05:35
lifelesswgrant: you hjad lxc puking on resolv.conf not existing ? (due to /var/run/resolvconf being awol) ?05:36
wgrantlifeless: don't think so05:37
wgrantNot in months, at least.05:37
wgrantBut not at all that I can recall.05:37
jtvwgrant: did you just move bug 887078 back from Fix Released to In Progress?05:38
_mup_Bug #887078: Builder:+history timeout <qa-ok> <timeout> <ui> <Launchpad itself:In Progress by rvb> < https://launchpad.net/bugs/887078 >05:38
lifelesswgrant: its not making /var/run/resolvconf automatically, or something05:39
wgrantjtv: From Fix Committed to In Progress. It's not done yet, AFAICT.05:40
wgrantjtv: The pages are still slow and time out.05:40
lifelesserm, not the the literal packag,e whatever makes resolve.conf on lucid by default05:40
jtvwgrant: I see.  Thanks.05:41
poolieis there a new request, and a new timeline, for each test?05:49
StevenKwgrant: Did you get distracted?05:49
wgrantStevenK: builddisasters tend to do that.05:49
lifelesspoolie: there is no strong correlation between tests and timelines05:49
wgrantRelooking now.05:49
lifelesspoolie: tests may make requests05:49
lifelesspoolie: if they do, the request gets its own timeline05:50
poolieso05:50
pooliei should clear the timeline if i want to observe it later?05:50
lifelessthe request will d that05:50
pooliemm05:50
pooliethis is the sendmail code05:50
pooliei don't know if there is a request05:50
pooliedo i need to make one?05:50
lifelessso, for that, you want to manually setup a timeline - probably easiest to call adapter.set_request_started() and its matching thing later05:51
wgrantStevenK: I am confuse.05:51
wgrantStevenK: Why not pass the context into userHasPrivilegesContext?05:51
wgrantStevenK: bugtask.target05:51
poolieok thanks05:52
StevenKwgrant: From IBugTask.userHasPrivileges?05:53
wgrantStevenK: Yes05:53
wgrantYou currently specialcase IBugTask in userHasPrivilegesContext05:54
wgrantWhy not specialcase series?05:54
wgrantSo you are actually passing the context in there.05:54
wgrantNot a task.05:54
StevenKwgrant: IE, if IProductSeries.providedby() ?05:54
wgrantrole.isOwner(context.pillar) or role.isOneOfDrivers(context) or role.isBugSupervisor(context.pillar)05:55
wgrantprobably05:56
wgrantRemove the Assuming that isOneOfDrivers works on SP/DSP05:56
wgrantWhich it might not.05:56
StevenKI can test this quickly, given wallyworld__'s bitching.05:57
StevenKHey look, he has two underscores.05:57
StevenKwgrant: Seems to work fine.05:59
StevenKwgrant: Anything else jump out at you?06:00
=== almaisan-away is now known as al-maisan
wgrantReally? It shouldn't work, AFAICT.06:00
StevenKwgrant: TestBugTaskUserHasPriviliges works fine06:01
wgrantEven for DSP and SP targets?06:01
wgrantNote that we don't want the pillar.06:02
StevenKwgrant: DSP/SP don't have drivers ...06:09
wgrantStevenK: No, which is why it probably won't work.06:10
wgrantStevenK: They need to use the series/pillar drivers.06:10
wgrantStevenK: It's probably better to make them have drivers.06:10
wgrantBy adding a drivers property.06:10
pooliewgrant, ok https://code.launchpad.net/~mbp/launchpad/885972-sendmail-timeline/+merge/82963 should fix your timeline thing06:10
poolieafaict06:10
wgrantpoolie: It's safely unicodable?06:10
StevenKwgrant: And check distribution for DSP and both distribution and series for SP?06:11
poolieone line of actual fix, ~300 lines of diff to make it testable06:11
wgrantStevenK: SP should be able to just check distroseries06:11
StevenKpoolie: Welcome to Launchpad.06:11
pooliewgrant, i think so: it provides a __unicode__ method that tries to take header encoding into account06:11
wgrantStevenK: since distroseries should inherit distribution06:11
pooliefor fairly low values of 'safe'06:11
StevenKwgrant: You'd think.06:11
wgrantpoolie: Ah, missed the not isinstance.06:11
wgrantWas worried it could be a shittily encoded bytestring.06:11
wgrantBut that indeed looks reasonable.06:11
poolieyeah i thought of that too06:12
wgrantpoolie: (un)registerUtility behaves sensibly if there's already one?06:23
poolieyeah apparently it stacks them internally06:23
=== al-maisan is now known as almaisan-away
poolieit is not very well documented06:23
wgrantAha, handy.06:24
poolie:/06:24
poolieto some extent i'm going to leave that for whoever uses it next06:25
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
nigelbI may be imagining things, but did Karl Fogel work on Launchpad at some point?07:39
nigelbHis name and nickname seem somewhat familiar.07:40
lifelessyes he did07:40
lifelesscommunity/communication mgr07:40
lifelesswell know for svn07:41
nigelbAha07:41
nigelbYeah, that and the book that he wrote.07:41
nigelbGerv from Mozilla keeps posting excerpts from his book to Mozilla Planet and I keep thinking "Why am I familiar with this name"07:41
pooliehi nigelb07:46
* wgrant glares threateningly at yuixhr07:48
* wgrant prepares to disable.07:48
nigelbHey poolie07:54
nigelbwgrant: It didn't disable itself with the glaring :)07:54
mrevellHello09:11
nigelbMorning mrevell09:12
lifelessrvba: hi09:18
lifelessrvba: I got your query09:18
rvbalifeless: hi09:18
lifelessrvba: cachedproperty injection is the general answer to this sort of thing09:18
lifelessrvba: see BranchCollection for some of the more complex examples that are around09:19
rvbalifeless: yeah, but as soon as I materialize the object, the query gets executed so unless I remove the reference, cachedproperty won't help.09:19
lifelessgot a backtrace of that query being triggered ?09:20
rvbaNo… but I can work out an example for you if you want.09:21
lifelessrun your test with LP_DEBUG_SQL_EXTRA=109:21
lifelessor visit a page with ++oops++09:21
lifelessthe test is probably easiest09:21
rvbaOh, you mean you simply want the query itself.09:21
lifelessno09:21
rvbaOk, hold on a sec.09:21
lifelessthe _EXTRA makes it spit out backtraces09:22
rvbak09:22
=== almaisan-away is now known as al-maisan
rvbalifeless: https://pastebin.canonical.com/56131/09:27
rvbalifeless: 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:28
lifelessrvba: cool, thanks09:29
lifelessrvba: so, that backtrace tells me a lot09:30
lifelessrvba: what do you get from it ?09:30
rvbaThe problem is the backreference from preview_diff to bmp.  When the previewdiff is created it has to look up the related bmp object.09:31
lifelessnope09:32
lifelessthats not what happens ;)09:32
rvbaah?09:32
lifelessthe quest is triggered at line 166 of the pastebin09:32
lifelessbah09:32
lifelessquery, line 16509:32
lifelessdiff_lines_count is accessed at line 156 of the backtrace09:34
rvbaHum, security check…09:34
lifelessbingo09:34
lifelessthe security check is triggering the backref09:34
lifeless__init__ or _storm_loaded are not09:35
lifelessrvba: now, if you are loading the bmp as part of the eager loading09:35
lifelessyou can solve this by injecting the bmp into the object09:36
lifelessthis involves09:36
lifelessreplace the storm reference with a cached property09:36
lifelessand set it09:36
lifeless(or you could poke under the storm hood, but so far we haven't done that)09:36
lifelessfor instance09:36
rvbaThis reference is also used else were and cachedproperty cannot be 'set', right, only populated so to speak.09:38
lifelessrvba: http://pastebin.com/vbiezhwF09:38
lifelessrvba: it can be with gavins patch09:38
lifelessrvba: or you can update the other call sites, which is arguably better09:38
rvbaRight, I think updating the other call sites sounds better to me.09:39
lifelessrvba: does this help?09:40
rvbalifeless: it does, thanks!09:40
lifelessrvba: backtraces ftw :)09:40
rvbaIndeed!09:40
rvbalifeless: btw, by gavins patch you mean ~allenap/launchpad/cached-property-bug-893074?09:42
lifelessyeah09:42
rvbaThis will just prevent one from setting a cachedproperty and thinking it's all good right?09:43
lifelessactually yes :)09:43
allenapThere was a *lot* of test fallout from that patch :-/09:43
lifelessso update the callers09:43
lifelessallenap: win :)09:43
rvbaOkay, just checking ;)09:43
rvbalifeless: I could also have the cachedreference be called _branch_merge_proposal and only change the callsite in security.py.09:46
lifelessrvba: indeed09:54
lifelessrvba: however that would then make semi-invisible skew09:54
lifelessrvba: better I think for all callsites to use the one attribute09:54
rvbalifeless: Good point.09:55
rvbalifeless: 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:12
rvbaI think it's cleaner if branch_merge_proposal is the reference that you can get/set without trouble.10:13
jtvAnyone know what's up with staging?10:13
jtvIt's been saying “code update in progress” for a suspicious length of time.10:13
wgrantjtv: staging or qastaging?10:14
jtvstaging10:14
wgrantHmm.10:14
wgrantThat shouldn't be down, AFAIK10:14
wgrantqastaging is down for a DB upgrade.10:14
* wgrant checks.10:14
wgrant2011-11-22 09:10:51 CRITICAL lpmain_staging_slave has transaction by postgres open 0:02:01.18076310:15
wgrant2011-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
wgrantGet a LOSA to retry the update.10:15
wgrantTue Nov 22 09:10:51 UTC 2011 ERROR: Failed to run full-update.py10:15
=== al-maisan is now known as almaisan-away
lifelessrvba: mmm10:20
lifelessrvba: do you agree that all the sites accessing it should use one attribute name10:21
lifelessrvba:  the overhead of the (very few) sites that set it doing it differently seems inconsequential to me10:21
rvbalifeless: 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
lifelessyes10:22
lifelessone to write one to read10:22
rvbaSo your argument is that it gets read much more often than set right?10:23
lifelessone hopes10:23
rvbaMy argument is this: setting the cachedproperty leads to silent data fuck up ;).  But Gavin's patch will fix this.10:23
lifelessindeed :>10:24
lifelessrvba: also, you can tell zope to not let writes to that attribute, if you want to10:24
wgrantInteresting things also happen when a cachedproperty is used in a Storm query.10:24
lifelessrvba: or you can set a set for it10:24
rvbalifeless: right, that would be a good solution.10:25
lifelessrvba: as wgrant notes, you need to use the storm reference in queries (though you shouldn't do that anyhow- should be using the _id10:25
wgrantlifeless: Mm, that's a matter of opinion.10:26
lifelesswgrant: perhaps, but I've yet to see a compelling argument for using the reference itself10:26
wgrantIt's type-safe and I've yet to see a compelling argument for using the ID.10:27
wgrantExcept that using the reference fails in a couple of cases, which are bugs.10:27
lifelessusing the reference is discouraged by storm upstream; it fails in some cases and is ambiguous at best in others.10:28
rvbaToo we can't explicitly define a setter for a cachedproperty à la cachedproperty(_get_branch_merge_proposal, _set_branch_merge_proposal)10:32
rvbas/Too/Too bad/10:34
jtvwgrant: I seem to be back for the time being.  Any news on staging?10:36
rvbanumber of (storm references in queries + places where the field is set) > number (places where the field is read)10:41
rvbaThis is in favor of having the cachedproperty named _branch_merge_proposal.10:43
=== gmb changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: gmb | Critical bugtasks: 292
wgrantjtv:10:46
wgrant21:14:57  * wgrant checks.10:46
wgrant21:15:40 < wgrant> 2011-11-22 09:10:51 CRITICAL lpmain_staging_slave has transaction by postgres open 0:02:01.18076310:46
wgrant21: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
wgrant21:15:41 < wgrant> Tue Nov 22 09:10:51 UTC 2011 ERROR: Failed to run full-update.py10:46
wgrant21:15:46 < wgrant> Get a LOSA to retry the update.10:46
jtvThanks.10:46
jtvNot much luck with the retry though, evidently.  :(10:46
wgrantI didn't ask for a retry.10:51
wgrantBecause gnuoy was busy with other stuff.10:51
gnuoyjtv, just kicking it off again now10:52
jtvgreat, thanks10:52
stubDo 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.10:58
=== matsubara-afk is now known as matsubara
lifelessrvba: the other cases we have have the cachedproperty be branch_merge_proposal11:15
lifelessrvba: I humbly suggest that the difference isn't big enough to outweight consistency11:15
rvbalifeless: okay then ;) … I hope the test suite will catch it if the cached property is used in a query.11:16
lifelessrvba: I suggest grepping11:17
rvbaOf course I'll do that.11:17
lifeless:)11:17
rvba:)11:17
rick_h_morning11:48
nigelbMorning rick_h_11:51
rvbaHey rick_h_.11:52
jmllifeless: 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.aspx11:53
rick_h_uh oh, ORM debates this early?11:54
nigelbheh11:54
nigelbEarly is all about perspective.11:55
rick_h_so true11:55
rick_h_woot! changes landed and are live!11:55
* rick_h_ does a little happy dance11:55
rick_h_meh, I think before people write ORM articles they need to use SqlAlchemy for a big project first12:04
lifelessrick_h_: 0100 :P12:04
rick_h_too many bad ones cause people to write this stuff12:04
rick_h_and lose the idea that ORM == "no need to know SQL"12:04
lifelessa terrible idea to be sure12:06
nigelbrick_h_: Dear god. SqlAlchemy is scar-inducing :)12:13
nigelbI sometimes prefer writing pure SQL to SqlAlchemy :)12:14
rick_h_lol, what? How so?12:14
rick_h_oh man, when I first tinkered with Python I put SA is one of the top 5 reasons to use Python12:14
nigelbIts awesome, etc.12:14
gary_posterHey 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.0pre112:14
nigelbJust that it takes a while to settle in.12:15
rick_h_yea, that's true12:15
rick_h_but all the good frameworks do12:15
gary_posterStevenK Making a custom Twisted release requires changing files12:15
StevenKgary_poster: Hm, lemme check.12:15
gary_posterIIRC12:15
rick_h_I find if it's too easy to start, you'll grow out of it before the end of the project12:15
StevenKgary_poster: But 11.1.0 is a REAL release!12:15
gary_posterStevenK, then maybe you did not push up the changes?12:16
gary_posterto the download-cache12:16
StevenKgary_poster: But it passed ec2!12:16
gary_posterStevenK...12:16
nigelbrick_h_: heh, agreed.12:16
nigelbStevenK: Maybe you didn't test for it? :D12:16
gary_posterlemme look at my download-cache again12:16
StevenKnigelb: The download-cache is not seeded on ec2 instances, if buildout works and the tests pass, the upgrade is good.12:17
StevenKnigelb: That is, "troll failed"12:17
nigelbStevenK: Damn. I'll blame travel exhaustion for it.12:17
StevenKgary_poster: It's here in my download-cache12:17
nigelbStevenK: I was "closer" to you for a weekend :)12:18
StevenKgary_poster: r40112:18
gary_posterStevenK, 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 :-P12:18
gary_posterThanks StevenK12:18
StevenKThat's what you get for using emacs to do your dirty work.12:19
gary_poster:-P12:19
nigelbs/to do your dirty work//g12:19
StevenKnigelb: Oh?12:19
nigelb:D12:19
nigelbStevenK: Kuala Lumpur!12:19
rick_h_lol, from ORM flames to emacs...on fire today12:19
nigelbAmazing weekend with Mozilla people for Mozcamp Asia.12:20
StevenKnigelb: Pfft, like Australia was that much further ...12:23
nigelbStevenK: Well... it made sense to keep an Asia event *in* Asia... ;)12:23
nigelbHow far is Australia from KL?12:24
* nigelb checks12:24
nigelbInteresting. Not too far.12:26
jmlrick_h_: have you read the article?12:28
nigelbjml: It was an interesting comparison.12:28
nigelbI bookmarked to finish reading later.12:28
rick_h_jml, I gave it a run through skimming12:28
jmlnigelb: yeah, it's on my readitlater list12:28
rick_h_basically seems to make the general argument people start using and ORM and refuse to lose and give it up12:28
rick_h_thus enduring more pain and suffering12:29
jmlrick_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:30
rick_h_no, I'm saying that people get fussy over ORMs, but what ORM you use can great change your outlook12:31
rick_h_having used several ORM in PHP land and Python land12:31
rick_h_things like the verbosity stuff he talks about is better in python12:31
rick_h_along with things like the ability of Python to add/modify objects at will make it more flexible for a lot of ORM tricks12:32
rick_h_and SA improves a lot because it's two layers, the expression layer makes crazy things possible12:32
rick_h_while the ORM layer makes typical things pretty and easy12:32
rick_h_but most ORM solutions don't break down nicely like that12:32
rick_h_but SA has its own pain points for sure12:33
nigelbI've always thought it was a compromise of the lesser of the two evils.12:33
nigelbAnd that depends on the situation.12:34
rick_h_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 it12:34
rick_h_which I think is very important12:34
nigelbOh.12:34
nigelbSA excepts developers to abstract SA out of their operations?12:35
rick_h_well, I argue that you write an API layer that your app accesses and you wrap all your SA12:35
rick_h_that way you can swap out the back end/what SA is doing without breaking your app12:35
rick_h_http://python.mirocommunity.org/video/4392/pyohio-2011-sqlalchemy-tutoria12:36
nigelbHrm. Fair.12:36
rick_h_for thoughts on it :)12:36
nigelbI have seen projects doing exactly that.12:36
nigelbhttps://crash-stats.mozilla.org/ for one does that.12:36
nigelbBackend is something python-ish and SA.12:36
rick_h_yea, I think that's the only way to go and really solves a lot of problems with DRY and such12:36
rick_h_and makes the breaking down to SQL and such less icky12:37
nigelbThis changes my POV for a few things. Now I need to go back and think things through :)12:37
gary_posternigelb, 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
gary_posterhttp://nathanmarz.com/blog/clojure-or-how-i-learned-to-stop-worrying-and-love-the-paren.html has a related argument.13:03
* gary_poster retreats back into cave, with a madman hair wig on13:04
jmlgary_poster: I think Haskell has similar stuff13:04
jmlgary_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:05
rick_h_jml: heh, yea. I wanted to watch some YUIConf videos so scheduled it as group viewing at CHC this week13:06
rick_h_make everyone else suffer my wishes! bwuhahaha13:06
jmlCHC?13:06
rick_h_sorry, CoffeeHouseCoders, weekly meetup I run locally for devs13:06
rick_h_http://coffeehousecode.appspot.com/13:06
rick_h_detroit branch13:06
rick_h_gary_poster: yea, that second link is a lot of stuff I'd do with SA13:07
rick_h_creating almost little sql "widgets" and then using them into larger queries and such later on13:07
jmlrick_h_: you can do that in storm, fwiw13:08
rick_h_yea, I look forward to getting into some storm stuff later on.13:08
rick_h_I know I gave it a look when it first came out and really didn't follow it afterwards13:08
rick_h_well, first went OSS public I guess vs "first came out"13:08
rick_h_I'm still floored people suffer through the django orm though ugh13:09
gary_posterjml, 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
rick_h_gary_poster: I like though that this clojure stuff keeps things sql'y. Keep people from getting away from that idea13:09
jmlgary_poster: :D13:09
gary_posterright13:09
rick_h_ah, imapfilter running now. This ought to help with all these lists13:10
jmlgary_poster: yeah, I've got to disassemble a whiteboard this weekend, might have this in the bg then :)13:10
gary_postersounds perfect jml :-)13:10
bacsinzui: ping14:08
sinzuihi bac14:08
rick_h_do we have a sprite with a spinner not on a white background? like transparent?14:08
deryckrick_h_, no, I don't think we do.  We only have spinner.gif or whatever it's called, that is over white.14:10
rick_h_yea, ugh. Ok14:10
dobeyderyck, rick_h_: just do one in CSS14:18
rick_h_dobey: http://fgnass.github.com/spin.js/ import this? :)14:19
rick_h_dobey: when I tried to do a css3 spinner it had cross browser issues14:19
rick_h_and a TON of vendor prefixing fun14:19
dobeyeh :)14:20
deryckyeah, css 3 spinners are just showing off.  And painful.  We can get a new image if you need.14:20
rick_h_actually, I use it on my bookie plugin, but the animation freezes while the ajax request takes place14:21
rick_h_yea, I figured I'd check on the stand up the best way to move forward on it14:21
rick_h_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 forward14:21
=== matsubara is now known as matsubara-lunch
rick_h_http://www.yuiblog.com/blog/2011/11/15/yui-3-5-0-roadmap-and-timelines/14:40
rick_h_deryck: ^14:40
abentleyderyck: lp:~abentley/launchpad/history-model14:45
deryckabentley, ok, will take a look now.14:46
abentleyqastaging looks unhappy.  Known issue?14:48
deryckabentley, not to me.  Not sure if others know.14:49
rvbaabentley: deryck The update failed this morning at 09:10:51 UTC14:50
rvbagnuoy has kicked it off again after that.14:50
abentleyrvba: Cool, thanks.14:50
rvbas/has/14:50
rvbaNot sure were we're at now… gnuoy?14:51
gnuoyrvba, hi14:51
=== 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
rvbagnuoy: hey, can you tell us where we're at with qastaging's update?14:52
gnuoyhmm, it hasn't logged anything for the past few hours14:52
deryckabentley, a ha!15:01
deryckabentley, the event name has changed since it's a new object.  It's now:  buglisting-model:fields-changed15:01
abentleyderyck: I don't follow.  The event is still being constructed using this.constructor.NAME + ':fields-changed' where NAME is buglisting-config-util15:03
deryckabentley, no, because NAME is the buglisting model object.  the event is fired from the new object, not buglisting config util objects.15:04
abentleyderyck: Ah, so this is a keyword-this trap.15:05
deryckabentley, right, in YUI's event handling "this" always gets bound back to the object firing the event.15:06
gary_postersinzui, the "project group report" we talked about is the +milestones page for project groups, right?15:06
deryckabentley, or rather to the host object, since the event is the ATTR change event.15:06
abentleyderyck: Okay, adding "this" to the end of .after() fixed it.15:07
abentleyderyck: thanks!15:08
deryckabentley, 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
deryckabentley, np!15:08
sinzuigary_poster, yes, you can see an example of the report that is being used: https://launchpad.net/landscape-project/+milestone/11.11.215:17
gary_posterthanks sinzui15:17
rick_h_gmb: if you get a quick second: https://code.launchpad.net/~rharding/launchpad/bug_814697_missing_spinner/+merge/8303415:28
abentleyderyck: btw, the trick of setting a global, e.g. "debug_me=true" and doing if(debug_me){debugger;} works pretty well.15:32
=== matsubara-lunch is now known as matsubara
deryckabentley, ok, nice.  I'll have to remember that.15:34
deryckgmb, I also have a branch that needs review, if you're not too overloaded.15:36
gmbrick_h_, Sure15:36
gmbderyck, I'm not. I'll take a look after rick_h_'s15:36
deryckgmb, awesome, thanks!  https://code.launchpad.net/~deryck/launchpad/field-visibility-persistence-891780/+merge/8303715:37
gmbsinzui, 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 <bugs> <comments> <regression> <Launchpad itself:Triaged by gmb> < https://launchpad.net/bugs/867593 >15:37
deryckabentley, 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 <Launchpad itself:In Progress by abentley> < https://launchpad.net/bugs/890745 >15:37
sinzuigmb, lifeless assigned a bug regarding comment numbering to you, tagged it as regression, then raised it to critical. He wanted your opinion...15:37
abentleyderyck: that's right.15:38
deryckabentley, ok, thanks.15:38
gmbrick_h_, approved.15:38
sinzuiBut 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 fix15:38
rick_h_gmb ty15:38
sinzuigmb, so I am channeling lifeless and asking for you opinion of all bugs assigned to you tagged with "comments"15:39
gmbsinzui, 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 <merge-deactivate> <openid> <regression> <users> <Launchpad itself:In Progress by gmb> < https://launchpad.net/bugs/881019 >15:41
sinzuigmb, This is the bug I saw 45 minutes ago https://bugs.launchpad.net/launchpad/+bug/89337515:43
_mup_Bug #893375: Comment order wrong and not all comments shown <comments> <regression> <Launchpad itself:Triaged> < https://launchpad.net/bugs/893375 >15:43
* gmb looks15:44
sinzuigmb: you have my sympathies with that bug. I suspect the issues will not really be fixed until this feature is implemented with ISD: bug 77010715:44
_mup_Bug #770107: launchpad relies on login.ubuntu.com but does not sync email addresses <email> <feature> <openid> <Launchpad itself:Triaged> < https://launchpad.net/bugs/770107 >15:44
gmbsinzui, 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:46
gmbThanks for the clarification.15:47
gmb(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
sinzuigmb: 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:49
gmbsinzui, 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
sinzuigmb ... 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 object15:50
sinzuigmb so email  is the link between person and account?15:50
gmbsinzui, 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 <merge-deactivate> <openid> <regression> <users> <Launchpad itself:In Progress by gmb> < https://launchpad.net/bugs/881019 >15:54
abentleyderyck: 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
gmbUnfortunately, it _might_ be too inefficient. Not sure yet because I haven't got the test suite passing.15:54
deryckabentley, agreed.  Did I not do this somewhere?15:55
abentleyderyck: Yes, in the getter and setter for BugListingConfigUtil.field_visibility15:55
sinzuigmb: Yes, I was not certain it would scale.15:57
deryckabentley, do you mean the valueFn?15:57
abentleyderyck: yes, the valueFn and the setter.15:57
deryckabentley, 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:58
abentleyderyck: If nothing was defined, I think we should use LP.cache.field_visibility.15:59
deryckabentley, I guess that's fine.16:00
abentleyderyck: Those are the setting that were used to render the initial view.16:00
abentleyi.e. server-side.16:00
deryckabentley, 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:01
deryckabentley, 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:02
deryckabentley, 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
abentleyderyck: But you do sniff the cache, implicitly, by using get('field_visibility_defaults'), which hits the cache.16:03
abentleyderyck: 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
deryckabentley, 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:05
abentleyderyck: okay.  It wasn't clear to me that the valueFn was intended to be a fallback.16:07
deryckabentley, yeah, that's all I was trying to say, in that the common case, and in current template usage, it's never hit.16:07
deryckabentley, 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:08
sinzuiDoes anyone know of a way query users to know if someone was former canonical employee?16:09
sinzuiAh, I had to type that to remember I can check the TeamMembership deactivated status16:09
abentleyderyck: I'd rather make field_visibility and field_visibility_defaults mandatory.  We can just pass the LP.cache in as the config object.16:10
deryckabentley, as the config or as part of the config?16:13
abentleyderyck: I meant as the config, but we could pass it in as part of the config instead.16:14
deryckabentley, 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
deryckabentley, but what is the advantage of passing it in, versus sniffing for it?  We only need it in a couple places.16:14
abentleyderyck: I don't know what a "srcNode type config" is.16:15
abentleyderyck: decoupling and explicitness.16:15
deryckabentley, 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
abentleyderyck: I don't know what srcNode is.16:16
deryckabentley, srcNode is what the widget framework uses to know where on the page to stick the widget you're rendering.16:17
derycksrcNode: Y.one('#mydiv-for-this-widget')16:17
deryckthat ^^ goes in config usually, beyond any custom attrs.16:17
abentleyderyck: 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
deryckabentley, right.16:18
deryckabentley, also, can we just pass around values in the config, rather than the whole cache.  and maybe that's what you meant.16:18
deryckso field_visibility: LP.cache.field_visibility rather than config.cache = LP.cache.16:19
deryckabentley, hmmm, well I guess for the model object the cache actually does make sense as the config....16:20
deryckabentley, sorry, I'm stuck thinking about BLCU.16:20
abentleyderyck: 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:20
deryckabentley, 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
deryckabentley, but if you need more from the cache, using it as the config is fine.16:21
gmbderyck, approved, with comments.16:33
deryckgmb, thanks!  Good suggestions all the way around.16:35
=== 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
james_wif I've got one of the new hash-style oops that should still be findable via lp-oops shouldn't it?18:21
rick_h_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
lifelessyes, if it has synced to devpad18:22
lifelessproduction doesn't have the rabbit config toggled on yet (liam is still getting the glitches out of monitoring)18:22
james_wyep, just wanted to make sure I wasn't sat here hitting refresh for nothing18:22
deryckrick_h_, did you include node-event-simulate in the requires line for the test module?18:23
rick_h_yea18:23
rick_h_and if I manually interact with the html on the page the event fires18:23
rick_h_so everything seems "hooked up"18:23
rick_h_but running node.simulate('keyup') or 'valueChange' isn't doing me any good for automated testing18:23
deryckrick_h_, so everything in the basic example here matches what you're doing?  http://yuilibrary.com/yui/docs/event/index.html#simulate18:25
rick_h_deryck: yea, loggerhead is hating me, but the relevent bits: http://paste.ubuntu.com/746203/18:27
rick_h_oh, nvm18:30
rick_h_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 it18:32
rick_h_http://paste.ubuntu.com/746211/ changing to that works18:33
deryckrick_h_, alrighty then.  there you go. :)18:34
rick_h_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 seeing18:50
deryckrick_h_, what are you wanting to count?  how many assertions you make?18:52
rick_h_yea, sanity check because I've got to do some timeout waiting18:52
rick_h_so want to verify that there  were 3 assertions in this test kind of thing18:53
=== jcsackett_ is now known as jcsackett
deryckrick_h_, do you know about "waits"?  Are you using that, or actual setTimeouts?18:54
rick_h_yea, I'm using a setTimeout right now. I guess if I go to wait/resume it'd "catch" the case I'm looking for18:55
rick_h_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 empty18:56
deryckrick_h_, yeah, I think it would be better to use waits then count the assertions.18:59
rick_h_gotcha, thanks18:59
=== jcsackett_ is now known as jcsackett
rick_h_deryck: for this plugin, is there a good place to document it at?19:46
rick_h_the doc directories all seem really just doctests19:46
deryckrick_h_, the dev wiki is where we tend to put pure documentation.19:47
deryckrick_h_, and we usually do a launchpad-dev email to say "hey I did this, it's available, and docs are at $LINK" :)19:47
rick_h_ah ok, was looking for things like usage examples and such for the lazr stuff in the code19:48
rick_h_deryck: ok, phew...let my first big MP get a thrashing! https://code.launchpad.net/~rharding/launchpad/bugfix_891735/+merge/8306820:19
deryckrick_h_, that's a nice size change. :)20:20
deryckrick_h_, can you hunt around for another reviewer.  Trying to get stuff landed I'm behind on.20:21
rick_h_little better than one liners so far?20:21
rick_h_sure thing20:21
deryckrick_h_, but if no one else can do it, I will, certainly.20:21
rick_h_understand, was an FYI20:21
rick_h_come out reviewers come out wherever you are please20:21
rick_h_fresh meat to hack up on20:21
rick_h_jcsackett abentley or should I ping anyone else in particular? no rush on things20:22
abentleyrick_h_: I'm happy to look at it.20:22
rick_h_awesome, thanks!20:24
abentleyrick_h_: Could you add a screenshot, please?20:24
rick_h_abentley: I guess, it just looks like a textarea20:25
rick_h_I don't dress anything up at all20:25
rick_h_a movie perhaps?20:25
rick_h_or would that be a bit much20:25
abentleyrick_h_: We usually request screenshots for UI changes, but if there's nothing to see, that's okay.20:25
rick_h_yea, it's invisible until you use it20:26
abentleyrick_h_: lifeless has a good point.  We already have auto-sizing behaviour for bug descriptions, just not on bug creation.20:31
rick_h_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 workflow20:33
abentleyrick_h_: I thought you were referring to the bug title.20:33
rick_h_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 this20:33
rick_h_no, in the pre-impl note?20:34
abentleyrick_h_: It seems pretty unfortunate to have different widgest for creating text fields vs editing them, don't you think?20:35
rick_h_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 ui20:36
rick_h_which is a bit hard to do with the inlineedit module20:36
rick_h_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 textareas20:36
rick_h_but it's very tied in currently20:37
abentleyrick_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
rick_h_inconsistent how?20:39
rick_h_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 at20:40
abentleyrick_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
rick_h_I didn't want to make it global without getting it in front of more people/eyes20:40
rick_h_abentley: yes, true. but this is only resizing, while the other is an implmentation that includes some resizing logic20:41
rick_h_but really deals with a lot more20:41
rick_h_some parts are definitely something to add to the inlineedit, support for min/max heights and such20:41
rick_h_but it's really a lot more than just a resizing widget20:42
rick_h_and stripping that logic out to make it global was deemed more work than it's worth at the moment20:42
abentleyrick_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 <bugs> <qa-ok> <regression> <ui> <Launchpad itself:Fix Released by rharding> < https://launchpad.net/bugs/723417 >20:47
flacosterick_h_: wouldn't be possible to implement this as YUI plugin?20:47
flacostethat could be used standalone like here20:47
abentleyflacoste: he has.20:47
rick_h_yes, that's how it's implemented20:48
flacosteand used on the textarea editor20:48
deryckI chatted with him about the inline editor.20:48
flacostethen couldn't use this plugin in the textarea inline editor?20:48
rick_h_long term it's possible. Right now there isn't clear separation of that in the inline editor20:48
flacosteright20:48
rick_h_so it needs some updates to be able to use this plugin as a base for multiline20:48
flacostethat's well possible20:48
deryckabentley, flacoste -- the inline editor tightly couples the single line and multi-line editor to the same widget.20:48
rick_h_right20:48
deryckthat's the tech debt, really.20:49
deryckit's not like he can just plug the text area, which is what I also suggested.20:49
flacosteright20:49
flacostethe inline editor needs some love20:49
deryckit's a lot of work to make the inline editor clean first.20:49
deryckright20:49
deryckonce the inline editor is cleaned up, then yes, it would be trivial to plug the text area for resize.20:50
flacosteso we are all in agreement then!20:50
flacostethis approach is sane20:50
rick_h_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 process20:50
flacosteonce we clean the inline editor mess20:50
deryckyeah.20:50
flacostewe can use this new clean plugin to remove the coupled functionality in the editor20:50
deryckyup20:50
abentleyderyck: there can be multiple pieces of tech debt.20:50
deryckabentley, sure.  But I don't think this is creating debt.20:51
deryckabentley, it's saying "here's the one true way to do resizing text areas."20:51
deryckabentley, 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
abentleyderyck: To me, duplicating functionality is tech debt pretty categorically.20:51
deryckabentley, 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:52
deryckbear 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:53
abentleyderyck: I understand that there is no generic way to resize text areas.20:54
deryckabentley, so do you think he shouldn't land this?20:54
abentleyderyck: I still see it as functionality duplication.20:54
deryckabentley, so are you suggesting he shouldn't land it?  Or that he shouldn't land it without also fixing the inline editor?20:55
abentleyderyck: I am not happy either saying he shouldn't land it or that he should.20:56
deryckheh20:56
deryckcome on, commit! :)20:56
abentleyderyck: This is a case where code review is covering pre-implementation material.20:57
rick_h_hah, I knew my first code would get a tearing into!20:57
abentleyderyck: and that always sucks.20:57
deryckabentley, 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
deryckabentley, would you have suggested something different?20:58
abentleyderyck: 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.20:59
=== almaisan-away is now known as al-maisan
deryckabentley, 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
deryckI definitely think doing both in the same branch is too much.21:00
abentleyderyck: They can clean up the editor by extracting its resizing functionality and making it modular.21:02
abentleyderyck: And then making it pluggable.21:02
rick_h_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/tests21:03
rick_h_and then work on the inline edit using this plugin as a next step before it gets used anywhere21:03
deryckabentley, 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:04
abentleyderyck: I haven't looked at that code.  Maybe that's true in this case.21:06
deryckabentley, 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
deryckand it's really not worth pulling out; it's poorly written, using an updateSize thing that is called after so many different events.21:07
=== matsubara is now known as matsubara-afk
abentleyrick_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:08
deryckabentley, FWIW, I'm fine with rick_h_ committing to doing the follow up work.21:13
derycki.e. I don't have anything else he has to do instead of that.21:13
abentleyderyck: 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
deryckabentley, yeah, fair enough. :)21:14
rick_h_well I have to run here in a sec. What should I do from here?21:15
abentleyrick_h_: I see you're setting skip_animations true, so why do we need to wait "a slight sec"?21:16
deryckrick_h_, if you're leaving, let's just take up the issues in the standup, if abentley doesn't mind.21:16
deryckstandup tomorrow, I mean.21:17
abentleyrick_h_: we can pick up tomorrow.  I'm the on-call-reviewer anyway, tomorrow.21:17
rick_h_abentley: because in testing, chrome was too fast that if I checked right away it still grabbed the orig sizing values21:17
rick_h_and the 100ms there seemed to slow it down just enough for chrome to finish the ui redraw21:17
rick_h_abentley: ok, sounds good to me21:17
rick_h_thanks and sorry for the trouble21:18
deryckabentley, 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
abentleyrick_h_: np21:18
abentleyderyck: Yes.21:18
abentleyderyck: e.g. {{^repo}}{{/repo}}21:19
deryckabentley, ah, thanks!  I would have never guessed the ^.  And I couldn't find it in docs.21:20
deryckabentley, now searching docs for "^" I do ;)21:20
abentleyderyck: :-)21:20
deryckit was also something hard to google for.  I got lots of "Are mustaches hot or not" hits.21:24
=== jcsackett_ is now known as jcsackett
=== al-maisan is now known as almaisan-away
pooliehi all22:23
flacostehi poolie22:24
flacostepoolie: what's happening with https://code.launchpad.net/~xaav/loggerhead/export-tarball/+merge/66408?22:24
flacostedo we have anybody on the hook to integrate this?22:24
poolieno22:24
pooliei think there should be22:24
poolie:(22:24
poolieit is a real shame it has been neglected for so long22:25
poolieso22:26
poolieperhaps i am well placed to shepherd it in22:27
flacostepoolie: thanks!22:27
flacostei think it only requires a merge to loggerhead, updating the version in LP and then QA?22:28
poolieprobably a ton of qa22:29
pooliei think that's the main real commitment22:30
huwshimi"17045 tests run in 4:54:26.362705, 1 failures, 303 errors" hah!23:00
wgrantHeh23:04
wgrantWhich branch was that?23:04
StevenKwgrant: Opinions on http://pastebin.ubuntu.com/746479/ ?23:06
wgrantI guess.23:07
StevenKwgrant: I'm still working on the branch, so if you'd prefer a loop or something, say something. :-P23:07
huwshimiwgrant: Oh, the branch was to do with the tag cloud, the errors were all because "ImportError: No module named lpbuildd"23:12
wgranthuwshimi: Ah, merge devel.23:12
huwshimiwgrant: Yeah, I figured that might fix it23:12
mwhudsonshould make it about an hour quicker too...23:22

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