[14:00] <barry> #startmeeting
[14:00] <MootBot> Meeting started at 09:00. The chair is barry.
[14:00] <MootBot> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]
[14:00] <barry> hello and welcome to this week's ameu reviewers meeting.  who's here today?
[14:00] <flacoste> me
[14:00] <sinzui> me
[14:00] <vednis> me
[14:01] <vednis> gah
[14:01] <mars> me
[14:01] <bac> me
[14:01] <salgado> me
[14:01] <mars> so, the team on sprint is all here
[14:02] <barry> [TOPIC] agenda
[14:02] <MootBot> New Topic:  agenda
[14:02] <barry> == Agenda ==
[14:02] <barry>  * Roll call
[14:02] <barry>  * barry to miss the next two weeks
[14:02] <barry>  * plurals, curtis
[14:02] <barry>  * Peanut gallery (anything not on the agenda)
[14:02] <barry>  * Action items
[14:02] <barry>  * Mentoring update
[14:02] <barry> [TOPIC] * barry to miss the next two weeks
[14:02] <MootBot> New Topic:  * barry to miss the next two weeks
[14:02] <EdwinGrubbs> me
[14:03] <barry> so, i'll be at pycon the next two weeks and won't be able to meet.  does someone want to take over chair duties for the next two weeks or should we bag the meeting?
[14:03]  * barry can guess based on today's stellar attendance :)
[14:04] <barry> i guess i'll send a message to the ml and we can just meet up again in 3 weeks
[14:04] <barry> [TOPIC] * plurals, curtis
[14:04] <MootBot> New Topic:  * plurals, curtis
[14:04] <barry> sinzui: do you want to take this one?
[14:04] <bigjools> me
[14:05] <sinzui> I have struggled without how to write code in a clean and consisent fashion to handle cases where the page will say 1 member or 2 members.
[14:05] <gmb> barry: Bugs team is sprinting this week, so BjornT, intellectronica, allenap, adeuring and I won't be here...
[14:06] <barry> gmb: thanks
[14:06] <sinzui> I once used ngettext, but I was told to remove it
[14:06] <sinzui> should we have a tale formatter to handle this in the template?
[14:06] <bigjools> how would it handle irregular plurals?
[14:06] <sinzui> view/count/fmt:singular/member/members
[14:07] <mars> sinzui, probably
[14:07] <bac> what is the rationale for not using ngettext?
[14:07] <mars> sinzui, since every other web framework has said formatter, we may take that as a hint ;)
[14:07] <sinzui> bigjools: I do not know
[14:07] <bigjools> sinzui: you answered me already with your example, you just provide the alternative.  np.
[14:07] <barry> does zpt (or whatever sidnei is experimenting with) support this?
[14:08] <sinzui> TALES i18n does not support ngettext either :(
[14:08] <barry> flacoste: what do you think?
[14:08] <flacoste> well
[14:09] <flacoste> i think ngetttext is the way to go
[14:09] <flacoste> but
[14:09] <flacoste> curtis' suggestion is a good worst-solution
[14:09] <flacoste> why can't we use ngetttext?
[14:09]  * sinzui nods
[14:09] <flacoste> hmm, i wish gary was here
[14:09] <sinzui> I don't recall the reason I was told to remove it
[14:10] <sinzui> danilos: was kind enough to tell me to use it
[14:10] <gary_poster> me, sorry
[14:10] <sinzui> My concern is that we void this situation my writing mediocre text like members: 1
[14:10] <barry> gary_poster: hi.  we're asking about plural forms and ngettext in templates
[14:10] <flacoste> gary_poster: we are discussing how to do plurals
[14:10] <sinzui> s/void/avoid/
[14:11] <flacoste> gary_poster: zope.i18n doesn't have any support for it i htink
[14:11] <danilos> if are ever going to do proper i18n, we'd have to extend zope.i18n
[14:11] <gary_poster> barry, flacoste: ok, thanks.  no support for plurals?  that's surprising
[14:11] <danilos> if we are not interested in l10n as well, coming up with a simpler alternative might do the trick
[14:12] <barry> gary_poster: sinzui suggested a formater, e.g. view/count/fmt:singular/member/members
[14:12] <flacoste> barry: the problem with that is that it hurs i18n
[14:12] <barry> flacoste: agreed!
[14:12] <flacoste> barry: since that only supports english
[14:12] <gary_poster> I'd want to go to the author (Stephan Richter, IIRC) and verify before going too far; I'd also strongly believe that Zope would be very interested in this if we were working on it
[14:12] <barry> flacoste: i'd much rather use the zopey way if there is one
[14:13] <barry> gary_poster: could you ping stephan and see what he recommends?
[14:13] <gary_poster> I know of a zopey way for i18n collation...but don't know anything about plurals
[14:13] <gary_poster> barry: yes will do
[14:13] <danilos> everybody should note that ngettext-style depends on an argument (a number) being passed, so that's likely going to live in the view anyway
[14:13] <barry> gary_poster: awesome, thanks
[14:14] <flacoste> yes
[14:14] <danilos> if it's going to be in the template, it's going to be pretty awkward I assume
[14:14] <barry> [ACTION] gary_poster to check w/stephan richter about the best way to do plurals
[14:14] <MootBot> ACTION received:  gary_poster to check w/stephan richter about the best way to do plurals
[14:14] <flacoste> danilos: zope.i18n isn't about templates
[14:14] <flacoste> danilos: tales uses zope.i18n for tempalte tranlsation
[14:14] <danilos> flacoste: right, but people are mostly interested in how it can be applied in templates, if I am not mistaken
[14:15] <flacoste> danilos: i think view/templates
[14:15] <flacoste> danilos: you can't format a message like that in templates
[14:15] <flacoste> since grammar might have to change also
[14:15] <gary_poster> yes
[14:15] <danilos> flacoste: you certainly can, but TAL would not really work too well with it
[14:15] <flacoste> agreed
[14:16] <gary_poster> danilos: have you seen a solution in another template language that works well?
[14:16] <danilos> gary_poster: work well, plenty, look good, none :)
[14:16] <gary_poster> s/language/system or whatever/
[14:16]  * barry wants to ask if there are any template languages that actually do i18n well ;)
[14:16] <gary_poster> danilos: heh :-)
[14:16] <gary_poster> :-)
[14:17] <danilos> I've usually had to extend systems with my own formatters (did that ages ago for smarty and cheetahtemplates)
[14:17] <barry> okay cool.  gary_poster thanks for looking into that for us
[14:17] <gary_poster> barry: sure, np.
[14:17] <barry> [TOPIC]  * Peanut gallery (anything not on the agenda)
[14:17] <MootBot> New Topic:   * Peanut gallery (anything not on the agenda)
[14:18] <barry> does anybody have anything not already on the agenda?
[14:18] <barry> phew
[14:18] <barry> [TOPIC] action items
[14:18] <MootBot> New Topic:  action items
[14:19] <barry>  * gary_poster to add `getStore()` as an alias for `_get_store()`
[14:19] <gary_poster> that was locally, which I did
[14:19] <gary_poster> (or at least that's how I interpreted it ;-) )
[14:19] <barry> gary_poster: you landed that in a branch already, right?
[14:19] <gary_poster> yeah
[14:19] <barry> gary_poster: awesome, thanks
[14:19] <gary_poster> cool, np
[14:19] <barry>  * gary_poster will check to see if there's a bug open for adding a hook to `bzr send`, and submit one if there isn't
[14:19] <gary_poster> nope :-(
[14:20] <barry> np
[14:20] <barry>  * flacoste to look into storm/sqlobject result set compatibility
[14:20] <barry>  * flacoste to work on API reviewer cheat sheet
[14:20] <flacoste> hmm
[14:20] <barry> flacoste: r.u.hoover?
[14:20] <flacoste> yeah
[14:20] <flacoste> but i think allenap solved the first one
[14:20] <flacoste> iirc
[14:21] <allenap> flacoste: It should be in, or nearly merged into storm trunk. It should be an easy backport to our storm branch.
[14:23] <allenap> flacoste: Yes, it is merged into storm trunk.
[14:24] <sinzui> are we here?
[14:24] <bac> yes we are
[14:24] <sinzui> barry is gone?
[14:25] <barry_> i'm back i guess
[14:25] <barry_>  flacoste: keep these items or drop 'em?
[14:25] <flacoste> barry: keep the hoover one
[14:25] <barry_> you got it
[14:25] <flacoste> allenap: should we drop the other one?
[14:26] <allenap> flacoste: I don't follow...
[14:26] <flacoste> allenap: storm result set compatibility
[14:26] <allenap> I think we should have a new task to backport that change into the LP storm branch.
[14:27] <allenap> I'll do that next week.
[14:27] <barry_> allenap, flacoste cool, let's keep this on the agenda then
[14:27] <flacoste> shouldn't we jsut try pdating storm?
[14:27] <flacoste> i think jtv was also interested in changes on trunk
[14:27] <allenap> I tried that once and there was lots of breakage, and I didn't have the fu to understand and fix.
[14:28] <allenap> But we should do it. The longer we leave it, the greater the breakage.
[14:29] <barry_> bigjools: i have your branch to review, thaks for working on those helper functions
[14:29] <bigjools> no worries
[14:29] <bigjools> it wasn't too hard
[14:29] <barry_> [TOPIC] mentoring updates
[14:29] <barry_> anything here?
[14:30] <barry_> well, i think we're done
[14:30] <barry_> #endmeeting
[14:30] <barry_> thanks everyone (except you mootbot)
[14:30] <gary_poster> :-) Thanks barry
[22:24] <jml> rock. rock. rock. rock. rock.
[22:28] <mwhudson> soil?
[22:30] <jml> Ha
[22:30] <jml> Are we having a meeting?
[22:31] <thumper> here
[22:31] <thumper> paper?
[22:32] <barry> #startmeeting
[22:32] <MootBot> barry, There is already a meeting in progress.
[22:32] <jml> tee hee
[22:32] <barry> thank you mootbot
[22:32] <barry> /msg mootbot shut up
[22:33] <barry> okay okay, so... welcome to this week's asiapac reviewers meeting.  who's here today?
[22:33] <jml> I am.
[22:33] <barry> jml: hi!
[22:33] <mwhudson> i am too
[22:33] <thumper> me
[22:33] <barry> [TOPIC] agenda
[22:33] <MootBot> New Topic:  agenda
[22:33] <thumper> although I have about 13 minutes
[22:34] <barry>  * Roll call
[22:34] <barry>  * barry to miss the next two weeks
[22:34] <barry>  * plurals, curtis
[22:34] <barry>  * Peanut gallery (anything not on the agenda)
[22:34] <barry>  * Action items
[22:34] <barry>  * Mentoring update
[22:34] <barry> [TOPIC]  * barry to miss the next two weeks
[22:34] <MootBot> New Topic:   * barry to miss the next two weeks
[22:34] <mwhudson> the one it two weeks time is pycon, right?
[22:34] <barry> so i'll be gone for the next two meetings. it sounded like ameu didn't want to meet while i'm gone. what say you?
[22:34] <jml> probably not.
[22:34] <jml> the main benefit of this meeting is connecting with AMEU.
[22:35] <barry> mwhudson: actually next week i'll be at pycon too
[22:35] <mwhudson> right
[22:35] <mwhudson> oh right
[22:35] <mwhudson> i won't quite have left in 7 days time
[22:35] <mwhudson> i leave in about 7.25 days i guess :)
[22:35] <barry> :)
[22:35] <mwhudson> anyway, no meetings for two weeks, ok, next
[22:35] <barry> [TOPIC]  * plurals, curtis
[22:35] <MootBot> New Topic:   * plurals, curtis
[22:36] <barry> so in ameu sinzui brought up the problem of plural forms in zpts
[22:36] <barry> which really aren't supported well
[22:36] <mwhudson> ugh yes
[22:36] <barry> after the meeting we discussed alternatives with gary (who did some research)
[22:36] <barry> and sinzui proposed something like...
[22:37] <barry> view/count/fmt:singular/message/messages
[22:37] <barry> which we all kind of thought was okay
[22:37] <barry> done.  any thoughts?
[22:38] <jml> umm
[22:38] <thumper> ick
[22:38] <mwhudson> so fmt:singular adapts integers?
[22:38] <jml> barry: I'd like to see a complete example, I think.
[22:38]  * barry delurks sinzui
[22:38] <thumper> I've used a plural helper in the view code
[22:38] <jml> (because I have questions like mwhudson's)
[22:38] <thumper> I don't like the idea of a tal formatter
[22:38] <mwhudson> fmt:singular is a pretty crummy name
[22:38] <sinzui> It's the same nasty for of ngettext(n, singular, plural)
[22:39] <sinzui> it will not be pretty in templates
[22:39] <sinzui> It may help us to avoid writing mediorce phrases like
[22:39] <sinzui> proposed member: 1
[22:39]  * thumper abstains
[22:39] <jml> sinzui: so what is 'message' in that example?
[22:40] <sinzui> fmt:singular/member/members
[22:40] <sinzui> It does not help anyone that the 'member' text is move into a tag
[22:41]  * jml feels a bit dense
[22:41] <thumper> sinzui: what about fmt:singular/approved branch/approved branches/
[22:41] <mwhudson> tal needs a switch construct
[22:41] <thumper> do spaces kill it?
[22:41] <sinzui> thumper: I would *love* that, but path adapters do not alolow spaces
[22:41] <barry> s/approved//
[22:42] <barry> well, we all agree it's not great, but there are limited options
[22:42] <thumper> barry: I'm sure there are cases where we want two words
[22:42] <thumper> approved in the tal wouldn't be translated
[22:42] <jml> sinzui: so <p>You have <tal:flibble tal:replace="view/count/fmt:singular/flibble/flibbles"/></p>
[22:42] <jml> ?
[22:42] <sinzui> yes
[22:42]  * thumper really has to run soon
[22:43] <barry> thumper: a quick skip ahead to action items then...
[22:43]  * mwhudson finds where he wrote "job<tal:s condition="python: job_count != 1">s</tal:s>"
[22:43] <barry>  * thumper to open bug on `webservice` pagetests globs problem
[22:43] <barry> mwhudson: ug, i'm not sure that's better :/
[22:43] <jml> anyway
[22:43] <mwhudson> it's not
[22:43]  * thumper tries to remember what it was
[22:43] <thumper> havent' filed one
[22:44] <mwhudson> thumper: salgado is an admin
[22:44] <thumper> was it that they are all salgado?
[22:44] <mwhudson> in the sample data
[22:44] <thumper> right
[22:44] <thumper> not done
[22:44] <barry> thumper: keep on the agenda or not's all i care about <wink>
[22:44] <thumper> keep
[22:44] <barry> thumper: got it
[22:44] <barry> thx
[22:45] <barry> anyway, just to close the loop on the plurals thing: if you guys have better ideas, please email the list.  nobody especially happy about the tal formatter, but we don't have better ideas
[22:45] <jml> ok.
[22:45] <mwhudson> has an email been sent to the list yet?
[22:46] <barry> mwhudson: i don't think so.  i /think/ it was discussed in a review
[22:46] <mwhudson> ok
[22:46] <jml> it would be good if someone sent an email, I think.
[22:46]  * barry hopes sinzui will email about it
[22:46] <mwhudson> maybe we can trick sinzui into writing a mail
[22:46] <barry> :)
[22:46] <barry> mwhudson: i'll slip something into his coffee tomorrow morning
[22:46] <barry> anyway...
[22:46] <mwhudson> ok
[22:46] <barry> [TOPIC]  * Peanut gallery (anything not on the agenda)
[22:46] <MootBot> New Topic:   * Peanut gallery (anything not on the agenda)
[22:47] <barry> do you guys have anything not on the agenda today?
[22:47] <jml> I have some things
[22:47] <jml> * assertFoo vs failUnlessFoo
[22:47] <jml> * messages in assertions & TestStyleGuide
[22:47] <jml> * super vs upcalling
[22:47]  * thumper leaves
[22:47] <barry> jml: floor is yours
[22:47] <jml> These all came up in reviews.
[22:47] <barry> thumper: bye
[22:47] <thumper> jml: I'll talk to you later about these
[22:47] <jml> thumper: ok.
[22:47] <jml> grepping shows assertFoo is currently preferred to failUnlessFoo.
[22:47] <jml> I think we should lean that way.
[22:48] <barry> jml: lean toward assertFoo?
[22:48] <jml> barry: yeah. no need to use the failUnless methods at all, I reckon.
[22:48] <barry> jml: very occasionally i find failUnless reads better, but generally i agree
[22:49] <jml> cool.
[22:49] <mwhudson> yes
[22:49] <jml> apparently the TestStyleGuide recommends using messages in assertions
[22:49] <mwhudson> sometimes i feel failFoo reads better for guard assertions
[22:49] <barry> [ACTION] barry will add the preference for assertFoo to the TSG
[22:49] <MootBot> ACTION received:  barry will add the preference for assertFoo to the TSG
[22:50] <barry> mwhudson: agreed.  it shouldn't be a hard and fast rule, but a strong preference
[22:50] <jml> to do this properly with the default TestCase, you need to do your own string substitution of values.
[22:50] <barry> all else being equal
[22:50] <jml> barry: +1
[22:50] <mwhudson> jml: yeah, think often messages are superfluous
[22:50] <mwhudson> barry: +1
[22:50] <jml> superfluous and paradoxically confusing
[22:50] <jml> I had a whole bunch of really useful arguments for this that I wielded in a review.
[22:50] <jml> oh.
[22:50] <barry> jml: i *really* like (informative) assert messages
[22:50] <jml> barry: but wait, there's more :)
[22:51] <jml> barry: I changed the default implementation of assertEqual in our base TestCase class (canonical.launchpad.testing.TestCase -- you're all using that, right?)
[22:51] <mwhudson> given that we have tracebacks and assertFoo methods that produce reasonable messages on their own....
[22:51] <jml> mwhudson: exactly
[22:51] <jml> mwhudson: a message is often a cheap substitute for a domain-specific assert method.
[22:51] <jml> anyway
[22:52] <jml> the default implementation now includes the message *and* the two compared values, pretty printed, in the exception
[22:52] <jml> just like bzrlib.
[22:52] <barry> jml: wait.  you're not talking about assert statements!
[22:52] <jml> barry: no, not assert statements, assertions in tests.
[22:53] <jml> barry: sorry for the confusion.
[22:53] <barry> jml: ah.  i think i'm starting to agree with you then :)
[22:53] <jml> anyway.
[22:53] <mwhudson> (we shouldn't write assert statements, probably, a different bikeshed though)
[22:54] <jml> basically, the TSG should be updated to say a) we use *our* base TestCase, b) you don't need to provide a third parameter to assertEqual
[22:54] <barry> jml: +1
[22:54] <mwhudson> jml: +1
[22:54] <jml> and the final thing is upcalling vs super.
[22:55] <barry> jml: though i think we very often /don't/ use our TestCase :(
[22:55] <jml> barry: TestCaseWithFactory is more commonly used, and it's a subclass.
[22:55] <barry> [ACTION] barry to update TSG to state we should use our TestCase base and not use 3rd args to assertFoo()
[22:55] <MootBot> ACTION received:  barry to update TSG to state we should use our TestCase base and not use 3rd args to assertFoo()
[22:55] <jml> barry: my secret squirrel plan is to add testtools to rf deps and then make that the base of our base :)
[22:55] <barry> jml: jfdi
[22:56] <jml> need to RT & all that.
[22:56] <jml> (which reminds me, can you please merge testtools into python trunk pls?)
[22:56]  * barry coughs: zc.buildout
[22:56] <jml> anyway, upcalls
[22:56] <jml> personally, I think they are clearer. also, mostly in tests & Twisted-using code, you are forced to use them.
[22:57] <barry> jml: i recall a long discussion with SteveA about this and that z3 basically requires you to super()
[22:57] <jml> barry: and Twisted requires you to upcall :)
[22:57] <barry> jml: there's no "up" in "super"
[22:58] <barry> oh wait
[22:58] <jml> barry: I haven't seen any subclassing APIs in z3
[22:58] <mwhudson> jml: look at the request code sometime :)
[22:58] <jml> as in z3 things you need to subclass to work.
[22:58] <jml> mwhudson: I use my third eye for that stuff :)
[22:59] <jml> almost everything in Launchpad isn't the request code though.
[22:59] <barry> jml: how often does twisted and zope intersect?
[22:59] <jml> anyway, I suggest that the review attitude to upcall vs super be, officially, "chill Winston".
[22:59] <jml> barry: mostly in tests.
[23:00] <jml> (where you have to upcall because most of the base classes are old-style)
[23:00] <mwhudson> jml: heh
[23:00] <barry> jml: yeah.  old-styles /have/ to upcall
[23:00] <jml> barry: there's a lot of old-style code out there
[23:00] <barry> jml: 'cept all our own classes are always new-style
[23:00] <jml> Twisted, for one, hasn't switched because it *changes the API of the class*
[23:01] <jml> barry: I have a Python riddle
[23:01] <jml> class A
[23:01] <jml> is oldstyle
[23:01]  * barry only does haikus
[23:01] <jml> __metaclass__ = type
[23:01] <jml> class B(A):
[23:01] <jml> class B is _____?
[23:02] <jml> newstyle/
[23:02] <jml> should it upcall or use super?
[23:02] <jml> class C(B):
[23:02] <jml> should it upcall or use super?
[23:02] <jml> (Python is the ideal teaching language)
[23:03] <mwhudson> jml: B is oldstyle
[23:03] <mwhudson> jml: none of our exceptions would work if this wasn't true :)
[23:03] <barry> it has to be because new style classes can't have only classic class bases
[23:03] <jml> oh of course :)
[23:04] <barry> so it has to upcall
[23:04] <jml> anyway, I renew my request to relax the review attitude toward upcalling. :)
[23:04] <barry> jml: so basically your suggestion is to chillax and let the dev do what they want?
[23:04] <jml> barry: yes.
[23:04] <jml> barry: as long as it works.
[23:04] <mwhudson> +1
[23:04] <barry> i'm okay with that
[23:05] <jml> barry: cool.
[23:05] <jml> that's all I have to say :)
[23:05] <jml> []
[23:05] <barry> jml: great, thanks!
[23:05] <jml> barry: np.
[23:05] <barry> i have nothing else for today.  how 'bout you?
[23:06] <jml> not I.
[23:06] <mwhudson> barry: i'm good
[23:06] <mwhudson> barry: thanks
[23:06] <barry> awesome, thanks guys.
[23:06] <barry> #endmeeting
[23:06] <MootBot> Meeting finished at 18:06.
[23:06] <barry> mwhudson: see you next week :)
[23:06] <mwhudson> barry: yeah!
[23:07] <barry> sinzui, bac, barry -> dinner
[23:07] <mwhudson> barry: i arrive fairly late the night before the conf starts
[23:07] <barry> mwhudson: thursday?
[23:07] <mwhudson> barry: land at 2000 or so
[23:07] <mwhudson> barry: yeah
[23:07] <mwhudson> barry: i shall investigate hotel bars until i find someone i recognise :)
[23:07] <barry> mwhudson: sounds like a plan!
[23:07] <barry> mwhudson: i'll keep an eye out for ya
[23:08] <barry> bye guys
[23:08] <mwhudson> barry: cool
[23:08] <mwhudson> bye