/srv/irclogs.ubuntu.com/2011/02/07/#launchpad-dev.txt

huwshimilifeless: On #712894 you mentioned some helpers to preload user's avatars. Are there any docs on how to use that or can you explain where I might start?00:00
_mup_Bug #712894: Display avatars next to usernames instead of icons <ui> <Launchpad itself:Triaged> < https://launchpad.net/bugs/712894 >00:00
lifelessgetUtility(IPersonSet).cacheBrandingForPeople(participants)00:01
lifelesssee model/person.py for the gory details00:01
huwshimilifeless: Thanks mate00:01
cjohnstonis there any plan on setting up LP to be translated?00:04
huwshimilifeless: Do I need to use that once on all the users that need an avatar on the page, or can I call it whenever I want (note, this is an exercise in me learning the codebase, so I might be asking dumb questions)?00:05
lifelesscjohnston: there was discussion @ UDS, met favourably, to do so. But its not scheduled.00:06
lifelesshuwshimi: that should (I haven't checked that its correct :P) be called once on a page, because doing one person at a time would be terribly slow.00:06
cjohnstonim guessing alot of work involved?00:06
huwshimilifeless: Ok thanks, I'll look into it a bit more... might not be feasible to do that then.00:07
lifelesshuwshimi: it is going to need to be called once, for *every page* that starts showing avatars00:08
lifelesshuwshimi: or performance will go to the toilet.00:08
huwshimilifeless: Yeah, that is going to be a big issue00:08
Ronniehow is https://login.ubuntu.com/ connected to https://login.launchpad.net/00:09
wgrantRonnie: They are just alternative skins for the same service.00:09
wgrantSame DB.00:10
spmsame servers even00:10
wgrantThe latter will hopefully go away eventually.00:10
lifelesshuwshimi: its going to need extreme care00:10
wgrantUbuntu services should prefer the forer.00:10
wgrant+m00:10
lifelesscjohnston: a moderate amount of work00:10
cjohnstonIf you create a login.u.c you dont have an LP account though correct?00:11
Ronniewgrant: so when you register on ubuntu.com you can login to LP?00:11
wgrantRonnie, cjohnston: You don't automatically have an LP account if you create an account on either.00:11
wgrantBut if you try to log into Launchpad, it will redirect you to login.launchpad.net. You can then log in using your login.ubuntu.com account, and Launchpad will create an account for you.00:12
wgrantLP is an OpenID consumer, just like LD.00:12
wgrant(except that login.ubuntu.com and login.launchpad.net use a private interface to return data from the linked LP account, if it exists)00:12
cjohnstonwgrant: the reason for the questions is that people are wanting to move away from the LP requirement for LP.. but the devs dont really see it as possible00:12
lifelesscjohnston: the which requirement for LP ?00:13
cjohnstonlifeless: you must have an LP account to be a part of a team, and to register for an event/meeting00:13
lifelesscjohnston: you said 'LP requirement for LP'00:13
lifelesscjohnston: this confused me00:13
cjohnstonPeople don't like sorry00:14
cjohnstonLP requirement for LD00:14
lifelessok00:14
lifelessright, with that cleared up00:14
thumperwhy do I often feel like I'm the first person to do something :-(00:14
lifelessLP maintains the team database00:14
thumperwriting lazr-js tests00:14
cjohnstoncorrect00:14
lifelessso I don't think you're going to get away from that at all easily; and there are no plans to make SSO maintain teams00:15
cjohnstonPeople 1) dont like the fact that they have to sign up somewhere other than LD... and 2) that LP isnt translated00:15
cjohnstonright00:15
lifeless(SSO teams are mirrored from LP)00:15
cjohnstonlifeless: thats what the couple devs have a hard time explaining to people00:15
lifelesswe'd take patches for I18N of LP00:15
cjohnstonI bet00:15
cjohnstonheh00:15
lifelessat one point we wouldn't have.00:16
lifelessbut I think that that bridge has been successfully fixed.00:16
wgrantExcellent.00:16
Ronniecjohnston: can we set login.ubuntu.com as openid provider?00:17
Ronniei tested locally and worked fine with login00:17
wgrantFor a while it wasn't open to arbitrary consumers, but I think that changed a few months ago.00:18
Ronniehmm, but for joining a team, we still need to login to LP00:18
cjohnstonusers still need lp accounts to make LD useful...00:18
lifelessRonnie: login.ubuntu.com is fine.00:18
Ronniecjohnston: they need to login only once to LP to join the team, but for other parts the l.u.c. should be fine (altough the mugshot is also in LP)00:19
cjohnstoncorrect.. so why not just leave it the way it is since they still have to go into lp?00:20
Ronnielifeless, wgrant: is there an alternative way to join a lp team, than the webpage?00:21
lifelessRonnie: apis, but the user still has to accept the membership00:21
wgrantlifeless: No, they don't :(00:21
lifelessand you can't talk about a user until they sign into LP once.00:21
wgrantRight.00:21
wgrantThe LD can add people to teams.00:22
lifelesswgrant: as part of the disclosure work that should be fixed00:22
wgrantBut they need to have an LP account first.00:22
wgrantAnd there's no way to create one of those unless the user logs in.00:22
wgrantOr you are the Software Center Agent (ugh)00:22
Ronniewgrant: is it possible to do one login to LP in the background, so the user is not aware (or manually restyle the page somehow?)00:23
Ronnielifeless: and how should the user accept the membershit trough api?00:24
wgrantThat would be very bad.00:24
Ronniemaking programms userfriendly, is sometimes choosing between 'the bad stuff' of the 'hard stuff' ;)00:25
Ronnieof = or00:25
lifelessRonnie: they would get an email with a link to click on00:26
lifelessos00:26
lifelessso00:26
lifelesswhat teams does LD care about?00:26
Ronnieall the team which are subteams of the main loco team (cant remember the name)00:26
cjohnstonubuntu-locoteams iirc00:27
Ronniehttps://launchpad.net/~locoteams00:27
lifelessanyhow, I don't see - in principle - a problem with designing and building a facility for LD and other closely affiliated sites to have impersonation facilities for users.00:27
lifelesswhether that looks like LP APIs or something radically different is an open question.00:27
cjohnstonbut we also have a plan of adding a "sister" to LD being a global directory which will provide the meeting feature (and upcoming team reports) to all teams that want it00:27
lifelessthe SCA approach seems rather unscalable from a risk perspective to me.00:28
RonnieSCA?00:28
lifelesssoftware centre agent00:28
Ronnielifeless: so having an API for 'trusted affilated'  sites is an option?00:29
lifelessyes00:30
lifelessI've spent approx 0 time thinking about the necessary requirements and constraints for it though.00:30
Ronniecjohnston: i think thats a very good solution00:30
cjohnstonExcept for what lifeless just siad00:31
cjohnstonsaid00:31
Ronnieindeed00:31
Ronnielifeless: and the 'one time lp login' can that be solved by the same API (in your first toughts)00:32
lifelessRonnie: if LD was able to act as an LP frontend00:32
lifelessRonnie: then it could create accounts given an sso signed in user, add them to teams etc00:32
Ronniebut is haveing LD as a frontend not very dangerous without limiting the features?00:33
lifelessRonnie: thats right, thus - 13:30 < lifeless> I've spent approx 0 time thinking about the necessary requirements and constraints for it though.00:34
lifelesswe'd be separating the business logic from presentation00:34
lifelessand we'd need an impersonation api for the glue00:34
lifelessso you could say 'on behalf of <ld logged in user> create a LP account'00:35
lifelessbut the integrity of the system would be maintained by the LP middleware00:35
Ronniei have to sleep and think about it for a while. i added this channel for auto join00:38
lifelesscool00:38
Ronnietill soon00:38
thumperhuwshimi: ping00:38
huwshimithumper: Hello00:39
thumperhuwshimi: do you know how to get some javascript to drop into the firebug debugger?00:39
thumperhuwshimi: I think it is something like " Y.debug() "00:39
wgrantRonnie: But we cannot sacrifice security like that for user friendliness.00:39
wgrantExcept perhaps as lifeless suggests.00:39
huwshimithumper: console.log();00:40
wgrantIn a very restricted context.00:40
huwshimithumper: That will work on Chrome debugger too00:40
thumperhuwshimi: I don't want to log stuff out, I want to debug some javascript00:40
huwshimithumper: What kind of info do you want?00:41
thumperI want to interrogate the DOM state mid function call00:41
thumperI'm not sure if my test is wrong, or the code isn't doing what it says it should00:41
thumperI'm trying to add a test for the multi line lazr-js editor00:41
huwshimithumper: There is console.debug, but I can't remember what it does00:42
thumperhuwshimi: ok, ta00:42
huwshimithumper: Check out this page: http://getfirebug.com/logging00:43
huwshimithumper: It has info about stack traces etc.00:43
huwshimithumper: From memory if you log a reference to a function you can get a whole pile of info from it00:43
huwshimithumper: So if you do a console.log(YAHOO.util.Dom) or whatever it should give you an object with a bunch of properties00:46
huwshimithumper: Just ducking out for a minute. Let me know if that doesn't help you and I'll get to it when I'm back00:49
lifelesswallyworld_: can I have a review please of https://code.launchpad.net/~lifeless/launchpad/bug-661988/+merge/48740 ?00:49
* wallyworld_ looks00:49
thumperhuwshimi: ack00:50
wallyworld_lifeless: is this an r-c for 11.02?01:02
lifelesswallyworld_: no01:03
lifelesswallyworld_: it will halve the time taken to do distribution bug searches01:03
lifelesswallyworld_: which is a nice improvement, and will drop a top 10 timeout out of the list01:03
wallyworld_lifeless: sure. a question - why is product_ids.discard(None) needed?01:04
lifelesswallyworld_: that should be obvious :)01:04
lifelesswallyworld_: there are multiple different contexts a task can be target to.01:04
wallyworld_ah, ok.01:05
wallyworld_and we were using a left join01:05
wallyworld_previously01:05
lifelessthe left join was crack and is unrelated01:05
wallyworld_osrry for the dumb question01:05
lifelessbug:bugtask is 1:M01:05
lifelessbugtask.bug is never NULL01:06
lifelessand bugs always have one or more bugtasks.01:06
lifelesswallyworld_: the linked bugs in the mp explain it all01:07
wallyworld_and the list(store.find(..)) inside the pre_iter_hook causes the results of the find to be cached for use by the main result set when it iterates?01:07
lifelessyes01:08
lifelessthey sit in the storm cache01:08
lifelessthen by-id lookups will succeed01:08
wallyworld_cool. that wasn't obvious to me :-) storn noob ;-)01:08
lifelessreasonably common idiom in lp01:09
wallyworld_should there be a one line comment to that effect then in case anyone else reading the code is not sure - just to make it explicit?01:09
wallyworld_or if it's well known, no need01:09
lifelessits in a function called eager_load01:10
lifelessI think a comment would be adding neon lights01:10
lifelessit might be nice to have a function on StormResultSet that will completely iterate the set01:11
lifelessjust for this01:11
wallyworld_suppose, but in general calling list() without assigning the result to anything may not always be "obvious" what it does. but that may just be me.01:11
lifelessI think it would be sad to have identical comments all over the code base saying this01:17
thumper\o/01:18
thumperstupid js tests now working01:18
thumperdebugging the tests sucks badly01:18
thumperbut they are working01:18
* thumper wonders how to commit to lp:lazr-js01:22
wallyworld_thumper: did you find out how to get access to the DOM then?01:22
lifelessthumper: bzr lp-land01:22
thumperwallyworld_: no01:22
thumperwallyworld_: but I found the bug in my code01:22
lifelessthumper: after its reviewed :)01:22
thumperlifeless: it is reviewed01:22
lifelessthumper: it just uses the normal lp pqm01:22
wallyworld_thumper: that sucks. there has to be a better way to debug that sort of stuff01:23
thumperwallyworld_: agreed01:23
thumperwallyworld_: it was a real PITA01:23
lifelessthumper: can you mentor ian's review of https://code.launchpad.net/~lifeless/launchpad/bug-661988/+merge/48740 ?01:23
wallyworld_thumper: maybe my IDE can do it :-)01:23
lifelesswallyworld_: btw, why do you say 1000 items in an IN clause is an issue ?01:23
wallyworld_lifeless: that's when databases start to get inefficient. oracle actually has a hard 1000 item limit - it throws an exception. postgres i believe has a soft limit - it doesn't complain but performance goes south01:25
lifelesswallyworld_: I think its an overly naice heuristic01:25
lifelesswallyworld_: I've seen fine performance up at 15K items in IN clauses01:26
* wallyworld_ wonders what naice means01:26
lifelesswallyworld_: *naïve*01:26
wallyworld_lifeless: wow. 15K items!!!!! that suggests to me that the query could be reconstructed01:26
wallyworld_/scould/should perhaps01:26
lifelesswallyworld_: that application had two different dbs; the output from the query on one db went into the query on the other.01:27
lifelesswallyworld_: but the point is, performance was fine01:27
wallyworld_sounds like a job for a temp table then01:28
lifelesswallyworld_: at 15 times the point of the 1000 limit you've seen before01:28
wallyworld_hmmm. i'll have to read mor eon what postgres can do. maybe i've been brainwshed by working with oracle01:28
lifelesswallyworld_: temp table would help if they were doing more than one query in the second db01:28
lifelesswallyworld_: this is one of those 'unless its been measured its irrelevant' cases01:28
wallyworld_sure. i've tended to use exists when the in list is large. but again, that may be my oracle bias coming out01:32
lifelessthat seems bonkers01:34
lifelessthe exists subsquery would have to have the IN list as well01:34
mhall119cjohnston: yup01:34
lifelessor you would have to write a temporary table, and select from that01:34
lifelesswhich is equivalent with any sensible implementation of IN01:34
wallyworld_i don't think oracle has a sensible implementation :-) it's always been a pita actually01:37
wallyworld_\o/ buildbot finished building db-devel rev 1018001:39
StevenKthumper: O hai?01:53
StevenKwallyworld_: ORA had some good ideas. They counter this with some *shocking* ones.01:54
lifelessStevenK: like what community means? :)01:54
wallyworld_lifeless: you took the words right out of my keyboard01:54
wgrantlifeless: The Launchpad definition of community sucks too :P01:54
lifelesswgrant: less01:55
lifelesswallyworld_: btw01:55
lifelesswallyworld_: for the bind variables patch01:55
StevenKlifeless: I was talking just in terms of the Oracle database product -- which has a vibrant community01:55
wgrantlifeless: The MP definition of community, that is.01:55
lifelesswallyworld_: test_bugtask_search has at least several patches that trigger the failure01:55
lifelesswgrant: even that fails less01:55
StevenKwgrant: In terms of what? Military Police? :-P01:56
lifelesss/patches/tests/01:56
wallyworld_lifeless: yeah, and also nascentupload tests too01:56
* wallyworld_ is impatient for staging to get rev 10180 deployed01:56
wgrantAre we going to unfreeze as soon as we are QA'd past the merge?01:57
lifelesswallyworld_: while you wait, get that bind variables thing underway :)01:57
lifelesswgrant: yes01:57
wgrantYay.01:57
wallyworld_wgrant: yeah01:57
wallyworld_lifeless: i have some recipe stuff to do first01:57
* wallyworld_ has too many concurrent tasks01:57
lifelessbad idea ;)01:58
wallyworld_yes01:58
StevenKlifeless: So, in leiu of thumper -- I have fixed 683321 -- but I'm not happy with my fix01:58
* wgrant throws fire at checkwatches.01:58
lifelessStevenK: shoot01:58
lifelesswgrant: so fix it01:58
lifelesswgrant: btw I did some analysis of the perf bugs you had in progress; hope it helped.01:59
StevenKlifeless: http://pastebin.ubuntu.com/563642/ is my diff01:59
wgrantThose statement counts of 10000 are a bit suspicious.01:59
wallyworld_wgrant: what was the end result of qa on rev 12321? did you come to the conclusion it is ok?01:59
lifelesswgrant: its not establising a new request context on each watch01:59
lifelesswgrant: very shallow fix01:59
wgrantwallyworld_: It seems to work, and hasn't broken anything that I can see. But I don't know Translations in depth.02:00
lifelessStevenK: whats unsatisfying about that ?02:00
StevenKlifeless: If you look at lib/lp/code/browser/sourcepackagerecipe.py, lines 528-545 and lines 631-650 (but my line count is off due to said diff)02:00
wgrantwallyworld_: I'm happy to qa-ok it, given how harmless the fix seems.02:01
* wgrant qa-ok's it.02:01
wallyworld_wgrant: hennige is going to qa it as his SOD but that's a few hours away yet. we'll have to wait02:01
StevenKlifeless: Compare and contrast those two code blocks02:01
wallyworld_wgrant: ok. i'll make sure it's followed up. thanks02:01
lifelessStevenK: yes02:01
StevenKThey're effectively indentical02:01
lifelessright02:02
lifelessneeds to be pulled out sideways02:02
StevenKlifeless: Which is what is my question is -- how?02:02
lifelesslooks like a method on RecipeRelatedBranchesMixin would come close to trivial02:02
StevenKlifeless: I was going to suggest RecipeTextValidatorMixin02:04
lifelessStevenK: even better02:04
StevenKlifeless: I might need a little more of a hint :_)02:05
lifelessStevenK: do you have the book 'refactoring' ?02:06
StevenKNope02:06
lifelessI suggest you grab it; you should be able to expense it bu tcheck with your mgr first.02:06
lifelessthe martin fowler one02:07
lifelessanyway02:07
lifelesswhat you need to do is:02:07
lifelessidentify the common code02:07
lifelessif it surrounds some different code, you're going to need a callable or some such02:07
lifelessrearrange both locations until they are truely identical02:08
lifelessthen move one of them to the mixin, turning local variables into parameters02:08
lifelessthe other copy becomes just a call.02:08
lifelessStevenK: http://martinfowler.com/books.html#refactoring02:18
* thumper is back now02:21
StevenKlifeless: Examples using Java and UML?02:24
lifelessyes02:24
StevenKAnd this is a *good* thing?02:24
lifelessthe basic structures are the same02:24
lifelessthere are some things that don't translate well to python02:24
lifelesse.g. accessors02:25
lifelessand balancing it with performance is a bit of an art02:25
lifelessbut there is a tonne of good shit well presented02:25
huwshimithumper: Just saw your post to the mailing list about lazr-js. When we were in Dallas he/we started to do the upgrade but hit failing tests with the new version of YUI. I'm not sure of the status of those problems though.03:11
thumperhuwshimi: I recall that there was something going on03:11
thumperI didn't want to duplicate effort in fixing the tests03:11
huwshimithumper: I don't remember the specifics of what was breaking, but I think it might have been something that Deryck couldn't fix directly03:14
* thumper nods03:14
thumperI'll catch up with deryck in the morning03:14
poolieis this change to using courier as the fixed width font intentional?03:20
wgrantI've not heard anything about font changes recently.03:23
pooliein chromium, launchpad today started using a fairly ugly monospace font03:23
wgrantYou didn't install msttcorefonts yesterday?03:23
wgrantHmm.03:23
wgrantChromium 9 was pushed out to Ubuntu yesterdayish.03:24
poolieit seems to want03:24
pooliefont-family: "UbuntuBeta Mono","Ubuntu Mono",monospace;03:24
huwshimipoolie: It looks like if you don't have the Ubuntu Mono font it will default to whatever your browser/os default mono font is03:24
poolieI have "Ubuntu Beta Mono 17"03:25
pooliefrom "Walled Garden of Temptation"03:25
poolieis there a font "UbuntuBeta Mono"?03:26
huwshimipoolie: I don't think that would cut it03:26
wgrantpoolie: That was the name we were given months ago, before a mono variant existed.03:26
wgrantApparently they did not follow their scheme.03:26
poolieapparently not03:26
pooliedo either of you have "Ubuntu Mono" or "UbuntuBeta Mono"?03:27
huwshimipoolie: nope03:27
huwshimiI should though03:27
huwshimipoolie: I can tell you how to rename the font03:27
pooliei guess that chromium's change may have it no longer interpreting "monospace" as meaning the system monospace font03:28
pooliewhich is probably a bug there too, but lp has a bug if it's asking for ubuntu fonts that don't/won't exist03:28
pooliehuwshimi, how?03:32
poolieistr you can make aliases in fontconfig03:32
huwshimipoolie: The way I would do it would be to modify the font itself (or a copy of the font)03:32
huwshimipoolie: but you might be right about using aliases03:33
lifelesswell03:35
lifelesswe shouldn't have poolie rename the font03:35
lifelesswe should update lp to use the name actually used by the font03:35
james_wwell, I doubt the number will be in the final name03:36
huwshimilifeless: I suspect that poolie has a pre-release version with a version number in the name03:36
poolieright03:36
pooliei think _everyone_ has a version number in the font03:37
poolieif they have it at all03:37
huwshimipoolie: I guess people will have different version numbers though03:38
pooliehttps://bugs.launchpad.net/launchpad/+bug/71438103:38
_mup_Bug #714381: launchpad css asks for "UbuntuBeta Mono" font that doesn't exist <css> <easy> <trivial> <Launchpad itself:Triaged> < https://launchpad.net/bugs/714381 >03:38
pooliehuwshimi, yeah03:38
pooliei find that a bit weird, but i guess that's their decision03:38
pooliewe could ask for 1703:39
poolieor prefer 20, 19, 18, 17, ...03:39
huwshimipoolie: neither Chrome or Firefox respect the os's default font it seems.04:00
* thumper EODs04:19
* wallyworld_ wonders why staging seems to be taking so long to come up again04:31
lifelesswallyworld_: we'll find out when spm returns04:32
wallyworld_lifeless: is he the one who also needs to then do the merge into devel etc04:32
wallyworld_lifeless: i'm off to pickup the kid from school. will check back in 30 minutes or so to see the status of staging04:57
lifelesswallyworld_: see -ops04:58
lifelesswallyworld_: will need stubs input to recover04:58
lifelesswgrant: view-source:https://qastaging.launchpad.net/ubuntu/+archive/asuka-wants-to-get-rocked/+index05:32
lifelessAt least 80 queries/external actions issued in 9.28 seconds05:32
lifelesswgrant: I'm just impressed its rendering on qastaging05:32
wgrantlifeless: Oh wow.05:35
wgrantThat's nice.05:35
wgrant    At least 4 queries/external actions issued in 0.08 seconds05:36
lifeless?!05:36
wgrantAh, I can't see it.05:36
wgrantThat's fewer queries than I would have expected for an Unauthorized, though.05:36
lifelessoh, needs to be enabled ?05:36
wgrantI guess it reinitialises the view.05:36
wgrantYeah.05:36
lifelessyeah, it does05:36
lifelesshttps://qastaging.launchpad.net/ubuntu/+archive/asuka-wants-to-get-rocked should work for you now05:37
lifelessI wish we had a discrete menu at the top like gmail does05:38
wgrantHm?05:40
huwshimilifeless: You mean like a global navigation/user specific options sort of thing?05:45
lifelessyes05:46
lifelesshuwshimi: oh excellent, you are here05:46
lifelessis span still appropriate to wrap something inline in a paragraph ?05:46
lifelesssilly tal wants hierarchical containers :(05:46
huwshimilifeless: Yes, a span is good.05:47
wgrantlifeless: If you don't actually want the element to be there, you can just use a <tal:ANYTHING replace="foo" />05:50
huwshimilifeless: I was thinking the exact same thing about the global nav earlier today. I came to the conclusion that it depends what launchpad wants to be. At the moment, once you get to a project you're pretty much stuck there (except by using the links in the footer or clicking your name at the top right). This makes Launchpad good if you want Launchpad to be quite invisible. If Launchpad wants to be more collaborative05:51
huwshimi and feel like a destination itself (rather than the project being the destination) then I think some global navigation would go a long way to making Launchpad more whole.05:51
huwshimiI think.05:52
wgrantAFAICT the point of LP 3.0 was to make LP disappear.05:52
wgrantThe project was made the prominent entity.05:52
huwshimiwgrant: Right. So it depends what Launchpad wants to be.05:52
wgrantExactly.05:53
huwshimiI get the feeling that Launchpad may move back away from that05:54
lifelessFWIW I'd be looking at a balancing act05:56
lifelessI think lp is terribly hard to navigate at the moment05:56
lifelessbut its easy to jump around within a project on lp.05:56
huwshimilifeless: I guess it's something we should talk to jml about?05:58
lifelesswgrant: ah yesm cool. thanks.05:59
lifelesshuwshimi: I think that would be a good start; OTOH this is arguably small fry right now given the massive lack web2.anything ;)06:00
huwshimilifeless: It might be small fry, but I think it's these little steps that quickly add up to creating a lot of impact.06:00
huwshimilifeless: I'll shoot jml an email about it06:01
lifelesshuwshimi: cool06:01
huwshimilifeless: Do you have a minute to talk about another navigation issue?06:02
lifelesssure06:03
lifelesshuwshimi: trade you for a little dom glue06:04
huwshimilifeless: Deal.06:04
lifelessso, what can I help you with ;)06:04
pooliedraft post about web_link: http://blog.launchpad.net/?p=1916&preview=true06:05
huwshimilifeless: I was wondering if you knew what technical advantages we gain by having our "apps" (bugs, code etc.) on different sub-domains, if any.06:06
poolie:)06:06
lifelesshuwshimi: it costs us06:06
huwshimilifeless: Oh, in what way?06:07
lifelesshuwshimi: its complex to do, to maintain, has a performance cost on domain switches.06:07
huwshimilifeless: Right.06:07
lifelessclicking on code, for instance, -> 6 second delay to do SSL handshake (for you or I06:07
pooliehuwshimi, i think it's a bit of an artifact of there once being a plan to make them more separated06:07
lifelessits a solution to one ui problem, which is 'what url to give a different rendering of a single object'06:08
huwshimipoolie: yeah, I read Mark's blog post about it.06:08
lifelesshuwshimi: url for that?06:08
huwshimilifeless: http://www.markshuttleworth.com/archives/3006:08
poolie:)06:09
pooliekeeping people in the zone is good, but i don't know that splitting the url is the most useful thing to get there06:09
pooliebut that's 5 years ago now06:09
huwshimilifeless: I'm just speculating now, and really just doing research, but would would be the cost of migrating off subdomains?06:10
lifelesshuwshimi: I dislike estimating for other people.... but I think a feature squad could do the heavy lifting in a week.06:10
lifelesshuwshimi: there are several steps needed:06:11
lifeless - we need to map the existing content into the main url hierarchy. E.g. we could put +blueprint at the end of a url to mean what currently blueprints....../thing/ means06:11
lifeless - we need to decide on a forwarding strategy for the old urls (e.g. do it in apache, or in the appserver indefinitely or ...)06:12
lifeless - we need to assess the usability impact - and benefits [this is a LEP level thing I think]06:12
lifeless - and we need to execute06:12
lifelessI *think* some clever code in the publisher could do the initial translation for us, but we'd want a way to be really clean internally going forward.06:13
wgrantMoving the pages off subdomains is very easy.06:14
wgrantThere may be some slight issues getting the facet breadcrumbs to work properly.06:14
wgrantBut that's about it.06:14
lifelesswgrant: right; and we have to retain urls to show all the facets06:15
wgrantWe already have those.06:15
wgrantBut we might want to rename them.06:15
wgrant(+code-index, +bugs-index, ettc.)06:15
lifelessah, I hadn't actually read that bit of glue; ok, so yes, what I thought could be written has been.06:16
wgrantThere are some views (mostly Code and Translations) that exist only on the relevant domain.06:16
stubOur bzr-git is still oldformat bzr repo06:16
wgrantBut they are very much the exception.06:17
lifelessalso a source of user complaints06:17
wgrantYes.06:17
lifelessnotwithstanding the issue with sending api calls to the right place, I'd like to fix that.06:18
wgrantParticularly the lack of Branch:+index.06:18
wgrantIt vanished a couple of months back :(06:18
lifelesssuccess06:18
lifeless15 queries/external actions issued in 0.18 seconds • lifeless •06:18
lifelesshuwshimi: ok, so06:18
lifelesshuwshimi: I've got this little bit of text I want to show up beside my login06:18
lifelesshuwshimi: the problem is that it has to be rendered *after* all the rest of the page.06:19
huwshimilifeless: Yeah thanks for that. It was very helpful.06:19
lifelesshuwshimi: its only going to show for developers06:19
lifelesswhats the best way to make it show up where the login name is, but have it evaluated at the end of the page.06:19
lifelesse.g. is a <script> segment appropriate, or something else ?06:19
huwshimilifeless: What does it need that is only available at that point?06:20
lifelessthe amount of time that the page takes to render06:20
huwshimilifeless: Ah right :)06:20
lifelessit /probably/ needs to be fixed up client side.06:21
huwshimilifeless: render time, including javascript execution?06:22
lifelessserver render time06:22
huwshimilifeless: Ah ok06:22
lifelessadding in javascript render time would be an awesome bit of filigree but its not my first target.06:22
stublifeless: You could set a cookie after the page has been generated (and before returned to the client) containing the details, and have the javascript display the contends06:22
lifelessstub: thats possible; could also just render the javascript to set it with the contents.06:23
wgrantstub: Race race race.06:23
stubwgrant: Shouldn't be a race - cookies are sent in the header, and they are called headers for a reason. I suspect I'm overly optimistic here :)06:24
lifelesshuwshimi: my js is extremely rusty - the last time I did significant stuff with it was in 9706:24
wgrantstub: It'll race with other pages, though.06:24
lifelesshuwshimi: so I'm wondering if you'd care to proffer a little snippet06:24
huwshimilifeless: Where does it get the timestamp from, or do you want to generate it with the javascript?06:24
stubSo we need to inject the tag after generating the page and before returning it to the client. No JS needed, no race conditions06:25
lifelesshuwshimi: I propose to put the js in base-layout.pt06:25
lifelesshuwshimi: where the current comment listing the page metadata is06:25
lifelesshuwshimi: and I can render the javascript with the right duration immediately06:26
stubMinor publisher hack to our collection of minor publisher hacks we call our publisher.06:26
lifelessstub: I'm alittle worried about where in the publisher I'd need to poke to make that happen; doing a 5-line js render seems cheaper06:26
lifelessstub: +06:26
lifelessstub: doing it as js lets us get js render times eventually as well06:27
stubThe publisher basically does 'return foo(request)'. Change that to 'body = foo(request); body.replace('$$$ I CAN HAZ RENDERTIME $$$', str(rendertime)); return body06:27
lifelessstub: right, thats expensive on our big pages06:28
lifelessmeasurably so06:28
huwshimilifeless: If you're generating the timestamp with the javascript you'll have issues with javascript execution times06:28
lifelesshuwshimi: not a timestamp; string description of duration.06:28
huwshimilifeless: Ah ok, so it's already been generated? Sorry I'm a bit confused :)06:29
lifelesshuwshimi: visit any old launchpad page06:29
lifelessview the source and scroll to the bottom06:29
stubI'm causing confusion because I'm talking page generation time and this conversation is about client side rendering time I realize06:29
lifelessstub: no, its a bit about both.06:30
lifelessstub: so on particular confusion, but I think its worth having one change that will do both eventually.06:30
lifelesshuwshimi: so at the bottom there is a comment block06:30
lifelesswith things like '15 queries/external actions issued in 0.18 seconds' in it06:30
huwshimilifeless: yeah got it06:30
lifelesshuwshimi: I want to show that string (perhaps more compactly) to the left of my name in the login area06:31
huwshimilifeless: Right, I'm with you06:31
pooliei wish lp would stop sending:06:32
poolie** Changed in: bzr06:32
poolie    Assignee: Registry Administrators (registry) => Curtis Hovey (sinzui)06:32
poolie** Changed in: bzr06:32
poolie    Assignee: Curtis Hovey (sinzui) => (unassigned)06:32
wgrantYou want it to collapse them?06:32
pooliehuwshimi, +1, i think that would be great06:32
huwshimilifeless: Because it is outside the entire <html> definition you'll probably have to do something a little hacky to get it to work. Unless I'm overlooking something, but I don't think I am. Let me do a quick test and I'll give you some code06:33
huwshimipoolie: About subdomains?06:33
lifelesshuwshimi: we can put it in the html easily06:33
lifelesshuwshimi: thats a 5 second change06:34
huwshimilifeless: I guess the real issue is that it is not inside a single element to nicely pull it out.06:35
lifelesshuwshimi: how do you mean ?06:35
poolieabout subdomains but also about showing the db query count06:35
lifelesshuwshimi: I can put it into the javascript we output06:35
lifelesspoolie: db count is me :)06:35
lifelesspoolie: I'm nabbing huwshimi for help.06:35
huwshimilifeless: Oh I see you'd modify the javascript server side to set a javascript var?06:36
lifelessyes06:36
huwshimilifeless: Oh, easy then :)06:36
lifelessI can write out the js all prepped and ready to go06:36
lifelessexactly06:36
huwshimilifeless: ok let me give you some code06:37
huwshimiyou can stick it where you like, it doesn't matter when it is executed then.06:37
huwshimione sec06:37
lifelesshuwshimi: obviously I can add a span or what have you at the top to get replaces06:42
lifeless*replaced*06:42
lifelesshuwshimi: and I can take care of all the logic for when to show/not show.06:42
huwshimilifeless: Sure06:42
huwshimihttp://paste.ubuntu.com/563723/06:43
huwshimilifeless: ^ that should be roughly it06:43
huwshimilifeless: if you want you could add a dive with javascript as well so you don't have to add any html to render06:43
huwshimilifeless: Ouch, actually there is one bug06:45
lifelessdoes that replace the entire location bar06:45
huwshimilifeless: yes :)06:45
lifelessok, well I'll wrap this in when-to-show and the render time06:45
lifelessright, thats all glued in06:52
lifelessjust needs the tweak to not replace it all06:52
huwshimilifeless: ok, for that you need it to look like this: http://paste.ubuntu.com/563729/06:54
lifelesshuh06:55
lifelesswouldn't this work ?06:55
huwshimilifeless: That will create the extra div and everyone06:55
huwshimi*everything06:55
lifelesshttp://pastebin.com/pSek6jTi06:55
lifelessah, it renders quirkily my way06:56
huwshimilifeless: Yes, but then you don't have a parent element to control it's position with'06:56
huwshimilifeless: Yeah it'd probably look a bit strange without a float or anything06:57
lifelessso06:57
lifelessI can create the dic up front06:57
lifelessgive it a static 'loading...' message06:57
huwshimilifeless: Yes that would work06:57
lifelesssweet07:03
lifelessit sits a little close to the person icon07:03
poolielifeless, bug 703807 looks a lot like a squid problem07:03
_mup_Bug #703807: "easy_install pyOpenSSL" says "error: Unexpected HTML page found at http://launchpad.net/pyopenssl/main/0.11/+download/pyOpenSSL-0.11.tar.gz" <Launchpad itself:Triaged> <pyOpenSSL:New> < https://launchpad.net/bugs/703807 >07:03
pooliesince it shows up consistently on one proxy07:04
pooliejust thought you might be amused07:04
lifelesss/amused/horrified/07:04
poolie:)07:04
wgrantpoolie: It depends on the file.07:05
wgrantpoolie: Some work fine on both.07:05
pooliei have a tcpdump here but i don't know if it really shows anything interesting other than what's in the header07:05
wgrantOthers work only on one sometimes.07:05
pooliewgrant, true07:05
lifelesspoolie: I doubt that its squid; squid will be doing what its told.07:05
wgrantIt may be that only one has cached bad responses.07:05
wgrantThe other managed to get a good one.07:05
pooliei don't think it's a squid bug but it may be a squid issue07:05
pooliewhether that is bad configuration, bad data on disk, bad cache guidance from lp07:05
lifelessuhm07:05
lifelessSo I still doubt that; I bet if squid wasn't there we would get users complaining from time to time07:06
lifelesssquid probably makes the issue, whatever it is, more visible when it happens.07:06
pooliewgrant, now that would be interesting if we can find a url that works on banana and not nutmeg07:06
pooliewell, it probably makes it sticky07:06
poolielifeless, how likely is it that it could cache a content-type and a body that weren't originally sent together?07:07
pooliei would have thought pretty unlikely07:07
wgrant14:31 < wgrant> At the moment, http://launchpadlibrarian.net/58498441/pyOpenSSL-0.11.tar.gz gets the right type from nutmeg, but the wrong from banana.07:07
lifelesspoolie: cosmic ray unlikley.07:07
wgrantThat was a couple of weeks ago.07:07
pooliewgrant, that's also what i'm getting today07:08
wgrantAh.07:08
wgrantTrue.07:08
lifelesshuwshimi: if you wanted to eyeball this and see how it looks - lp:~lifeless/launchpad/showtimes has the patch.07:08
huwshimilifeless: Do you want a bit more styling for it? Is this a permanent thing? At the moment the css applied is kind of bad, but I can give you some proper stuff?07:08
poolieif we found that they swapped around either for this url, or for different urls, that would be quite interesting07:08
huwshimilifeless: OK, I'll take a look07:08
wgrantRight, I thought I found such an example, but I was confused.07:09
lifelesshuwshimi: to play with it, pull/merge that branch in, run it, visit 'https://launchpad.dev/+feature-rules' and add a rule 'visible_render_times default 1 on'07:09
pooliedo you know off hand if these machines will respect any cache-busting headers?07:09
huwshimilifeless: Actually how do I run your branch locally?07:09
huwshimilifeless: Do I stick it in lp-branches?07:09
wgrantpoolie: Uh, did you actually look at launchpad.net/debian?07:10
lifelesshuwshimi: make a branch of your own to hold it, then run 'bzr pull --overwrite lp:~lifeless/launchpad/showtimes'07:10
wgrantpoolie: I made sid the dev focus this morning, when I created wheezy.07:10
wgrantlp:debian/foo now resolves to sid.07:10
huwshimihuwshimi: Can I just create that initial one with rocketfuel-branch?07:10
pooliehooray07:10
poolieno, i didn't look closely enough07:10
wgrantHeh07:10
huwshimiugh07:11
huwshimilifeless: Can I just create that initial one with rocketfuel-branch?07:11
huwshimiI was talking to myself again07:11
lifelesshuwshimi: yes, you can07:11
pooliewgrant, so nothing more needs to be done? or should we rejigger stacking?07:12
huwshimilifeless: Thanks, I'm still a noob :)07:12
pooliei suppose that would mean unstacking the sid branches07:12
wgrantpoolie: We could restack everything if we really wanted to. But the benefit is negligible.07:12
pooliehm07:12
poolieok07:12
wgrantWe need a way to do that sort of thing, but I don't think we have it at the moment.07:12
wgrantActually.07:12
wgrantHmm.07:12
wgrantI guess we probably should do that.07:12
pooliewhat did you do to change the focus?07:13
wgrantOr we are going to have multi-level stacking. And I guess that's not going to work very well.07:13
lifelesssometimes I think drmo doesn't read blog posts. sigh.07:13
wgrant~registry can change the status on +edit of Debian's distroserieses.07:13
wgrantThere's no link, but URL hacking works.07:13
lifelesswe want /sid/ to be unstacked07:13
poolieactually https://launchpad.net/debian doesn't say which one is the development focus07:13
wgrantThe dev focus is the "Current Development" series.07:13
lifelessand the rest stacked on sid07:13
poolieneither does https://launchpad.net/debian/sid07:14
wgrantNo, because it's not explicit for distributions.07:14
wgrantIt's implied from the status.07:14
pooliei feel less bad about not seeing it now :)07:14
poolieah, "active development" implies that?07:14
wgrantEr, yeah, Active Development, not Current Development07:14
pooliewell that's obvious07:14
wgrantThat's 2005.07:15
poolie?07:15
pooliethe ui design here is from 2005?07:15
wgrantThe data model is.07:15
wgrantProducts have a dev focus.07:15
wgrantDistributions do not.07:15
wgrantAnd yes, most of the UI design is too :)07:16
lifelessreview plox https://code.launchpad.net/~lifeless/launchpad/showtimes/+merge/4875407:16
lifelesshuwshimi: its visible_render_time - no s. my bad.07:17
huwshimilifeless: Ah thanks07:18
poolienice07:18
lifelessthanks07:19
lifelesshuwshimi: commit -2 is the meat of the change07:20
lifelesshuwshimi: you can see that with 'bzr diff -c -2'07:20
wgrantWe don't have any tools at the moment to mass-restack branches, do we?07:21
poolienup07:21
lifelessother than branch-distro07:21
lifelessno07:21
pooliewell, shell scripts07:21
wgrantbranch-distro cheats.07:21
pooliei wonder what degree of tool-building would be worthwhile?07:21
huwshimihuwshimi: ok cool thanks. Did you want me to give you some css to make that spaced a bit better?07:21
wgrantRight. It's really easy to script it up. Just wondering if we had an existing solution.07:21
wgrantI think most sid branches should already contain ~all the data anyway.07:21
wgrantBut it would be nice to formalise that.07:21
lifelesshuwshimi: now you are talking to yourself :)07:22
huwshimiugh, I keep doing that!07:22
wgrantPerhaps we want to revert the dev focus until we do that.07:22
lifelesshuwshimi: sure, that would be cool07:22
huwshimilifeless: ok no problems :)07:22
lifelesshuwshimi: it doesn't matter a great deal, but we might find that interested users want to see this or something.07:22
huwshimilifeless: Sure07:22
lifelesshuwshimi: so I don't think it should be /ugly/07:23
poolielifeless, can i see a screenshot?07:24
wgrantpoolie, lifeless: We should probably work this out before we run branch-distro, which will create 20000 new branches stacked on wheezy rather than sid. It sounds like we want to reconfigure --unstacked all of sid's branches (should be cheap, since revs should have appeared in sid first anyway), then hack branch-distro to stack on there instead of the new series.07:28
pooliebug 71441407:28
_mup_Bug #714414: unstack debian sid branches <code-hosting> <stacking> <Launchpad itself:Triaged by canonical-bazaar> < https://launchpad.net/bugs/714414 >07:28
huwshimilifeless: Do you want a patch or something?07:28
lifelesshuwshimi: patch sure, or you could commit and push and I'll pull in your branch07:29
huwshimilifeless: ok I'll commit07:29
pooliewgrant, right, so i wonder if that should just be $something|xargs -n1 bzr reconfigure --unstacked, and ask a losa to run that07:30
lifelesspoolie: just trying to remember the hostname to use to sftp up the screenshot07:30
wgrantpoolie: Pretty much, I think.07:30
wgrantOr possibly a harness.07:30
pooliewhat does 'harness' mean in this context?07:31
wgrantAs in 'make harness', sorry.07:31
wgrantGiving us access to the usual codehosting Python APIs.07:32
wgrantAllowing us to list and open branches and stuff...07:32
wgrantA smartserver restack is server-side, right?07:32
pooliehm07:32
pooliethis is the thing that opens up a python shell with an lp object?07:33
wgrantassuming it is, we just need a member of ~ubuntu-branches, and launchpadlib...07:33
pooliei think that's true07:33
poolieit does depend on keeping the connection open, but that could be run from the dc07:33
wgrantRight.07:33
huwshimilifeless: lp:~huwshimi/launchpad/showtimes07:33
huwshimilifeless: Tell me if that looks ok07:34
poolielifeless, i think jorge recommended 'shutter' which can upload them various places07:34
lifelesshuwshimi: I think you haven't pushed07:36
huwshimilifeless: Oh, it says it's done...07:37
huwshimilifeless: oh, I've failed.07:38
huwshimilifeless: I'm trying to do too many things07:38
huwshimilifeless: one sec07:38
huwshimilifeless: I pushed it without the changes :D07:38
huwshimilifeless: OK, try now.07:40
lifelessthanks, trying07:42
lifelesspoolie: http://people.ubuntu.com/~lifeless/showtime.png07:42
lifelessthats without huw's fixes.07:42
lifelesshuwshimi: thanks, pushing that into the proposal07:43
huwshimilifeless: Great.07:43
huwshimilifeless: Just before I head off, in terms of the subdomain stuff, what are your initial reactions to the idea of change to a different url structure? I don't want to push the issue if I should really just be leaving it alone.07:45
lifelessuhm07:48
lifelessso there are three things you might mean07:48
lifelessif you mean 'lets use one domain for the app, one for apis and the librarian/apt-archives/etc off to the side' - fine by me07:49
lifelesson a technical level that has many advantages07:49
lifelessif you mean use a different way of generating urls.07:49
lifelesse.g. /objectid07:49
lifelessand being much less 'object traversal and guessable'07:49
lifelesswell, perf wise that will have implications (neither good or bad per se - just change we need to accomodate)07:50
=== almaisan-away is now known as al-maisan
lifelessand I think it needs to be vetted in terms of usability07:50
lifelessone of the early design considerations was that our urls should be tellable07:50
lifeless(vs copiable)07:50
lifelessif you mean something in between the two, my reaction is in between the two :)07:51
huwshimilifeless: ok, I'm really only thinking about removing the bugs.LP code.LP etc. and somehow merging them into the main urls07:52
huwshimiwhich would be your first option07:52
lifelessI know jml is interested in doing that07:52
lifelessand as I say, technically this would be great in many ways.07:52
huwshimilifeless: I had a brief discussion with him about and his concern was the technical impact of it, which by the sounds of things would affect things positively.07:53
lifelessI think it would a bit of a wash UI wise in some ways - some things like 'type in bugs.' would become 'suffix with +bugs', or whatever.07:53
lifelesshuwshimi: I'm reasonably sure he knows my opinion here; happy to write it down for reference if you like07:53
lifelessI *don't* think this is a high priority in terms of improving the UI or experience of LP; but thats not grounded in science.07:54
huwshimilifeless: OK thanks very much. I'll do some more thinking about it then.07:55
lifelessthe things I think are key priorities are:07:57
lifeless - making it feel snappy07:57
lifeless - making doing the most common things easy to do07:57
lifelessfor the former more extensive API use vs page loads will help considerably.07:57
lifelessE.g. search pagination should not be a page load.07:57
lifelessfor the latter, I think doing some extensive log analysis could be a goldmine for finding out what folk do the most. And then we can start including that data in our scheduling discussions.07:58
huwshimilifeless: How much impact does the ssl stuff have?08:00
huwshimiis that delay every time you switch subdomain?08:01
lifelessour SSL cache is set (IIRC) to 6 hours expiry now08:01
lifelessso users should only perceive it when either:08:01
lifeless a - their brower switches backend IP (should be never, but you can't be sure without reading the browser source code :P)08:02
lifeless b - they've just started using the site in a new browser session or after a many hour delay08:02
huwshimiI guess b would be once or twice daily then08:03
lifelesswell, 6 hour gap08:04
lifeless(I think thats what its at)08:04
lifelessI'm negotiating with ubuntu-server team to apply the memcached ssl cache patch to apache for us08:04
lifelessif we get that in a backport for lucid, we can push it up to 24 hours and have it shared between apaches08:05
lifelessthat should mean ~ never for our more active users.08:05
huwshimilifeless: Ok, so in terms of performance subdomain stuff is negligible08:05
lifelesswe can reduce the impact till its largely ignorable. there will always be a 6 second warmup for folk near gmt+12, but the distributed ssl front ends we're looking at will mitigate that a great deal08:06
huwshimilifeless: OK thank.08:07
lifelesshuwshimi: shiny theming on the render times08:07
huwshimilifeless: Ok cool, that's ok then?08:07
lifelessyeah, I just took it before, ran it up now.08:08
lifelessiz nice.08:08
lifelessits a little bit of a shame that the bullet point is now a different size08:08
lifelessbut 'meh'08:08
huwshimilifeless: We can fix that if we care enough08:09
=== al-maisan is now known as almaisan-away
lifelesshuwshimi: wait till it annoys you08:10
huwshimilifeless: Haha08:10
lifelesshuwshimi: this will go live monday next week08:10
lifelesshuwshimi: as I'm not going to push it via r-c, and friday will be too late for it.08:10
huwshimilifeless: For some reason those bullet points annoy me any way, so watch out otherwise I'll delete them all :P08:11
lifelesshuwshimi: wouldn't bother me; I was following suit08:11
lifelesshuwshimi: now, to show javascript render times08:11
lifelesshuwshimi: I imagine we'd put a little <script> at the top of the html to grab a timestamp as the page starts loading. Probably not even aa YUI call; bare js.08:12
lifelesshuwshimi: then this code block at the end could grab that and subtract to figure out the interval; but would it be realistic - that is, would the overlays for bug task buttons etc have all rendered by then ?08:13
huwshimilifeless: Yeah that will be the hard bit.08:13
huwshimilifeless: Are you doing this so that the time is in our face the whole time?08:13
lifelessis there a 'bing, its cooked, ready to eat' event ?08:13
lifelesshuwshimi: hell yes.08:13
huwshimilifeless: Awesome08:13
lifelessi'm a huge fan of continual partial awareness of things that need optimising08:14
lifelessif you can't see it, and its not your primary concern, it won't get looked at.08:14
huwshimilifeless: There's a few dom states for things like that. I think you might be able to use the 'ready' state. I think DOM and javascript execution is done then, but I'm not sure if all execution is done and I don't think images are either08:15
huwshimilifeless: I think it's a good idea.08:15
lifelesshuwshimi: an approximation may still be usfeul08:16
huwshimilifeless: Yeah, you should be able to get some idea from comparing the numbers to a browser profiler (like the chrome one or firebug or something).08:17
lifelesshuwshimi: right now I'm not likely to add the js times myself08:17
lifelesshuwshimi: but I'd be delighted to help you overcome any issues you might have adding that, if you are interested in doing so08:18
huwshimilifeless: Haha.08:18
lifelessprimarily because I want to get the server side /sorted out/08:18
huwshimilifeless: Did you say that someone is looking into lazy loading the javascript?08:18
lifelesshuwshimi: deryck has mumbled various things08:18
lifelessthere is a usable combo loader in lazr-js; I helped sidnei optimise that a few weeks ago08:19
lifelesshuwshimi: oh, the other perf advantage of one domain08:19
lifelessless repeated downloads of javascript08:19
huwshimilifeless: Yeah, I was surprised to see we don't stick all the js/css/images on it's own server08:20
lifelesshuwshimi: for first access, another ssl handshake == slower08:22
huwshimilifeless: Ah right08:22
huwshimilifeless: disconnecting for one minute08:22
huwshimilifeless: Is the media served through it's own apache instance though?08:26
lifelessso we have 2 sets of media08:27
lifelesswe have user media08:27
lifelessand system media08:27
lifelesssystem media is treated like css etc; its static files on the same domain as the page, so no new ssl handshakes.08:27
lifelessuser media is put on the librarian08:27
lifelessthe librarian is launchpadlibrarian.net (for public files) and *.restricted.launchpadlibrarian.net for private files08:28
lifelessso user branding will generate (at least one) ssl handshake.08:29
huwshimissl is such a pain08:30
StevenKhuwshimi: I'd rather it was using SSL :-)08:40
lifelesstechnically speaking, we're staying on pure ssl08:40
lifeless:)08:40
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
=== almaisan-away is now known as al-maisan
adeuringgood morning08:57
=== Ursinha-afk is now known as Ursinha
mrevellHello09:02
Ursinhagood morning launchpadders09:02
wgrantlifeless: Still around?09:10
lifelesssomewhat09:10
wgrantlifeless: What do you think of http://pastebin.ubuntu.com/563762/? It may need loop-tunerising, but it's probably OK.09:11
lifelesswgrant: well it will work, but isn't it going to double our disk usage?09:13
wgrantlifeless: I suspect our disk usage is already doubled.09:13
wgrantlifeless: Since all the new data will be going into sid first.09:14
lifelesswgrant: well the importer is halted for now09:14
lifelesswgrant: isn't it ?09:14
wgrantlifeless: I mean historically.09:14
wgrantNew revs are imported into the stacked sid branches.09:14
lifelessah yes09:14
lifelessso anyhow09:14
wgrantOnly after ten days do they enter the stacked-on branch.09:14
lifelessI think this will work09:15
wgrantWe probably want to later on manually "09:15
lifelessloop tuning would be pointless09:15
wgrantrestack" the rest of the series by recloning.09:15
wgrantBut that can happen later.09:15
wgrantRight.09:15
lifelesswe should get a report of disk waste and some code to discard duplicate revs and tune09:15
lifelesswgrant: gc, no need to reclone.09:15
lifelesswgrant: specialised pack()09:15
lifelessjml: are you here yet?09:16
wgrantlifeless: I thought bzr didn't support that yet!09:16
wgrantDoes it now?09:16
lifelesswgrant: no, but it can09:16
wgrantHeh09:20
wgrantIt seems to not trigger a rescan, which is nice.09:29
jtvhi wgrant, hi lifeless09:44
wgrantEvening jtv.09:44
lifelesshi jtv09:44
jtvfosdem was fun—presentations on pgpool-II and postgres-R in particular.09:45
* jelmer waves09:45
jtvhi jelmer :)09:45
wgrantIs postgres-R another replication solution?09:45
jtvYes, but it's multi-master.09:45
wgrantAhh.09:46
wgrantHi jelmer.09:46
jtvUnfortunately it's not quite done yet.09:46
jtvWhich is a real shame.09:46
lifelessjtv: whats its relation to -XC ?09:46
jtvNone.09:46
lifelessso a different approach then ?09:46
jtvI haven't looked at -XC's architecture AFAIR09:46
jtvIt's an optimistic approach, but with a centrally imposed commit order.09:47
jtvOf course recovery can be really really hard.09:48
jtvWhen there's a "deadlock," whichever transaction comes last breaks.09:49
adeuringwgrant: thanks for qa-ing bug 705652!10:02
_mup_Bug #705652: Make remove_translations side aware. <qa-ok> <upstream-translations-sharing> <Launchpad itself:Fix Committed by adeuring> < https://launchpad.net/bugs/705652 >10:02
wgrantadeuring: I don't know translations fantastically, so you might want to QA in detail yourself. But it seemed to work OK, from what I could see in the code and MP.10:05
lifelessmrevell: have you seen jml around?10:31
mrevelllifeless, Not yet.10:31
=== al-maisan is now known as almaisan-away
=== almaisan-away is now known as al-maisan
lifelessjml: I'll try to catch you in my morning tomorrow10:42
lifelessnight all10:42
Ursinhanight lifeless10:43
=== matsubara-afk is now known as matsubara
=== al-maisan is now known as almaisan-away
Ursinhais there a correct tag to use when filing checkwatches related bugs?11:13
henningeHi Ursinha! ;-)11:21
Ursinhahi henninge :)11:21
=== henninge changed the topic of #launchpad-dev to: https://dev.launchpad.net/| PQM is in RC for devel | firefighting: - | On call reviewer: henninge (r-c only atm) | https://code.launchpad.net/launchpad-project/+activereviews
gmbUrsinha: For checkwatches we used to use bugwatch as  a tag.11:33
gmbAlso, "argh-argh-argh-stoppit-die".11:33
gmbBut that one wasn't adopted as official.11:33
Ursinhahahaha11:35
Ursinhathanks gmb11:35
gmbAhahaahahahhahahaha.11:42
gmbWindmill tests in my branch are failing because windmill isn't rendering a "Complete" element quickly enough.11:43
gmb... Hmm. Although windmill looks different than it last did. Coincidence?11:43
jtvhenninge: review done11:48
henningejtv: thank you!11:48
jtvnp11:48
mptHuh, TIL that the RPM Package Manager uses Launchpad for feature and bug tracking12:02
deryckMorning, all.12:03
gmbMorning deryck; just the man I wanted to talk to about Windmill :)12:04
deryckah happy way to start my day ;) :)12:04
deryckgmb, so what's up?12:04
gmbderyck: Yeah. Have you seen this before: http://pastebin.ubuntu.com/563808/12:04
gmbLooking at the code, it looks like Windmill is failing to render a "complete" element. The problem isn't LP code, it's Windmill itself.12:05
deryckgmb, no, it's the standard way Windmill fails when one of the YUI tests doesn't pass.12:06
gmbOIC.12:06
deryckgmb, you have to run the yui tests individually now to see which one failed.12:06
gmbHahaha.12:06
gmbJoy.12:06
gmbderyck: Thanks for the "help".12:06
gmb:)12:06
deryckI've gotten Windmill to spit that out before, but I don't recall how.  I think maybe:  ./bin/test -cvvt test_yuitests --layer=BugsWindmillLayer12:07
deryckgmb, spit out the individual test failing, I mean. ^^12:07
deryckgmb, and no problem :-)12:07
gmbderyck: Right. I'll give that a shot. Thanks.12:07
bigjoolsstub: do you want me to add the manual debversion patch rollout step to LPS, or have you got that covered?12:19
stubbigjools: What in particular where you thinking about? debversion.sql has already been applied to production if that is what you mean.12:26
bigjoolsstub: sweet12:27
=== almaisan-away is now known as al-maisan
Ronnielifeless: ping13:11
UrsinhaRonnie, he's gone already, I'm afraid13:12
Ronnieok, thx Ursinha13:12
Ursinhanp13:12
Ronniewgrant: ping13:13
Ronnieim trying to figure out the interaction between LD, LP and the openId provider: http://img812.imageshack.us/img812/7037/schemaopenidld.png13:15
wgrantRonnie: I'm not here either.13:19
wgrantHowever, the question mark is about right.13:19
wgrantIt is a terrible hack involving partial database replication.13:19
wgrantSSO does not store team memberships or timezones, though -- it gets them from the replicated LP DB.13:19
Ronniewgrant: does i access the LP DB each time the SREG is requested, or does it work on daily update or something?13:21
wgrantRonnie: The team membership tables are continuously replicated to it, just as if it was a normal DB slave.13:23
wgrantSo it should be up to date, at least within a couple of minutes.13:23
wgrantNormally seconds.13:23
Ronnieoke13:26
* wgrant sleeps.13:32
deryckhenninge, ping for standup14:00
henningederyck: oops, sorry. Be right there.14:05
=== matsubara is now known as matsubara-lunch
gary_posterhm.  when I try to run make schema I get "psycopg2.ProgrammingError: type "debversion" does not exist14:20
gary_poster".    This is from db patch 40.  I don't see anything on the lists about this.14:20
gary_posterstub: ^^ ?14:20
bigjoolsgary_poster: you need to update your lp-deps14:20
gary_posterah-ha thanks bigjools14:20
bigjoolsno prob - if this is the only problem with that branch I'm happy :)14:21
gary_poster:-)14:21
statikgoooooooooood morning launchpad hackers14:23
* bigjools waves at statik14:23
flacostegood morning statik14:24
flacosteback from the tropics!14:24
statiktropics are overrated, computers are more fun14:24
=== jkakar_ is now known as jkakar
=== didrocks1 is now known as didrocks
gary_poster:-)14:33
=== salgado is now known as salgado-lunch
bacabentley: i need to land a loggerhead branch for max.  do i just use 'bzr lp-land' to land it or do i need to do anything else?15:40
abentleybac, I imagine lp-land will work, but I've never landed a loggerhead branch.15:41
bacabentley: ok, i assumed you would've.  thanks.15:41
abentleybac, are you asking whether you should do something prior to landing, or just whether lp-land will work?15:42
bacabentley: actually wondering if i need to do something post-landing.  'bzr lp-land --dry-run' looks reasonable, so i assume it will work.15:43
abentleybac, I notice the branch isn't owned by pqm, so it's likely PQM doesn't manage landings for it.15:43
abentleybac, you could ask jam since he landed the most recent changes.15:44
bacabentley: https://code.launchpad.net/~mkanat/loggerhead/launchpad/+merge/46880 -- the merge to branch is owned by pqm15:44
abentleybac, you probably just push the branch.15:44
abentleybac, okay, for that branch I'd expect lp-land to work.  Trunk isn't maintained by PQM.15:46
=== matsubara-lunch is now known as matsubara
=== Ursinha is now known as Ursinha-lunch
sinzuijml: Do you want to mumble today?16:04
=== beuno is now known as beuno-lunch
deryckadeuring, hi.  Did you get a chance to look at that mail/bug/etc. that was qa related?16:18
adeuringderyck: yes; I'm right now fiugring out some qa tests16:19
deryckadeuring, ok, cool.  thanks16:19
jcsackettderyck: can i pick your brain about bug 632847 for a just a second?16:22
_mup_Bug #632847: Bug page OOPS when viewed in deactivated project context <404> <lp-bugs> <oops> <Launchpad itself:Triaged> < https://launchpad.net/bugs/632847 >16:22
jcsackettspecifically, do you think the fix is just removing the OOPS condition, or making sure the bug link works via the (not-deactivated) other context?16:22
* deryck looks at bug16:23
jcsacketti'm leaning towards the latter, but wondering if there might be precedent for the former in bug stuff.16:23
deryckjcsackett, I think we're trying to prevent people viewing deactivated projects.  So I think we shouldn't list bug tasks for dead projects.  That seems the right fix to me.16:27
deryckjcsackett, in other words, there should be no entry in the bugtask table that leads someone to want to click through to the dead project.16:28
deryckor bug list, or whatever16:28
deryckassuming the goal is to hide dead projects.  if that's not our goal (and I'm really not sure), then just make the dead project viewable with a "this is dead" notice :-)16:29
sinzuijcsackett: deryck. I agree with do not list. If we supported project deletion, we would want them deleted to. If the project is re-enabled, we expect them to show up again16:29
jcsackettright, but the task listing for the active one should work. that's a better statement of what i meant.16:29
jcsackettdig.16:29
deryckyes, right.  I think we all agree :-)16:30
jcsackettcool. thanks, deryck, sinzui.16:30
sinzuijcsackett: are you pondering what happens when you (~registry member) visits the bug for a deactivated project. Should /you/ see the bug task?16:32
sinzuiMost bugs have one task. I think the page will break if there are no tasks. We may not want to fix an oops that only we can see, but that is unlikely16:33
jcsackettsinzui: i think probably ~registry members should see the bug task, but it shouldn't be listed otherwise.16:35
jcsackettfor ~registry members, there isn't an OOPS. it's non ~registry folk who see the link, click it, and then get a 404 (with an OOPS).16:35
sinzuijcsackett: yes. I was pondering what would happen if we always hid the task, then we might mutate the oops to ourselves16:36
=== salgado-lunch is now known as salgado
jcsackettsinzui: i think it should be reasonably easy to check if the person can see deactivated contexts, and then throw in the parameter for whether or not to also list the associated tasks.16:37
=== deryck is now known as deryck[lunch]
=== al-maisan is now known as almaisan-away
=== beuno-lunch is now known as beuno
=== Ursinha-lunch is now known as Ursinha
=== deryck[lunch] is now known as deryck
lifelessUrsinha: checkwatches I think; it should autocomplete.18:11
lifelessjml: (hopeful) ping18:11
Ursinhalifeless, it's bugwatch18:12
lifelesskk18:17
jmllifeless: hi18:28
lifeless\o/18:28
lifelesshi18:28
lifelessI'd like to nab you for a vocal catchup at a convenient time18:28
lifelessjml: ^18:29
jmllifeless: sure. later tonight ok?18:29
lifelesssure18:29
lifelessjml: I have a couple of calls with us folk, but they can probably shuffle if you can tell me when your preferred time is18:30
lifelesss/us/north american/18:30
jmllifeless: I'll get back to you about that shortly18:31
lifelessexcellent, thank you18:31
jcsackettsinzui: mumble?18:34
=== gary_poster is now known as gary-lunch
lifelessI can has review ? https://code.launchpad.net/~lifeless/launchpad/showtimes/+merge/48754  - its not r-c, but I want to move it out of the coding lane in my head18:39
lifelessjcsackett: hi18:40
jcsackettlifeless: hello.18:41
lifelessjcsackett: I saw that you ran into a wall on bug 42190118:41
_mup_Bug #421901: Person:+bugs timeouts <lp-bugs> <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/421901 >18:41
lifelessjcsackett: I did some analysis on that in the weekend to help18:41
lifelessjcsackett: merging the union won't fix the bug that is reported - its one particular sub part that is the problem.18:41
=== matsubara is now known as matsubara-afk
lifelessjcsackett: separately, as something to keep in your toolbox - unions that are each highly selective can be more efficient than a very wide query - see for instance bug 71438318:43
_mup_Bug #714383: bugtask fti search is slightly faster as a union rather than combined or clause <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/714383 >18:43
jcsackettlifeless: huh. that flies in the face of anything i would expect. :-)18:44
lifelessjcsackett: sql tuning, like python, is 'best measured not guessed' :)18:44
jcsackett:-p18:44
lifelessanyhow18:45
lifelessI was hoping that narrowing the focus to changing the 'commented on' component would make bug tractable for you18:45
jcsackettlifeless: actually, it might and i may grab that again, but i needed to get out of it and do something i could get some success again on and thought i would leave it open in case someone else wanted it.18:47
lifelessjcsackett: cool18:47
lifelessjcsackett: I was checking to make sure I'd unblocked it; if/when you get back to it, if its still not helpful enough I'd be delighted to do more18:48
jcsackettlifeless: i will check it out again when i finish what i'm currently working on; if i need more data i'll definitely ping you.18:51
* lifeless waggles fingers together18:52
lifelessexcellent18:52
lifelessstatik: hi18:53
lifelessstatik: we catching up today?18:53
=== gary-lunch is now known as gary_poster
thumperderyck: ping20:30
deryckhi thumper20:30
thumperderyck: what's happening with lazr-js?20:31
deryckthumper, did you see my mail?20:31
thumperno20:31
* thumper looks for it20:31
thumperoh found it20:31
thumperok, thanks20:32
thumperdo you need a review?20:32
deryckthumper, not yet.  Finishing one little issue.  will get it up before I leave and you can review it while I'm away if you like.20:34
deryckbut it should be easy to review for someone during my am.  since we can't land it yet anyway.20:36
wallyworld_thumper: i gotta drop the kid to school early this morning. as in now :-( so i'll have to miss the standup. we can catch up later20:55
thumperwallyworld_: sure, np20:56
thumperderyck: ok20:56
thumperleonardr: ping20:56
leonardrthumper, yo20:56
thumperleonardr: care to join me in mumble?20:57
leonardrsure20:57
deryckthumper, actually EOD is on me.  I'll get this through review before your AM tomorrow, though.20:58
lifelessflacoste: skype?21:01
flacostelifeless: yes21:01
derycklater on, everyone21:03
LPCIBotProject devel build (423): FAILURE in 6 hr 5 min: https://hudson.wedontsleep.org/job/devel/423/21:22
LPCIBotLaunchpad Patch Queue Manager: [release-critical=wallyworld][r=jtv][bug=710591][incr] Provide21:22
LPCIBotTranslationMessage.acceptFromImport and21:22
LPCIBot.acceptFromUpstreamImportOnPackage.21:22
wallyworld_thumper: catch up now or later?21:28
StevenKI think he's still injecting coffee21:29
wallyworld_of course, i'm sure it's been 5 minutes since the last time :-)21:29
jmlhuwshimi: ping21:36
huwshimihuwshimi: Hello.21:36
huwshimiugh21:37
huwshimijml: Hello21:37
huwshimihow do I do that!21:37
jmlhuwshimi: skype?21:39
huwshimijml: Sure21:39
StevenKwallyworld_: I wonder if thumper has started stalking his coffee maker repair man yet21:45
wallyworld_StevenK: perhaps. it seems to be taking a long time to get fixed21:46
pooliehi all22:11
wgrantMorning poolie.22:13
pooliehi wgrant22:20
poolieiirc i can get the api to send xhtml by setting the right Accept header?22:20
jcsackettsinzui: i am stumped on the best way to double check if someone is member of ~registry for the purposes of deciding to list deactivated projects. thoughts?22:20
poolieah, application/xhtml+xml22:23
sinzuijcsackett: I think that is a role. registry_experts22:24
sinzuijcsackett: in security.py you use user.in_registry_experts or in other code you can get the team using getUtility(ILaunchpadCelebrities).registry_experts22:26
jcsackettsinzui: ah, fantastic. thanks.22:27
wgrantYou can adapt to IPersonRoles to get in_registry_experts anywhere.22:28
jcsackettwgrant: cool. thanks, both. :-)22:31
poolieleonardr, hi22:32
lifelessStevenK: hi22:35
lifelessStevenK: yesterday you were looking at consolidating the recipe exception handling code22:36
StevenKlifeless: Hai22:36
lifelessStevenK: did you get a handle on that, or would you like to work through it in more detail ?22:36
StevenKlifeless: https://code.launchpad.net/~stevenk/launchpad/set-recipe-text-bad-data/+merge/4885322:36
lifelessreviewed22:42
leonardrpoolie, hi22:42
lifelessI've suggested an alternate protocol for signaling 'error was handled'22:42
leonardryes, if you pretend to be a web browser the web service will send you xhtml22:42
lifelesswhat you have will work; I think what I suggest would be simpler.22:43
StevenKlifeless: I wasn't asking for one, but thanks22:43
lifelessI figured having read it I may as well :)22:44
StevenKlifeless: What do you mean 'only accept *args' ?22:44
lifelessStevenK: the normal idiom for functions like this in python is22:44
lifelessdef foo(its, params, callable, *args, **kwargs):22:44
lifelessbut you've got **kwargs missing, which is surprising, so worth a note about why (or perhaps just fix)22:45
=== salgado is now known as salgado-afk
wgrant:( nightly.sh ran yesterday22:49
wgrantSo the new shiny one won't run today :(22:49
pooliei just added a new official tag and it's not showing up in the official tags portal22:55
poolieis that a bug?22:55
wgrantWe have no cache invalidation mechanism.22:56
poolieit's cached and not invalidated?22:56
wgrantI thought that was cached. Let me check.22:57
wgrantYeah, cached publicly for an hour.22:58
StevenKlifeless: http://pastebin.ubuntu.com/564126/ was what you were thinking?23:03
lifelessStevenK: and remove the ret variable entirely23:07
poolieflacoste, https://bugs.launchpad.net/bugs/71441423:07
_mup_Bug #714414: unstack debian sid branches <code-hosting> <stacking> <Launchpad itself:In Progress by wgrant> < https://launchpad.net/bugs/714414 >23:07
lifelessStevenK: you can just return it directly23:07
StevenKreturn callable ... ?23:08
StevenKWell, duh :-)23:08
lifelessStevenK: and you don't need one raise per except23:08
lifelessStevenK: just put one raise at the bottom of the method23:08
StevenKlifeless: Anything else?23:09
lifelessStevenK: also, one minor thing is that you need to do 'raise ErrorHandled()' - note the brackets.23:09
lifelessStevenK: I think you had two calls to error_handled to update23:10
StevenKlifeless: I thought I did those ...23:10
lifelessStevenK: push the branch, I'll eyeball for you23:12
* StevenK checks he hasn't broken the tests while making tea23:12
pooliewgrant, thanks, https://bugs.edge.launchpad.net/launchpad/+bug/71490123:13
_mup_Bug #714901: updates to official bug tags not visible because of stale cached tags portlet <bug-tags> <bugs> <confusing-ui> <memcached> <Launchpad itself:Triaged> < https://launchpad.net/bugs/714901 >23:13
* poolie should get rid of bookmarks to edge23:13
pooliewgrant, thanks for taking 71441423:14
wgrantpoolie: I have the script, but it needs testing and landing.23:15
maxbfirefox has a very useful "forget history for this host" buried in the manager dialog23:17
wgrantpoolie: Has package-import been taught about wheezy yet?23:17
lifelesswgrant: I thought we were restarting it ?23:19
pooliewgrant, not yet23:19
wgrantlifeless: It needs to be taught about wheezy first.23:19
wgrantOr it will see the new wheezy pubs that gina imported this morning, and ignore them because wheezy isn't a valid series.23:20
StevenKlifeless: Changes pushed, diff updated.23:35
lifelessStevenK: oh, btw you don't need the super() call23:37
lifelessI totally glitched on that23:37
lifelessyou're not upcalling, you're side calling23:37
StevenKlifeless: But it's in a superclass?23:37
lifelessdoes'nt matter23:37
lifelessit would matter if you wanted that *specific* variant23:37
StevenKOkay, let me change that23:37
lifelessbut there are no variants, and if there were you'd want the one in your class23:37
lifelessself.error_handler23:38
lifelessself.error_handler(..)23:38
lifelessyes, that all looks good.23:38
lifelessone final suggestion would be s/error_handler/recipe_error_handler/23:38
StevenKRargh, I just reflowed stuff due to the method call being short23:39
* StevenK waves his arms at lifeless23:39
* lifeless waves back23:41
wgrantpoolie: Are we going to turn the package importer on before we unstack sid?23:46
lifelesswgrant: I think you should23:47
lifelessunstacking is orthogonal23:47
wgrantIt's not entirely orthogonal until bzr has a GC.23:48
lifelesswgrant: sure it is; you're going to unstack sid, which will have /zero/ impact on the revisions present in the basis for wheezy branches.23:48
lifelesswgrant: because the unstack will fetch them into the sid branches if they are in sids current dependency23:48
wgrantlifeless: Is stacking transitive?23:48
lifelesswgrant: yez23:49
lifelessyes23:49
lifelessthe only thing I can see going wrong is something in squeeze that sid doesn't reference - a dead head - that wheezy then references.23:49
wgrantOhh. I had always understood that it stacked on a branch's repo, not the whole branch.23:50
lifelessthe branch contains the pointer23:51
StevenKI can't see that happening -- if something isn't in sid, then it almostly certainly isn't in wheezy23:51
lifelessit points to another branch23:51
wgrantlifeless: Right, but I basically assumed it would just look for whatever repo was there.23:51
lifelessat runtime the chain of branches is loaded and a composite repository with (however many) extra revision sources is assembled23:51
wgrantNot follow further stacking references.23:52
wgrantRight.23:52
wgrantStevenK: Hmm? Why not?23:52
wgrantStevenK: wheezy is a copy of squeeze23:52
wgrantanything from t-p-u will be in wheezy but not sid.23:52
lifelessit has to follow branches, because otherwise the repository it found there would be broken23:52
StevenKSorry, I was thinking source package names only23:52
wgrantThis is a major problem.23:53
wgrantUgh.23:57
wgrantlifeless: Can you see a way to work around this? Unless when we unstack sid we also pull the missing revs into the repo of things stacked on it..23:59

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