[15:00] <bac> #startmeeting
[15:00] <MootBot> Meeting started at 09:00. The chair is bac.
[15:00] <MootBot> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]
[15:00]  * bigjools is here
[15:00] <bac> who is here?
[15:00] <mars> me
[15:00] <wgrant> me
[15:00] <bigjools> ha, I read your mind!
[15:00] <noodles775> me
[15:00] <henninge> me
[15:00] <sinzui> me
[15:00] <mars> bac, gary-dentist sends his apologies
[15:01] <jelmer> me
[15:01] <abentley> me
[15:01] <bac> mars: i was assuming that would be the case
[15:01] <bac> and deryck as well
[15:02] <bac> EdwinGrubbs, danilos, gmb: pings
[15:02] <danilos> me
[15:02] <bac> flacoste: ping
[15:02] <EdwinGrubbs> me
[15:02] <flacoste> me
[15:03] <bac> allenap: yo
[15:03]  * bac thought the mass invite was such a good idea...
[15:03] <bac> [topic] agenda
[15:03] <bac> * Roll call
[15:03] <bac>  * Agenda
[15:03] <bac>  * Outstanding actions
[15:03] <bac>  * Mentat update.
[15:03] <bac>    * salgado (ui)
[15:03] <MootBot> New Topic:  agenda
[15:03] <bac>    * henninge (ui)
[15:03] <bac>    * stevenk (code)
[15:03] <bac>  * New topics
[15:03] <bac>   * Nice Storm gotcha (bigjools)
[15:03] <bac>   * canonical.launchpad is still deprecated, sinzui (AsiaPac meeting only)
[15:03] <bac>   * [[http://paste.ubuntu.com/507156/|Truth conditionals and the new "all" and "any" functions]], henninge
[15:04] <adeuring> me
[15:04] <allenap> me
[15:04]  * sinzui read that as "sinzui is deprecated" At least he is not obsolete
[15:04] <bac> salgado: ping
[15:04] <bac> [topic] mentoring update
[15:04] <MootBot> New Topic:  mentoring update
[15:05] <salgado> me!
[15:05] <sinzui> we are getting lots of UI reviews
[15:06] <sinzui> I do mean a lot, more than last month
[15:06] <sinzui> well, more than aug and jul
[15:06] <salgado> some weeks I get more, others I get less
[15:06] <henninge> I enjoy them but please try to provide screenshots ...
[15:06] <henninge> ... or even screencasts, like noodles775 does ;-)
[15:07] <salgado> yeah, screen[shots,casts] help a lot for small changes
[15:08] <salgado> but when they're not trivial I like to exercise them manually to test for corner cases and all that
[15:08] <henninge> true. Did not have any of those yet, though ... ;)
[15:10] <noodles775> Yeah, I think it's nearly always worth exercising manually - I just provide the screencasts to demo and get the context.
[15:11] <salgado> it's also nice when devs add demo data (aka dev sample data) that makes it easy to exercise the changes
[15:11] <bac> sorry about that, my internet died
[15:11] <bac> what did i miss?
[15:11] <sinzui> Paris is in flames
[15:11] <salgado> bac, http://paste.ubuntu.com/507276/
[15:11] <bigjools> how did they do that when they're on strike?
[15:12] <danilos> salgado, +1 for adding dev sampledata! I want to see much more of it
[15:12] <bac> noodles775: can you provide a link to one of your screencasts?  i've never seen one
[15:13] <noodles775> bac: https://code.edge.launchpad.net/~michael.nelson/launchpad/652838-select-diffs-for-syncing/+merge/37572
[15:13] <bac> noodles775: thanks
[15:13] <noodles775> (the mp has the screencast as well as a script for sample data setup).
[15:13] <bac> [topic] new topics
[15:13] <MootBot> New Topic:  new topics
[15:13] <bac> [topic] Nice Storm gotcha (bigjools)
[15:13] <MootBot> New Topic:  Nice Storm gotcha (bigjools)
[15:13] <wgrant> :(
[15:13] <bigjools> heh
[15:14] <bigjools> I'd like to point you all to revision 11670 of devel
[15:14] <bigjools> notice the change - a storm expression was using Python's "in" instead of Storm's is_in
[15:15] <bigjools> this has been quite catastrophic for soyuz
[15:15] <bigjools> because the former was evaluating to True all the time
[15:15] <danilos> :(
[15:15] <sinzui> yuck
[15:15] <bigjools> so this is just a warning to not fuck up quite as spectacularly
[15:15] <wgrant> You'd think it would fail to False, but nooo.
[15:16] <bigjools> I'm wondering if we can get it lint checked?
[15:16] <sinzui> it's in a string, and pyflakes/pep8 ignore string content
[15:17] <wgrant> It's not in a string.
[15:17] <bigjools> or perhaps make Storm DTRT
[15:17] <wgrant> I'm not sure that Storm can be fixed.
[15:17] <bac> bigjools: is there a storm bug?
[15:17] <sinzui> but I think I can write a regexp that locates problems like this
[15:17] <wgrant> It's probably just seeing that __eq__ returns something that isn't False.
[15:17] <bigjools> bac: I don't know if it can be a bug or not
[15:17] <bac> bigjools: i mean, have we filed a bug or discussed with the stormers
[15:18] <bigjools> bac: not yet, I'm still in the middle of cleaning up the mess
[15:18] <bac> right
[15:18] <bigjools> when things are calmer I can do that
[15:18] <bigjools> anyway, that's it from me
[15:19] <bac> sinzui: are you going to take a look to see if lint can catch it?  can i assign you an item?
[15:19] <sinzui> I am
[15:19] <bac> [action] sinzui to try to fix lint wrt storm gotcha
[15:19] <MootBot> ACTION received:  sinzui to try to fix lint wrt storm gotcha
[15:19] <bigjools> it would be inside a .find() of course
[15:19] <bac> [topic] * [[http://paste.ubuntu.com/507156/|Truth conditionals and the new "all" and "any" functions]], henninge
[15:20] <MootBot> New Topic:  * [[http://paste.ubuntu.com/507156/|Truth conditionals and the new "all" and "any" functions]], henninge
[15:20] <henninge> everybody please read the paste ;-)
[15:20] <henninge> http://paste.ubuntu.com/507156/
[15:20] <bac> here's the link again http://paste.ubuntu.com/507156
[15:20] <MootBot> LINK received:  http://paste.ubuntu.com/507156/
[15:21] <allenap> bigjools, sinzui: Storm should probably not compile a raw True. It's a smell that something is wrong.
[15:21]  * sinzui has used if val not in (None, '')
[15:21] <allenap> henninge: any() and all() can consume generator expressions.
[15:21] <henninge> yes, any iterable
[15:21] <allenap> any(translation is not None and translation != "" for translation in translations)
[15:22] <henninge> yeah, ok ...
[15:22] <henninge> ;-)
[15:22] <bigjools> allenap: yes, good point
[15:22] <henninge> although is that not a 2.6ism with out the [] ?
[15:23] <allenap> henninge: I was against the explicit truthiness testing originally, but if we're having it then I feel we should stick to it.
[15:23] <allenap> No, it worked on 2.5 I think.
[15:23] <bigjools> FWIW jelmer and I found a bug in Soyuz code earlier where it was using "if thing:"
[15:23] <bigjools> instead of something more explicit
[15:24] <abentley> allenap, but also: len([translation is not None and translation != "" for translation in translations]) != 0
[15:24] <allenap> And, fwiw, I'm on-board with explicit conditionals now.
[15:24] <henninge> ok, I had not thought of allenap's solution,
[15:24] <henninge> that would work well for me, too.
[15:25] <henninge> No softening the policy, then?
[15:25] <allenap> abentley: That's cool, but I think any() and all() do add to readability, and they can shortcut too.
[15:25] <bac> henninge: sounds like there is not much support
[15:26] <danilos> I kind of feel like we should losen it
[15:26] <bigjools> I think they are dangerous
[15:26] <danilos> any() sounds quite to the point to me (i.e. it's not exactly like "if something" vs "if something is None", where being explicit does add value; with any() you are being explicit to a point)
[15:27] <henninge> danilos: but it *is* doing "if something" internally and you cannot do anything about it.
[15:27] <danilos> henninge, right, that's why I agree we should see what everybody feels about it :)
[15:28] <henninge> ;-)
[15:28] <sinzui> I see any as explicit. It looks like it is removing redundancy from the code
[15:28] <abentley> allenap: I'm okay with the semantics of your revised version, but I don't agree it's more readable.  It's one more thing to remember how it works.
[15:29] <henninge> abentley: I find the word "any" quite obvious ...
[15:29] <allenap> danilos: henninge's example could be split into two lines to enhance readability: valid_translations = (t is not None and t != "" for t in translations); if any(valid_translations): ...
[15:29] <noodles775> +1 for allenap's suggestion.
[15:29] <bac> allenap: but at that point you could just see if you have an empty list, no?
[15:29] <allenap> It's a builtin too; no hiding from it.
[15:30] <abentley> henninge: not me.  Does it mean "length > 1" or does it mean "anything in this iterable is true"?
[15:30] <allenap> bac: The generator expression combined with any() means you can shortcut as soon as a translation is available.
[15:30] <henninge> abentley: well, the latter.
[15:31] <allenap> If translations is expensive to iterate over then it could make a difference.
[15:31] <abentley> henninge: That's not the most obvious meaning to me, but with storm, "any" has yet another meaning.
[15:31] <danilos> I don't think we need a solution to replace bare "any()" use in this meeting, we should just decide whether we want to stop basic usage as non-explicit
[15:31] <allenap> abentley: Yeah, that's unfortunate.
[15:31] <danilos> allenap, it is not, it's a list of at most 6 items
[15:32] <allenap> danilos: Here, okay, but in general it might be useful to shortcut evaluation.
[15:32] <allenap> danilos: Which is what the for loop does.
[15:33] <danilos> allenap, right, but as I said, I am not interested in valid use cases of any(), but rather, invalid, in terms of our "be-explicit" policy :)
[15:33] <allenap> Anyway, I thought this was just about being explicit in conditionals? I think we should be explicit everywhere, including in any() and all().
[15:33] <danilos> allenap, yeah, but not many people have an opinion on any() in particular
[15:34] <henninge> allenap: right, that was my questions and that is an answer ... ;)
[15:34] <henninge> danilos: no opinion, no change ...
[15:34] <danilos> henninge, that's right, let's move on bac :)
[15:35] <bac> henninge: right.  would you still update the page to include the summary?
[15:35] <henninge> bac: I am done. I will add a comment to the style guide to suggest allenaps code.
[15:35] <bac> thanks
[15:35] <henninge> :)
[15:35] <bac> [topic] anything else?
[15:35] <MootBot> New Topic:  anything else?
[15:36] <bac> no?
[15:36] <bac> #endmeeting
[15:36] <MootBot> Meeting finished at 09:36.
[15:36] <bac> thanks for coming
[15:36] <henninge> thanks bac!
[15:39] <bigjools> cheers bac