=== Ursinha is now known as Marvin_ === mrevell is now known as mrevell-lunch === mrevell-lunch is now known as mrevell === salgado-afk is now known as salgado [15:01] #startmeeting [15:01] Meeting started at 09:01. The chair is barry. [15:01] Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE] [15:01] hello and welcome to this week's ameu reviewer's meeting. who's here today? [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:01] me [15:02] me [15:02] cprov: ping [15:02] danilos: ping [15:02] me [15:02] EdwinGrubbs: ping [15:02] me [15:03] me [15:03] intellectronica: ping [15:03] me [15:03] salgado: ping [15:03] [TOPIC] agenda [15:03] New Topic: agenda [15:03] me [15:03] * Roll call [15:03] * Don't forget your OCR slot [15:03] * Action items [15:03] * Mentoring update [15:03] * need a volunteer to mentor noodles [15:03] * Peanut gallery (anything not on the agenda) [15:03] * JS coding guidelines (mars, intellectronica) [15:03] * ampersands-in-urls (abentley) [15:04] [TOPIC] * Don't forget your OCR slot [15:04] New Topic: * Don't forget your OCR slot [15:05] i've heard some rumors that folks sometimes miss their ocr slot. just wanted to ask that you please try to fill them. we all count on each other to get branches reivewed and landed [15:05] i know we're all busy, but think of the team! [15:05] if you really can't fill your slot for some reason, please let me or your fellow reviewers know, and try to find a backup if possible [15:06] and remember, we have sabbaticals if you're burned out for a while [15:06] that's it from me! any thoughts? [15:06] yeah, I feel guilty. [15:07] I will be on secondment to the foundations team for the next 3 months [15:07] barry: Perhaps, let everyone know if you [15:07] me [15:07] 're sick and can't find a replacement. [15:07] al-maisan: Ubuntu Foundations, to be precise [15:07] abentley: +1 [15:07] ..and hence not in a position to review on Tuesdays [15:07] (rather than just reviewers) [15:07] a quick email to the ml would help [15:07] bigjools: thanks for the correction :) [15:08] fjlacoste: is this nick the dutch version for 'flacoste' ? [15:08] al-maisan: cool, we'll need to shuffle ocr schedule around [15:08] barry: thanks! [15:09] al-maisan: i'll mark up ReviewerSchedule. tuesdays aren't too bad, with gmb in euro and bac & rockstar in west [15:09] OK .. that's good. [15:09] I am off this Thursday (swap day) [15:09] which means, no euro coverage tomorrow unless someone wants to take over [15:09] danilos: err, me too, I was counting on you ... [15:10] * bigjools has a 10k branch coming soon as well, what a shame [15:10] any candidate willing to take Thursday out of my hands is welcome to [15:10] 10k LOC, that is [15:10] danilos: ouch! no coverage for tomorrow? [15:10] This meeting probably isn't a good venue to share when you'll miss OCR [15:10] barry: it's already bad now that I'm on EU timezone. [15:10] rockstar: well, if we are reminded how we need to find a replacement, it might be a good place to find one [15:11] cprov, barry: ok, let's take this outside the meeting [15:11] bigjools: Good luck with that ;) [15:11] danilos: at the expense of the other things on the agenda? [15:11] * cprov nods [15:11] r=gmb! [15:11] :) [15:11] AHAHAAHAHANo. [15:11] rockstar: if it's easy, yes... since nobody has volunteered, it's not, so let's move on [15:11] cprov: we can move you to euro slot and we can split up bac/rockstar or salgado/barry [15:12] i will now skip around [15:12] [TOPIC] mentoring update [15:12] New Topic: mentoring update [15:12] * need a volunteer to mentor noodles [15:12] we need a mentor for noodles, preferrably in euro timeslot [15:12] I can do it. [15:13] Thanks cprov :) [15:13] cprov: awesome thanks [15:13] It's my pleasure. [15:13] cprov, noodles775 we'll discuss off line where we can slot you guys in [15:13] Yup [15:13] okay [15:13] off-line? like writing letters? [15:14] ;) [15:14] henninge: yes. Support your local post. [15:14] henninge: pigeon (not pidgin :) [15:14] henninge: any word on your mentoring? how's it going? [15:14] rockstar: In soviet canada, posts support you. [15:14] abentley: :) [15:14] barry: very well, thank you [15:15] barry: very well, thank you [15:15] barry: adeuring is doing a good job [15:15] i knew he would! good to hear, thanks [15:16] any other mentoring issues? [15:16] well, I'd say, no complaints with henninge's work :) [15:16] adeuring: ;) [15:17] adeuring: i hope you're cracking the whip! [15:17] :) [15:17] barry: from time to time ;) [15:17] :-D [15:17] [TOPIC] action items [15:17] New Topic: action items [15:18] * gary_poster to take importfascist and rSP() discussion to ml [15:18] h'ain't done it. Intend to do it today. [15:18] gary_poster: cool [15:19] * allenap to look into storm/sqlobject result set compatibility [15:19] oops, he's not here [15:19] allenap's away this week [15:19] * flacoste to work on API reviewer cheat sheet [15:19] I suspect he didn't get very far though [15:19] i didn't [15:19] gmb: nod [15:19] fjlacoste: keep it on the list? :) [15:20] sure [15:20] he changed his nick this week out of embarassment maybe [15:20] lol [15:20] cool [15:20] [TOPIC] * Peanut gallery (anything not on the agenda) [15:20] New Topic: * Peanut gallery (anything not on the agenda) [15:20] actually, there were two items we didn't get to from last week [15:20] * JS coding guidelines (mars, intellectronica) [15:20] mthaddon: can we close merge to devel? [15:21] mars, intellectronica can either of you talk about this today? [15:21] fjlacoste: wrong room :-) [15:21] i don't remember raising this. mars? [15:21] barry, yep [15:21] mars: the floor is yours [15:21] perhaps just to remind about testing with devmode off as part of the review [15:21] so this is a question to the JavaScript coders in the room [15:22] in Python, we are always explicit in comparisons: if x is not None [15:22] instead of: if !x === fjlacoste is now known as flacoste [15:23] mars: does js have the same expanded notion of trueness/falseness as python, or is it more strict like java? [15:23] so Tom and I were debating doing the same in JavaScript. I prefer the coercive form, he prefers explicit [15:23] barry, the types aren't as clean [15:23] barry: it's even more lax, and very confusing, with coercing to boolean [15:23] I prefer the explicit, but it's not always possible. [15:23] barry, in JavaScript, null == undefined == 0 == false [15:24] Er, not always clean. [15:24] my position was that i like the explicit version, having learned to appreciate it coding (and reading) python [15:24] right [15:24] intellectronica: I tend to agree with you. [15:24] rockstar: why is it not always possible? [15:24] and mine was that because JavaScript can throw 'undefined' at you, you need the coercive form [15:24] rockstar: both options are possible technically. it's just a matter of style [15:24] mochikit has a whole equivalence framework in part because of the JS bool mess (but there are other nastinesses as well) [15:24] gary_poster, yech [15:25] didn't know that [15:25] barry: intellectronica: I've been bitten by bugs in cases of empty strings evaluating to true. [15:25] ew [15:25] I just worry about all tests having to be (x === null or x === undefined) which is unweildy. [15:25] oof [15:25] barry, and [] and {} are also true [15:25] rockstar: well, that's exactly why you'd want to compare explicitly [15:25] ew ew [15:25] I feel like === means we're back to php land. [15:26] intellectronica: so you're saying I should have used if x != '' [15:26] rockstar: yup [15:26] remember that in our python style guide, we're allowed to use "if not foo:" when foo can be of several types (e.g. None or [] for example) [15:26] rockstar: or use foo.length [15:26] we just require a comment explaining that the simpler choice was deliberate [15:26] We kinda lose the loose typing at that point. :/ [15:26] explicit comparison is an easy rule to follow. just compare explicitly to anything you might expect be in the value [15:26] rockstar: if x !== '' [15:27] barry, ok, in JavaScript, you sometimes still want explicit comparison, if null is a flag value [15:27] flacoste: yea, I know. Was in a hurry. [15:27] mars: yep [15:27] barry: Even so, I find "if foo == [] or foo is None" shorter than "if not foo" plus a comment. [15:27] barry, so in my mind the question more revolves around the 'wandering undefineds' problem [15:28] Okay, I think we should be explicit, and anywhere we aren't requires some serious 'splainin. [15:28] rockstar: loose typing is sometimes great, and sometimes it makes the code hard to read. if you have loose typing it's up to you to protect against getting values you don't expect [15:28] abentley: well, if len(foo) == 0 or foo is None, but it /is/ more explicit [15:28] intellectronica: yes, this is true. Python really is awesome at its typing. [15:29] aren't unexpected undefineds a sign of buggy code? [15:29] so, is "if (!config) {}" hard to read? [15:30] mars: not hard to read, hard to know the intent [15:30] intellectronica, rockstar, because 'config' could be null, if the user explicity said "I don't want this parameter", or "undefined", if the user just passed in some_config_obj.some_attr [15:30] mars: it is, yes, harder than if (config !== null && config !== undefined) [15:30] mars: yeah, I agree with intellectronica [15:31] ok. I should ask what you guys thing of trinary operators too, because that is the other place where I use coercion [15:31] trinary operators? as in condition ? then-expr : else-expr ? [15:31] var bar = cfg ? cfg.foo : 0; [15:32] * barry looks at his own first pathetic attempt at js and realizes he needs to fix his code ;) [15:32] but I guess the intent there is clear [15:32] and it's idiomatic, so no issue? [15:32] mars: thses should be used sparingly, but when you do, there's no reason why you can't use the verbose version [15:32] the case above is quite idiomatic [15:32] mars: i would love to see parentheses after the = and before the ; [15:32] mars: let us avoid them. Clarity in code, and optimization when the javascript is "compiled" [15:33] but following a simple rule is so much easier than making exceptions for idioms or whatever [15:33] intellectronica: +1 [15:33] intellectronica: +1 [15:33] +1 [15:34] +1 [15:34] do we need to vote? mars? [15:34] you guys would have a great time browsing the jquery source code then :) [15:34] :D [15:34] barry, ^ that looks like a vote to me [15:34] mars: :) [15:34] a majority vote, rather [15:34] yep [15:35] DONE! [15:35] [AGREED] explicit is better than implicit in javascript comparisons [15:35] AGREED received: explicit is better than implicit in javascript comparisons [15:35] * ampersands-in-urls (abentley) [15:35] abentley: i don't remember the details on this, do you? [15:35] barry: We didn't talk much. [15:36] abentley: the floor is yours [15:36] Everyone knows that ampersands must be provided as entity references in HTML, right? [15:36] e.g. & [15:37] Everyone knows that this applies when the ampersand is part of a URL in an attribute, right? [15:37] yes :) [15:37] e.g. [15:37] no, I didn't know that [15:38] mars: It is very common to do otherwise, but it's not valid HTML. [15:38] would the w3c validator catch that? Or our linter? [15:38] abentley: i think the nest solution for that is to build your URL in python, using a formatter [15:38] it's quite rare that you'll have a fixed URL with GET parameters you can include in a template directly [15:39] mars: I think the wc3 validator would. I can report back if you like. [15:39] abentley: wouldn't that be example.ort?a=b%26b&b=c ? [15:39] intellectronica: That's kinda where I'm going to. Should we be calling "escape" on URLs that we provide to TAL as part of a structure? [15:40] abentley, we first need to answer a larger question - it is valid HTML, but do we actually feel the need to adhere to it strictly? [15:40] barry: yea, that is right. [15:40] abentley, I ask because I don't know if we absolutely ensure we have valid markup throughout Launchpad [15:40] abentley, or if it is a "nice to have" [15:40] mars: it's a goal we should aspire to. [15:40] barry: No, that would make the value of a "b&" [15:40] barry: I think. [15:40] abentley: i think we need to go further, and have a function that builds the url for us from base url and a two-tuple of query parameters [15:41] rockstar, agreed [15:41] th evalue would be 'b&b' [15:41] was that not the intent? [15:41] barry: no. [15:41] er, sorry, 'b&' [15:41] The intent was a=b, c=d [15:42] Well, in the case that brought this up, I was just using canonical_url, so maybe canonical_url would be good to escape these things. [15:42] rockstar: canonical_url is used in other places than html templates [15:43] rockstar: If canonical_url html-escaped the URLs, they would not be valid URLs. They would be the HTML-escaped forms of valid URLs. [15:43] intellectronica: well, urlllib.urlencode() is more or less what we should be using i think [15:43] BjornT: okay, I was just throwing it out there. [15:43] and we may already be using it [15:44] barry: The unescaped URL is "example.ort?a=b&c=d" and the escaped version is "example.ort?a=b&c=d" [15:44] but if canonical_url would accept query parameters, all we need is for fmt:url to escape the result [15:45] or maybe i'm talking nonsense, because how would you pass the parameters to fmt:url :-/ [15:45] abentley: how does a url parser know that your second example doesn't map to {'a':'b', 'amp;c':'d'} ? [15:45] intellectronica: Right. TAL can DTRT if we let it. But if we pass it as a structure, we have to take care of it ourselves. [15:46] barry: A URL parser should not see the escaped version, because the HTML parser should have already decoded it. [15:46] abentley: so i guess just 1. make canonical_url accept query_parameters. 2. add a wrapper around it that escapes the result [15:46] intellectronica: +1 [15:46] well, the html parser then. seems ambiguous syntax to me [15:46] barry: & always introduces an entity reference. Where's the ambiguity? [15:47] abentley: you are saying that all urls containing & to separate query parameters in HTML should be escaped? [15:47] intellectronica: why do we need a wrapper, instead of using escape() on the result? [15:47] well not always. it doesn't in the a=b&c=d case (even if that's not standard, its widespread common practice) [15:47] BjornT: one less function to call. but i agree, it doesn't matter that much [15:48] flacoste: Yes. [15:48] ? [15:48] the above would be correct? [15:48] flacoste: you could simplify that by saying that all urls in html should be escaped [15:48] but nobody does that! [15:48] barry: The spec is unambiguous. Browsers have to be more careful. [15:48] that's non-sense [15:48] all of the web is broken [15:48] i mean even gmail doesn't escape it's URLs [15:48] flacoste: Okay, so your vote is to ignore the parts of HTML that we don't like? [15:49] yes [15:49] abentley: maybe, but in that case, it's all guesswork [15:49] especially if it's a part that nobody cares about [15:49] intellectronica: well, using escape means one less function to maintain. it also seems that passing query parameters to canonical_url is quite rare; usually we have specific views we pass the parameters to [15:49] flacoste, yes, same goes for CSS IE hacks - it generates invalid CSS, but pragmatism justifies it [15:49] flacoste: that sounds very Microsoft of you. :) [15:49] barry: That's right. Wouldn't it be nice if more sites provided valid HTML so they didn't have to? [15:49] abentley: sure. but it'll never happen :) [15:49] abentley: did you try HTML escaping a URL in an href? [15:50] abentley: can you tell me, are you trying to solve a real problem (i.e. is there an open bug)? [15:50] flacoste: I've done it in the past. I didn't do it specifically for this meeting. [15:50] abentley: and the browser submitted the right thing? [15:50] abentley: i'm not being facetious. i'm really curious if we have users who are affected by this [15:51] barry: It's not related to a bug. It's something that came up in a review. [15:51] abentley: ah, ok, thx [15:51] flacoste: Yes. [15:51] abentley: i'm sorry, we've run out of time again. and apologies for going late today. perhaps we can take this to the ml? [15:51] flacoste: gmail's front page does escape &. at least the links i looked at [15:52] really! [15:53] flacoste: also, we usually do it in launchpad as well, because tal does it for us [15:53] flacoste: On this page, the "wish I were an asshole" link is escaped: http://aaronbentley.com/music/news/myspaced-11-09-2006 [15:53] and amazon too, look at that! [15:54] you learn something new everyday! [15:54] barry: No worries. I'm not sure it's worth ML discussion, even. [15:54] we should do this by not doing this . iow, whatever code we use to inject these urls into html pages should do it for us [15:55] abentley: ok. let's cut this off then, since we're 10 minutes over [15:55] barry: that's how it works today, except that you can turn it off by using structure [15:55] BjornT: so structure should dtrt! [15:56] anyway, we can take this up again next week or go to the ml [15:56] barry: I think that would involve AI... [15:56] #endmeeting [15:56] Meeting finished at 09:56. [15:56] thanks barry [15:56] apologies for going over today [15:56] thanks barry [15:56] abentley: thanks for bringing this up! === salgado is now known as salgado-lunch === salgado-lunch is now known as salgado === Marvin_ is now known as Ursinha === Ursinha is now known as Marvin_ === salgado is now known as salgado-afk [23:31] barry: hello [23:32] #startmeeting [23:32] Meeting started at 17:32. The chair is barry. [23:32] Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE] [23:32] mwhudson: hi [23:32] jml: hi [23:32] thumper: hi [23:32] jml, thumper ping? [23:32] hi [23:33] [TOPIC] agenda [23:33] New Topic: agenda [23:33] * Roll call [23:33] * Action items [23:33] * Peanut gallery (anything not on the agenda) [23:33] * JS coding guidelines (mars, intellectronica) [23:33] * ampersands-in-urls (abentley) [23:33] any word from thumper? [23:34] he said he was going to attend. [23:34] i'm sure he'll read this eventually :) [23:34] ok, we'll just start anyway :) [23:34] hereish [23:34] [TOPIC] update from ameu [23:34] New Topic: update from ameu [23:35] so a couple of things from the ameu meeting... [23:35] al-maisan will be on load to ubuntu foundations for the next 3 months so won't be doing reviews [23:35] cprov moved to euro timezone and will be mentoring noodles [23:35] ubuntu foundations ? [23:35] i'll need to juggle the ocr schedule a bit [23:36] mwhudson: apparently so! [23:36] which team is that again? cjwatson's? [23:36] well, Robbie's the manager, but yes. [23:36] danilo_ and cprov are off tomorrow, lots of people are off on friday (not us nose-to-the-grindstone americans tho) [23:36] dunno what he'll be working on [23:37] ok [23:37] we talked about javascript coding guidelines for true/false comparisons and decided that our js code should follow python's eibti rules [23:38] i.e. if (foo === undefined) over if (!foo) [23:38] okay [23:38] * thumper hopes if (!foo) [23:38] sure. as long as it works. [23:38] we also had a long discussion about escaping & in url query strings, without any resolution [23:38] thumper: sorry, nope [23:39] are our javascript coding guidelines written down anywhere? [23:39] :( [23:39] thumper: mars was the lone holdout [23:39] I can't spot the question being responded to [23:39] mwhudson, http://dev.launchpad.net/JavaScriptReviewNotes [23:39] mwhudson: such as they are: https://dev.launchpad.net/JavaScriptReviewNotes [23:40] mars: hi! this reminds me: can you capture this decision on that page? [23:40] sure [23:40] mars, barry: thanks [23:40] mars: thanks [23:40] that's it from ameu [23:40] [TOPIC] action items [23:40] New Topic: action items [23:41] no action items for asiapac [23:41] [TOPIC] mentoring update [23:41] New Topic: mentoring update [23:41] none for you guys ;) [23:41] that's really all i have, so... [23:42] [TOPIC] peanut gallery [23:42] New Topic: peanut gallery [23:42] do you guys have anything you want to bring up? [23:42] nothing from me. there's not been any code to review :) [23:42] heh yeah [23:42] integration iz us [23:42] you guys are welcome to join me friday america time :) [23:43] well, if there's nothing else... [23:44] still no. [23:44] okay! [23:44] #endmeeting [23:44] Meeting finished at 17:44. [23:44] thanks guys [23:44] thanks barry