[12:12] <bradb> Right, I can wait till tomorrow.
[12:12] <bradb> In other news, changing the URLs is hell.
[12:13] <kiko> yeah
[12:13] <bradb> Because the context that used to be returned for the bug page was a bug, but now, I think, it needs to be a task, which breaks basically every portlet on that page.
[12:13] <salgado> bradb, I'll try to look at it tomorrow, but I can't guarantee
[12:13] <bradb> salgado: ok, thanks
[12:14] <bradb> mpt: Oh, btw, http://www.bikes.com/bikes/2005/sport/trailhead.aspx
[12:19] <kiko> mpt, you haven't been around the block much, have you?
[12:19] <kiko> nice little bike, bradb 
[12:19] <mpt> kiko: Literally yes, figuratively no
[12:20] <bradb> kiko: thanks. I tend to read the consumer reviews *after* I buy something, but I often guess reasonably well.
[12:26] <bradb> kiko: Can I let the entire /malone/bugs namespace die? (i.e. so that /malone/bugs/$bug.id would raise a 404)
[12:27] <bradb> That way, I could commit to making all the portlets shown on the bug page work on the assumption that the context is an IBugTask
[12:27] <mpt> bradb: Probably 50~60 percent of the external links into Launchpad are to /malone/bugs/something
[12:28] <mpt> You'd have to redirect them somewhere
[12:28] <bradb> Where are the external links coming from?
[12:28] <mpt> Mailing list posts, Weblog entries, forums, etc
[12:28] <mpt> I haven't seen the referer logs, I'm just guessins
[12:28] <mpt> g
[12:28] <bradb> Yeah, I see some on Google
[12:28] <bradb> ff
[12:29] <bradb> Actually, few enough that I doubt it matters.
[12:29] <bradb> We're not even 1.0 yet.
[12:30] <kiko> is it very hard to just redirect them?
[12:30] <kiko> the question is where :)
[12:30] <bradb> Exactly.
[12:30] <bradb> We could just redirect them to the first context that we find that has the bug #, but why?
[12:31] <bradb> (i.e. Why bother with the extra complexity?)
[12:31] <mpt> because there is no better option?
[12:31] <bradb> 404'ing /malone/bugs/* seems like a better option to me.
[12:32] <mpt> well, since you're such a fan of Jakob Nielsen ;-)
[12:32] <mpt> http://www.useit.com/alertbox/980614.html
[12:33] <kiko> I even knew the date on that by hard
[12:33] <kiko> by heart, ARGH
[12:33] <bradb> mpt: Launchpad lives and breathes by linkrot, so far.
[12:35] <bradb> Anyway, redirecting or not, it sounds like I can still commit to never have a global, contextless bug page, right?
[12:35] <bradb> (That's the most important point for me, in terms of fixing every portlet to work with an IBugTask context on what is currently the "bug page")
[12:36] <mpt> I thought that was sabdfl's decision
[12:36] <mpt> (though I was also considering it as one possibility)
[12:36] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Fixes for three bugs. bug 1809: Incorrect Bugs facet link on PO template page (...+pots/something); bug 1808: Incorrect links in 'releases from this branch' portlet; bug 1807: Incorrect links in distrorelease's actions portlet. BjornT owes me beer (patch-2293: christian.reis@canonical.com)
[12:39] <bradb> Right, then I guess what I'll do is change the portlets in question to expect that the name "bug" be defined in their namespace, and have two pages, bug-index.pt, and bugtask-index.pt, which each define bug accordingly for the portlets to Just Work.
[12:40] <bradb> And wait and see what the sabster says.
[12:50] <bradb> Right, linkrot is bad. I hereby declare all Malone links immortal.
[12:57] <bradb> Thinking about it: should there be a syntax to access the LaunchBag in ZPT?
[12:58] <bradb> context/launchbag:bug, or something?
[12:59] <bradb> context/launchbag:product, context/launchbag:user, etc.
[01:00] <bradb> It seems to me that, if we have this magic bag of goodies, we might as well make use of it in as many places as it would make sense to do so (browser code seeming to be a place that it makes sense to do so.)
[01:01] <cprov> see you tomorrow
[01:01] <bradb> I believe this could simplify making the portlets that are currently shown on the bug page (and all the pages linked to from the bug actions porltets) Just Work, whether the context is a bug or a bugtask
[01:01] <bradb> s/porltets/portlets/
[01:01] <bradb> kiko, mpt: Thoughts?
[01:06] <kiko> bradb, isn't the portlet now invoked with a specific context?
[01:06] <bradb> kiko: At the moment, it relies on its context being an IBug.
[01:07] <kiko> is that a problem?
[01:07] <bradb> yes
[01:07] <lifeless> mpt: nope, back @ work
[01:07] <bradb> As per the reasons above
[01:08] <bradb> kiko: In the new URL scheme, the bug page will live at /products/foo/+bug/1, which means that the context becomes a task.
[01:09] <bradb> kiko: i.e. To the user, everything still looks pretty much like the good ole bug page (decorated, perhaps, with some new contextual information), but underneath, there's been a fairly major shift.
[01:10] <bradb> kiko: See what I mean?
[01:17] <kiko> bradb, just update the portlets to always take tasks -- doesn't that solve the problem?
[01:18] <bradb> kiko: That would break /malone/bugs/$bug.id (if we're intending for that page to continue to function as it does currently.)
[01:19] <kiko> I just want that page to be a redirect
[01:19] <kiko> if you can't do that, then I agree to nuke it away.
[01:20] <bradb> it wouldn't be too hard to redirect
[01:21] <bradb> I'll commit to the portlets counting on their context being a task, as per your suggestion
[01:23] <kiko> I think that's the best and simplest solution
[01:23] <mpt> So we're going to have /products/foo/+bug/1 and /products/foo/+bugs/1 ?
[01:23] <mpt> that is such crack
[01:24] <bradb> +bug is crack-o-dementia, but I just work here...
[01:25] <mpt> Well, maybe we can quietly redirect the former to the latter at some point
[01:25] <kiko> bradb, can we skip +bug for now, in a last ditch effort?
[01:26] <bradb> kiko: 3 against <unrepresented> sounds good to me.
[01:26] <kiko> how hard is it going to be to change it to +bug later?
[01:26] <mpt> kiko: skip +bug in favor of what?
[01:26] <kiko> +bugs
[01:27] <mpt> So you're signing on to merging the bug and task pages?
[01:27] <kiko> huh?
[01:27] <kiko> bradb, can you help mpt :)
[01:27] <bradb> mpt: there's also +viewstatus and +editstatus
[01:27] <mpt> kiko, the task page is currently at +bugs
[01:27] <bradb> mpt: i.e. there will be
[01:28] <bradb> so, .../+bugs/1 => contextual bug page, .../+bugs/1/+{view,edit}status => what is currently the task page
[01:28] <mpt> oh, ok
[01:28] <mpt> So where normal bugtrackers have one page for a bug, we have three
[01:28] <mpt> but that's fixable
[01:28] <bradb> That seems relatively sane, IMHO. A .../+bug/1 flying out of nowhere was the most crackish bit, to me.
[01:29] <mpt> ok, I'm getting 15 errors on make check, which don't seem to be anything to do with me
[01:29] <bradb> mpt: No, we'll continue to only have two, but in fact, we don't have only two, we have about 10.
[01:29] <mpt> ProgrammingError: ERROR:  relation "person" does not exist
[01:29] <mpt> SELECT defaultmembershipperiod, defaultrenewalperiod, timezone, calendar, teamdescription, password, subscriptionpolicy, teamowner, merged, displayname, givenname, name, familyname, datecreated, karma FROM Person WHERE id = 1
[01:29] <kiko> mpt, that usually means that one test failed and then the rest bombed out after it
[01:30] <kiko> what's your first test failure
[01:30] <mpt> well, that's the first one
[01:30] <bradb> mpt: well "two", where there's actually a third in there, but it's a view/edit thing, and you'll only see a link to one or the other at a time
[01:30] <mpt> called by Failed example: print Person.get(1).name
[01:30] <mpt> line 58, in test_zopeless_reconnect.txt
[01:31] <mpt> bradb: for which JavaScript can save us
[01:31] <kiko> the view/edit bit is besides the point here
[01:31] <kiko> bradb, at worse, you can just make +bug be an alias for +bugs and change the links, shouldn't be too hard, right?
[01:33] <mpt> kiko: Would I be right in concluding that the database isn't working at all?
[01:35] <bradb> kiko: Making +bug/1 and +bugs/1 traverse to the same thing is very trivial.
[01:35] <mpt> DOIT
[01:36] <kiko> bradb, right -- then you can fix the links later and say "oh, I forgot" :)
[01:38] <bradb> heh
[01:39] <kiko> o/~ giving him drugs o/~
[01:39] <mpt> kiko?
[01:40] <kiko> music
[01:40] <mpt> File "/home/mpt/ubuntu/launchpad/lib/canonical/database/ftests/test_zopeless_reconnect.txt", line 122, in test_zopeless_reconnect.txt
[01:40] <mpt> Failed example: time.sleep(1)
[01:40] <mpt> Differences (ndiff with -expected +actual): - thread after execute - thread end
[01:40] <mpt> That's probably a more informative example
[01:41] <bradb> I don't worry about failures in those reconnect thingies
[01:41] <kiko> that's crack, mpt, ignore it
[01:41] <mpt> Well, ok, but that still leaves me with 14 database-y failures
[01:47] <mpt> oh, some of them are actually my fault
[01:48] <jordi> can anyone check in the database for me if Luxemburguish has plural forms data already?
[01:51] <jordi> apparently it is
[01:53] <mpt> jordi: Just try translating something into Luxemb[o?] urgish and see if Rosetta complains
[01:54] <kiko-zzz> bradb, you should use macros a LOT more than you currently do
[01:54] <kiko-zzz> the code in bugtask-assignee-widget could be made 5x shorter
[01:54] <kiko-zzz> and I hate fixing the same bug 3x
[01:59] <bradb> kiko-zzz: Indeed.
[02:13] <jordi> mdz_: I dd that, seems to be god
[02:13] <jordi> now, why am I getting this system error
[02:15] <mdz_> jordi: eh?
[02:22] <jordi> mdz_: launchpad. It is so broken. :)
[02:22] <jordi> mdz_: actually, it seems I still have this ability to break it very well.
[02:22] <mdz_> jordi: why are you telling me? ;-)
[02:23] <jordi> uh.
[02:23] <jordi> s/mdz_/mpt/g, who left the channel
[02:23] <jordi> mdz_: POP THE TRUNK
[02:23] <jordi> I'm going to bed.
[02:23] <mdz_> jordi: that's more like it
[02:24] <kiko-zzz> bradb, ping?
[02:24] <bradb> kiko-zzz: pong
[02:24] <kiko-zzz> bradb, I found a bug in the assignee widget
[02:24] <kiko-zzz> are you ready for it?
[02:24] <bradb> Sure.
[02:24] <kiko-zzz> click on assign
[02:25] <kiko-zzz> assign to foo.bar
[02:25] <kiko-zzz> (click on edit, gah)
[02:25] <kiko-zzz> click save
[02:25] <kiko-zzz> you're teleported and foo.bar is the owner, right?
[02:25] <kiko-zzz> now click on edit again
[02:25] <kiko-zzz> don't change anything
[02:25] <kiko-zzz> click save
[02:25] <bradb> you aren't tp'd, yeah, i know
[02:26] <kiko-zzz> tp'd?
[02:26] <bradb> teleported
[02:26] <bradb> It's a simple fix, maybe.
[02:26] <kiko-zzz> no
[02:26] <kiko-zzz> that's not the bug
[02:26] <kiko-zzz> the bug is that you /are/ tp'd
[02:26] <kiko-zzz> AND
[02:26] <bradb> what's the issue then? I can't look right now, because I broke the URLs.
[02:26] <kiko-zzz> the assignee is unset
[02:26] <kiko-zzz> the reason is that you are using the same name for both inputs
[02:26] <kiko-zzz> assigned_to
[02:26] <kiko-zzz> I'll fix it for you tomorrow, anyway
[02:27] <bradb> Argh, I totally fixed that problem, but I guess I only fixed one aspect of that problem (i.e. using the same name for both radios)
[02:27] <kiko-zzz> the fix is to use different names, really
[02:27] <bradb> yeah, normally, it should
[02:27] <bradb> assigned_to and assign_to
[02:27] <kiko-zzz> but we can fix that tomorrow
[02:27] <kiko-zzz> was just a heads-up
[02:28] <bradb> ok, thanks
[02:28] <bradb> I even have two different names defined for them in parts of that template and as attributes on the view class (view/assigned_to and view/assign_to), but I guess that was a code path I didn't test.
[02:31] <bradb> for that matter, looking at the template code, it's unclear to me how they're ending up with the same name, but anyway
[02:36] <kiko-zzz> bradb, where is assignedToCurrentUser defined?
[02:36] <bradb> kiko-zzz: on BugTaskAssigneeWidget
[02:37] <bradb> aka, ctrl-] 
[02:37] <kiko-zzz> thanks
[02:38] <kiko-zzz> I think I found the error
[02:38] <bradb> kiko-zzz: What's causing it to have the same name? I can see no reason here for why that should happen.
[02:38] <kiko-zzz> yep
[02:38] <kiko-zzz> it doesn't actually have the same name
[02:39] <kiko-zzz> it's missing a clause
[02:39] <kiko-zzz> because YOU ARE NOT CODING PROTECTIVELY!
[02:39] <kiko-zzz> look at getInputValue
[02:39] <kiko-zzz> I see an elif at the end of the branch
[02:40] <kiko-zzz> and NO raise AssertionError in an else clause (or at the end of the function)
[02:40] <kiko-zzz> may this never happen again!
[02:40] <bradb> ah, yeah
[02:41] <kiko-zzz> I'll fix it for you tomorrow for free
[02:41] <kiko-zzz> if you do a fast r=bradb afterwards :)
[02:41] <bradb> An untested code path, ultimately (despite the fact that this is problem the mostly thoroughly tested custom z3 widget mankind has ever known)
[02:41] <bradb> s/problem/probably/
[02:42] <kiko-zzz> we're going to have to use a hidden input if we want this to be fixable trivially
[02:42] <kiko-zzz> argh
[02:42] <kiko-zzz> or maybe not
[02:43] <bradb> indeed, no need for a hidden field, i don't think
[02:45] <kiko-zzz> fixed
[02:45] <bradb> kiko-zzz: btw, where did you add <label>? I specifically left that off of the radio options, as per our earlier discussion when I showed you and mpt the widget.
[02:46] <kiko-zzz> all radiobutton options must have labels<tm>
[02:46] <kiko-zzz> I'll send you a diff now
[02:46] <bradb> kiko-zzz: Are they bolded now?
[02:46] <kiko-zzz> yes, though you can fix that
[02:47] <kiko-zzz> fixed
[02:47] <bradb> wee
[02:48] <kiko-zzz> I'll send you a diff, can you please add a test for this case and check if I didn't do too much cleaning up
[02:48] <kiko-zzz> I didn't see reason for half the code in the template, and it still worksforme without it, so...
[02:49] <bradb> Sure, I'll take a look at it tomorrow morning, ok?
[02:49] <kiko-zzz> as long as you properly credit the fix :-)
[02:49] <bradb> like this: arch-submit-merge "[trivial]  An awesome fix I DID" $pqm
[02:49] <bradb> :P
[02:50] <bradb> If I'm adding the test, I want a 50% cut
[02:51] <bradb> 240 lines of doctest on this widget and woosh, bug. I hate programming.
[02:51] <kiko-zzz> :-P
[02:51] <kiko-zzz> I hate tests
[02:51] <kiko-zzz> they make you focus too much on tests
[02:51] <kiko-zzz> not on the code quality
[02:52] <kiko-zzz> mail sent, bradb 
[02:53] <bradb> thanks. /me writes an activity report.
[02:54] <kiko-zzz> http://pqm.ubuntu.com/
[02:54] <kiko-zzz> more love from me
[02:54] <bradb> kiko-zzz: dude, you *abuse* trivial :)
[02:55] <kiko-zzz> tomorrow I'm all rosetta's 
[02:55] <kiko-zzz> bradb, well, somebody needs to get bugfixes in
[02:55] <kiko-zzz> if you think I crapped out call me out in public and I'll hang my head in shame
[02:55] <kiko-zzz> I'm now gone
[02:55] <kiko-zzz> ciao
[02:55] <bradb> later
[06:15] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Add kamacacheupdater section to production1 instance's launchpad.conf (patch-2294: stuart.bishop@canonical.com)
[07:55] <lifeless> stub: ping
[07:55] <stub> lifeless: pong
[07:56] <lifeless> I hear you are chatting with jim about testing foo
[07:56] <lifeless> I'm interested in what you are doing, cause I'm trying to reduce the NIHness of the various python test runners.
[07:56] <lifeless> and I'd hate to have this be a game of whack a mole
[07:57] <stub> I just sent another reply to zope-dev, so if you hunt out the archive it should be right at the bottom. The thread is only three messages deep so far ;)
[07:57] <lifeless> I will get spiv to show me
[07:57] <lifeless> but whats the general tack you are taking ?
[07:58] <lifeless> it is putting smarts in the runner, the result or the case ? or is it changing the api ?
[07:58] <lifeless> will you be able to run the tests with the stock testrunner (which is the ideal test for doing it right)
[08:02] <stub> The thread is about replacing the Z3 and Z2 test runner with one that is more general purpose (which I assume will end up in Python 2.5 or 2.6 if it meets its goals)
[08:03] <stub> Main feature is optimizing fixtures so that environments are only setup or torn down a minimum number of times (eg. stuff like Zope does already with the compoenent architecture). Also cute things like if a fixture can't be torn down (raises a NotImplementedError), the test runner reinvokes itself in a fresh process to keep going.
[08:03] <stub> Jim likes layers, I like a set of resources. Which is what I'm arguing about
[08:06] <stub> http://mail.zope.org/pipermail/zope-dev/2005-August/025302.html
[08:06] <stub> http://mail.zope.org/pipermail/zope-dev/2005-August/025304.html 
[08:06] <stub> http://mail.zope.org/pipermail/zope-dev/2005-August/025305.html
[08:06] <stub> http://mail.zope.org/pipermail/zope-dev/2005-August/025310.html
[08:09] <stub> You will not be able to run the tests using the standard test runner, because the tests specify the environment they depend on. Although I don't see why this couldn't be made so.
[08:27] <lifeless> so
[08:29] <lifeless> looks to me like you guys don't quite get how unittest is meant to work
[08:29] <lifeless> the goal of unittest is that there is no coupling between testrunner and testcase other than testcase.run(), and testcase.id() between the testcase and the testresult
[08:30] <lifeless> all that you want to do is near-trivially done via an appropriate TestCase subclass, and fixing it via a runner is harmful
[08:30] <stub> The runner selects the order tests are run in. A test can't do that because it doesn't have enough context.
[08:31] <stub> So sure, a test should be runnable without a runner. And that can be added. But optimizing the order tests are run in is the job of the test runner.
[08:35] <lifeless> you want test ordering to ensure that tests needing similar things are grouped together right ?
[08:36] <lifeless> by definition any test case should be standalone
[08:36] <spiv> AIUI, this is an optimisation -- all tests can be standalone, but if run in a certain order the resource setUp/tearDown can be intelligent enough to save a lot of work.
[08:37] <stub> Unfortunately setting up and tearing down the entire environment for every test does not scale if you have a lot of tests and a large amount of environment
[08:37] <lifeless> right, not debating that.
[08:37] <lifeless> (well, there are arguments that can be had w.r.t. mock objects et al, but that is a different discussion)
[08:38] <stub> So the test case should say 'oh - this bit of environment I want is already running, so I'm not going to set it up. And I can't tear it down either in case the next test wants to use it'.
[08:38] <spiv> (indeed :) )
[08:39] <lifeless> stub: so, something like this would make sense to me:
[08:40] <lifeless> write a TestCase class whose setUp and tearDown use a self._resources list to determine what they need and ask them to be setup/torndown - and those resource's methods use refcounting to decide what to do
[08:41] <lifeless> use iteration over the tests to introspect TestCases that derive from/ or implement the interface of, this specialised TestCase, and create an appropriately ordered TestSuite
[08:41] <lifeless> then use whichever runner you want to actually run the tetss
[08:48] <lifeless> testsuites define order because testrunner.run() calls run(result) on the suite it is given
[08:48] <lifeless> so a suite can change order, or just be used as an ordered container
[08:49] <stub> That is placing the burden on determining if a resource should be torn down on the resource rather than the test runner (which is doable with a subclass). ie. the resource would need to have the test suite and the last test run and determine if the next test in uses it as a resource.
[08:50] <lifeless> nope
[08:50] <lifeless> erm. 
[08:51] <spiv> I think lifeless is proposing that the TestSuite would do this, rather than the TestRunner or the resource?
[08:52] <lifeless> so, we would need a testsuite subclass that manages the resources
[08:53] <lifeless> it would ask for a setup before a group and a teardown after, so the setup and teardown calls from the Case would become noops
[08:53] <lifeless> (though they would have effect if/when run without the magic testsuite optimiser)
[08:54] <stub> This means you are making the TestSuite the test runner. Currently the default runner iterates over a test suite and executes the tests. You are suggesting making the testsuite into the runner.
[08:54] <lifeless> the default runner asks a suite to run
[08:54] <bob2> oh, zope-dev, not zope3-dev
[08:55] <lifeless> this preserves that model. peeking inside testsuites and manually walking them breaks the model
[08:56] <spiv> I believe that the division of work in xUnit is that a TestRunner does TestSuite.run(), not that it does "tests = testsuite.gettests(); ... ; for test in tests: test.run()".
[08:56] <jdub> :-)
[08:57] <lifeless> TestCase is a composite, its bad karma to to do gettests ;0
[09:00] <stub> ok. that all seems to make sense - just shuffling stuff around a bit. Jim is very much focused on what he needs to Z3 and Z2 work, so I first of all need to convince him that other projects need a more flexible model (or him to educate me on why he is right).
[09:00] <lifeless> so there are concrete advantages here:
[09:01] <lifeless> * any other unittest compatible runner will still do the right thing: test_suite() just returns this smarter TestSuite instance.
[09:01] <lifeless> * single test running does not become a special case.
[09:01] <lifeless> * gui test runners, co-process runners, and remote runners dont become special cases
[09:02] <lifeless> other xUnit folk will grok it quickly
[09:02] <stub> Hmm... the burden of tearing down a resource is on the testsuite now, which does not seem correct.
[09:02] <lifeless> in the optimised case yes
[09:03] <lifeless> but the non optimised case will still use tearDown
[09:03] <lifeless> remember that the runner has _no_ visibility to the internal structure of a TestSuite
[09:03] <stub> So a TestCase now needs to know if it is being used by an optimized TestSuite and change its behavior accordingly
[09:03] <lifeless> the 'TestRunner' I mean.
[09:03] <lifeless> no, they always call setUp on resources, but if already setup its a noop
[09:03] <lifeless> I can draft up a demo tomorrow if you like.
[09:04] <stub> lifeless: I mean tearDown.
[09:04] <lifeless> tearDown would decrement a refcount
[09:04] <lifeless> (in the resource)
[09:04] <stub> btw. I think Jims code may still be using TextTestRunner btw. You are confusing the command line tool that runs the tests with the unittest.TestRunner class I think.
[09:05] <stub> There are other features for doing in the test runner btw., such as coping with Resources that cannot be torn down.
[09:06] <lifeless> I'm so not confusing it
[09:07] <lifeless> there are > 100 lOC replacing the runner with module level naughty foo
[09:07] <lifeless> The problem is responsibility, the runner is not 'the thing that runs the tests', its 'the thing that provides a UI for running the tests'.
[09:09] <lifeless> so, if a resource cant be torn down, what should happen ?
[09:09] <stub> The test runner reinvokes itself as a fresh process starting at the next test
[09:10] <lifeless> now imagine your runner is a gui
[09:10] <lifeless> thats going to be pretty harsh to do to the user.
[09:10] <stub> Indeed - the standard model doesn't work. So the gui needs to talk to the test runner running as a different process and render its output nicely.
[09:11] <lifeless> however, its ok in the xUnit model for the testsuite to fork, and then start getting feedback frmo the child proess, calling result.add* as things happen
[09:11] <lifeless> the standard model does work; ;)
[09:12] <lifeless> the RightWay to implement that is a subclass of TestSuite that adds a process barrier 
[09:12] <stub> ok. that sounds sane. So implementation wise would be to take what Jim wrote and stuff it all into a TestSuite.
[09:13] <lifeless> as a first approximation, yes.
[09:14] <stub> I don't know if there is anything special involved in fitting DocTestSuite and DocFileSuites into the mix - don't see any problem.
[09:14] <stub> Although I don't like Jim's heirarchy, so I'm not sure how much would be worth preserving
[09:16] <stub> SchoolTools and py.test seem heirarchical on their fixtures too, which sucks. Schooltool seems to use magic .py files in the tree and py.test well known method names (setup_module, setup_class) etc. which are invoked magically.
[09:17] <lifeless> I need to look at them at somepoint
[09:32] <stub> lifeless: If I see pqm hung (like now) should I kill it, or would you rather now that you are back?
[09:35] <lifeless> i'm hapy for you too following that emails instructions
[09:36] <stub> nc killed
[10:16] <carlos> morning
[10:23] <lifeless> stub: oh, and you can decorate tests effectively if you use the approach I am suggesting, for extra code reuse. ;0
[10:49] <sabdfl> stub: is it possible to tell an auto-form to use a different vocabulary for a given widget?
[10:51] <stub> vocabularies are attached to the schema field, and the widget is adapted from this field. So I think you just create a new interface, overriding the Choice with a new Choice with a different vocabulary, and render the form from that.
[10:51] <sabdfl> stub: hmm... i think zope3 makes the mistake of conflating Interface with Schema
[10:52] <stub> Although what you want might really be to make the vocabulary context sensitive, and interrogate the context to determine what choices are valid.
[10:52] <stub> They arn't conflated - interfaces are just the mechanism used to document a Schema.
[10:52] <sabdfl> stub: it's already context sensitive, but i want it to work in two different ways
[10:53] <sabdfl> stub: then how do you tell the difference between an Interface used to document a form and one used to document the interface on a content object?
[10:53] <stub> Its docstring? The module it was imported from? Naming conventions?
[10:53] <sabdfl> none of which we have used, and i suspect none of which are standardised
[10:54] <sabdfl> the two are fundamentally different
[10:54] <sabdfl> one is function, the other presentation
[10:55] <stub> Schemas are not presentation - that is forms.
[10:56] <stub> I suppose a Schema is just an Interface that defines no function, and perhaps the issue is that *we* are mushing them together in our content objects?
[10:57] <stub> (At one point I wanted to generate the base schemas for our content objects from the database, and have them subclassed to define function)
[10:59] <sabdfl> the part of a schema that talks about the title, description, requiredness etc, is presentation
[10:59] <sabdfl> the part that describes attributes (which overlaps with the presentation bit) is function
[11:00] <sabdfl> i think they should be separated
[11:00] <stub> title is data, description is data, requiredness is validation. If you render it, eg. by taking the data, quoting it and spitting it out on a web page, that bit is presentation
[11:01] <sabdfl> ok
[11:01] <sabdfl> but...
[11:01] <BjornT> i think the main problem is that there's no easy way of defining how a schema is to be presented. there were some discussions about it, but no-one came up with a good solution
[11:01] <sabdfl> often you want the same data to have different validation on different forms
[11:01] <stub> I've been in an argumentative mood all day btw. Something in the water ;)
[11:01] <sabdfl> currently, that requires a second Interface, which is imo nonsense
[11:03] <stub> I don't see a problem with that. If you have different attributes, or different constraints, you have a different schema. Trying to take a schema (a definition of data and constraints) and mush it into different shapes seems wrong. Inheritance could make this easy if we structure things correctly (or maybe it will make a huge and confusing tree of Interfaces like Z3 core has ;) )
[11:05] <stub> So you have to say """ class MySpecializedSchema(BaseSchema): foo = Choice(vocabulary='specialized') """ to create a new schema, based on another one. Any alternative is really just another way of spelling that, or possibly a helper or some sort.
[11:06] <stub> Of course, now that someone has ported XmlSchemas to the Z3 environment we could use them instead ;)
[11:18] <carlos> jamesh, hi, around?
[12:28] <sabdf1> carlos: languagepack status?
[12:29] <carlos> sabdf1, whitespace migration script done
[12:29] <carlos> I'm preparing new language packs
[12:29] <carlos> to be checked by Martin
[12:29] <sabdf1> cool!
[12:29] <carlos> sabdf1, oo.org language packs are beeing tested  aslo now by doko
[12:30] <carlos> sabdf1, and firefox has been moved to breezy + 1 as they need big code changes to pootle's scripts
[12:30] <sabdf1> awesome
[12:30] <carlos> ;-)
[12:31] <sabdf1> well done
[12:31] <sabdf1> will we catch whitespace problems coming in now?
[12:33] <carlos> sabdf1, yes
[12:33] <sabdf1> cool
[12:33] <sabdf1> any other known issues?
[12:33] <carlos> sabdf1, we detected some issues with some exports and plural forms
[12:34] <carlos> but need to get the sample data to reproduce that issue
[12:34] <carlos> anyway, I think it does not affect us too much as users didn't complain about that
[12:34] <sabdf1> ok
[12:47] <froud> hi, can somebody explain the Rosetta process for me. Do translators have to download the pot and create a po on local machine or do they do that automatically when they start translating?
[12:52] <sabdf1> automatically
[12:53] <sabdf1> we need to know the usual plural form for that language, but we have it for most languages now
[12:53] <sabdf1> if the po file deviates from the normal plural form, they need to be able to figure that out and let us know
[12:53] <sabdf1> but that's very rare
[12:53] <sabdf1> otherwise it's pretty much as it seems
[12:53] <sabdf1> froud: ^
[12:55] <froud> sabdf1: k, just trying to get OpenICDL [http://icdl.tsf.org.za]  users to understand the system...which is hard to do when I myslef don't understand it :-)
[12:55] <froud> sabdf1: so best way is for users to use the web-based interface to do translations and rosetta take care of the rest
[12:56] <sabdf1> yes
[12:56] <sabdf1> you need to upload, and update, the POT
[12:56] <sabdf1> they should be able to do everything else themselves
[12:57] <sabdf1> when you are close to a release, download all the PO files
[12:57] <sabdf1> bundle those in your tarball, and off you go
[12:58] <froud> sabdf1: thx 2 jordi the POT files are there now its getting user who don't understand Rosetta to actually use it.
[12:58] <sabdf1> point them at the template page
[12:58] <sabdf1> ask them to select their language if it isn't automatically detected from browser and location
[12:58] <sabdf1> then they click on the language and start translating
[12:58] <sabdf1> that is all
[01:04] <froud> sabdf1: thanks
[01:14] <dand> sabdf1: is malone the right place to report a change in plural form for a certain language? or should we wait for gettext to update first?
[01:15] <dand> right now we edit the plural form for each translation, which is not a problem... a default would be nice though
[01:19] <sabdf1> dand: report to carlos
[01:19] <sabdf1> or file bug in malone, and assign to carlos
[01:20] <carlos> dand, send me an email with that information and I will handle it now
[01:21] <carlos> carlos.perello@canonical.com
[01:22] <dand> carlos: thanks, i'll do that
[01:23] <carlos> dand, np
[01:27] <dand> carlos: sent
[01:36] <carlos> dand, done, it should be applied today or tomorrow on production
[01:43] <dand> carlos: you guys rock! /me's gonna print this channel's log as a motivational poster :)
[01:43] <carlos> dand, :-)
[01:47] <dilys> Merge to rocketfuel@canonical.com/launchpad--production--1.29: Cherry pick patch-2294 (patch-2: stuart.bishop@canonical.com, rocketfuel@canonical.com)
[02:01] <sabdf1> elmo: you rock
[02:13] <stub> carlos: plural form updated
[02:21] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Updated Romanian plural forms (patch-2295: carlos.perello@canonical.com)
[02:24] <salgado> stub, ping
[02:27] <stub> salgado: pong
[02:28] <salgado> stub, I had to drop the NOT NULL constraint in Vote.preference, because people can leave some options without preference in a condorcet poll
[02:28] <salgado> stub, do you think it can be a problem?
[02:29] <stub> No problem. The constraints are purely there as a safety net to your code. The change seems sane.
[02:30] <Kinnison> salgado: why not simply fill out the empty options with how condorcet will treat them (I.E. all the same, one lower than anything the user specified)?
[02:33] <sabdf1> what's the use case for condorcet polls?
[02:34] <salgado> Kinnison, because in the UI you choose the options in the order you want (1 for your most preferred, 2 for your second most preferred, and so on). then I'd  have to choose an arbitrarily huge number to use
[02:34] <Kinnison> salgado: There's some number of choices yes?
[02:34] <salgado> sabdf1, this is what they use in debian, AFAIK
[02:34] <sabdf1> salgado: have they asked to use LP?
[02:35] <sabdf1> iirc we were only going to do basic voting for 1.0
[02:35] <sabdf1> and i think condorcet is YAGNI
[02:35] <sabdf1> for 1.0, at least
[02:35] <salgado> sabdf1, no, but that (preferential voting) was in the first BasicVoting you wrote
[02:36] <sabdfl> hmm... preferential is not condorcet, i don't think, is it?
[02:36] <sabdfl> condorcet is much trickier
[02:36] <sabdfl> preferential is just "who is preferred by most", isn't it?
[02:36] <stub> condorcet is a form of preferential voting. there are a number of different preferential methods
[02:37] <Kinnison> condorcet isn't actually complex to implement, just to understand
[02:37] <sabdfl> ok, all i wanted was "preferred by most"
[02:37] <stub> For example, in Australian preferential voting in elections, we must give a unique preference for each candidate. Other preferential systems (such as condorcet) relax that restriction.
[02:37] <sabdfl> we can do A, B, C, which is the most popular?
[02:38] <salgado> Kinnison, yes, I could use a number like len(options) + 1, but mpt thinks we should allow people to choose whatever number they want as the preference. (e.g. they could choose a preference of 666 and want to see it there when they come back to edit their votes)
[02:38] <sabdfl> salgado: please don't spend any more time implementing condorcet
[02:38] <stub> sabdfl: I'm sure there is a political science thesis in determining  what 'preferred by most' means
[02:38] <salgado> sabdfl, it's already implemented and up for review
[02:38] <sabdfl> the UI, for a start, will be a pain, to provide a ranked result
[02:38] <salgado> I already moved to ShipItNG
[02:38] <sabdfl> do you have a basic "got the most votes" option?
[02:38] <salgado> sabdfl, for now we're providing the pairwise matrix
[02:39] <sabdfl> salgado: for the record, that's total crack
[02:39] <sabdfl> whoever's reviewing it, please bounce it on that UI alone
[02:39] <sabdfl> *DENIED*
[02:40] <sabdfl> salgado: please resubmit with just a basic most-votes, where the UI is just select-one-option-by-radio-button
[02:40] <sabdfl> condorcet can come later, when there's a real use case
[02:40] <sabdfl> stub: could you help me with a query please?
[02:40] <sabdfl> this is for Person.merge
[02:40] <stub> sure
[02:41] <sabdfl> ok, we have SpecificationReview which has (spec, reviewer) UNIQUE
[02:41] <salgado> sabdfl, that means just droping the CONDORCET item in PollAlgorithm. then people won't be able to create condorcet-style polls.
[02:41] <sabdfl> salgado: yes please
[02:41] <sabdfl> it wasn't in the spec, iirc, and the UI you've described is inappropriate
[02:42] <stub> salgado: Please keep the page tests though, so we can switch it on when someone requests it
[02:42] <sabdfl> please confirm that you have a simple poll where users can pick the best of N options, and the winner is the one that got the most votes
[02:42] <salgado> stub, sure. I'm not going to remove any tests
[02:43] <salgado> sabdfl, sure. we have that. 
[02:43] <sabdfl> stub: i want to UPDATE the specreviews that will not result in creating a (spec, reviewer) pair that matches an existing one
[02:43] <sabdfl> i tried:
[02:43] <sabdfl> select id from specificationreview where reviewer=13 and id not in (select id from specificationreview as a where a.reviewer=1 and a.specification=specificationreview.specification);
[02:43] <sabdfl> but that's a bust
[02:44] <sabdfl> sorry, it's with test data
[02:45] <sabdfl> i was trying to "find/update all the ones where the resulting update won't look like an existing record"
[02:48] <sabdfl> stub: any suggestions?
[02:48] <stub> Sorry - was looking for an example. I could have sworn I had already done a similar one in person merge ;-/
[02:50] <stub> update specreview set reviewer=new_reviewer where reviewer=old_reviewer and id not in (select id from specreview as s2 where id=specreview.id and reviewer=new_reviewer);
[02:50] <stub> I havn't got the tables around, so that is untested. Might need to tweak the table aliasing.
[02:54] <sabdfl> hmm
[02:54] <sabdfl> just found BountySupscription
[02:54] <sabdfl> i think that's the same
[02:54] <sabdfl> and it's slightly different to the one you just gave
[02:55] <stub> Mr. Consistency, thats me ;)
[02:55] <sabdfl> which is better?
[02:56] <sabdfl> nup
[02:56] <sabdfl> the one you just gave is busted
[02:57] <stub> Maybe it is late, but I can't for the life of me think why I need to join bountysubscription to itself in that subquery ;/
[02:57] <Kinnison> Ran 456 tests in 626.772s
[02:57] <Kinnison> FAILED (failures=2)
[02:57] <Kinnison> Woohoo!
[02:57] <Kinnison> very few failures left
[03:02] <Kinnison> I think those failures are because the buildd slave tests don't work if there's a buildd slave running
[03:09] <stub> sabdfl: update bountysubscription set person=9 where person=4 and bounty not in (select bounty from bountysubscription where person=9); works for bountysubscription
[03:15] <sabdfl> stub: nup
[03:15] <sabdfl> ah
[03:15] <sabdfl> yes
[03:15] <sabdfl> using bounty makes it simpler than using id
[03:16] <sabdfl> i've got it working using the previous version for bountysubscription
[03:16] <stub> Feel free to replace the existing crackfull BountySubscription migration code ;)
[03:17] <sabdfl> salgado, stub: is production running the foaf-update-karma script?
[03:17] <sabdfl> it doesn't appear to be updating it
[03:17] <stub> Nope - it died when I migrated the cronjob to gangotri. I just cherry picked the fix (missing stuff in gangotris config file), but havn't rolled it out yet.
[03:18] <sabdfl> ok
[03:18] <sabdfl> stub: when was the last production update?
[03:18] <stub> Yesterday
[03:19] <sabdfl> ok, cool, thanks. it's looking good.
[03:19] <stub> patch-2283 IIRC
[03:19] <sabdfl> mpt: i fixed about 29 page test failures from the new main_template
[03:19] <sabdfl> you're welcome ;-)
[03:19] <mpt> heh
[03:19] <mpt> I only fixed two warnings you created
[03:20] <mpt> so I've got a way to catch up yet
[03:24] <stub> If you paste the full traceback I could probably tell you
[03:24] <sabdfl> stub: done
[03:25] <sabdfl> warnings?
[03:25] <sabdfl> stub: i also fixed validators.bugs.py
[03:25] <sabdfl> it's now in interfaces.validation
[03:25] <salgado> stub, how do I order some GROUPED BY results by a count(*) and get only the rows with the higher count (assuming there maybe rows with equal count)?
[03:25] <sabdfl> along with some propery url validation bits
[03:26] <stub> sabdfl: Ta.
[03:26] <mpt> stub: https://chinstrap.ubuntu.com/~dsilvers/paste/fileFjuxYp.html
[03:27] <stub> salgado: select count(*),name from foo group by name order by count(*) ?
[03:27] <stub> erm... count(*) desc
[03:28] <salgado> stub, yes, that's what I have, but I need to get *only* the rows with the higher count
[03:28] <salgado> is it possible?
[03:28] <stub> select count(*),name from foo group by name having count(*) = max(count(*)) might work
[03:29] <stub> or just select count(*),name from foo group by name order by count(*) desc limit 1;
[03:29] <stub> oh... you want all with the highest count...
[03:29] <salgado> yes, the limit won't work
[03:31] <stub> mpt: erk. either the test is connecting as the wrong user or hasn't initialized the database correctly. But neither should be the case for a system doctest test ;-/
[03:33] <stub> salgado:  select count(*),bounty from bountysubscription group by bounty having count(*) = (select count(*) from bountysubscription group by bounty order by count(*) desc limit 1)
[03:33] <mpt> salgado: You're in charge of the database setup, is this something you can fix?
[03:35] <salgado> stub, great. that's exactly what I need. thanks. :)
[03:35] <salgado> mpt, what's the problem?
[03:37] <mpt> salgado: https://chinstrap.ubuntu.com/~dsilvers/paste/fileFjuxYp.html
[03:39] <stub> I can't see any obvious problem on my copy of that test
[03:40] <salgado> mpt, the database setup is the same as yesterday and the same that I'm using. I don't think this failure can be related to the fact that you use another postmaster
[03:41] <mpt> ok, thanks anyway
[03:55] <stub> salgado: That test is explicitly connecting to port 5432, so mpt is probably talking to the wrong postmaster
[03:55] <stub> (fixable by adding the postmaster port to the config file?)
[03:55] <salgado> oh, no. is this a new test?
[03:56] <stub> Dunno, although I expect it is an older one. Might have been passing before by accident ;)
[03:56] <stub> Only the reconnect tests will hardcode the port btw., so only one or two.
[04:16] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [r=BjornT]  Fix for bug 1785: Librarian doesn't handle unicode filenames properly.  Plus more tests. (patch-2296: andrew.bennetts@canonical.com)
[04:18] <wdamn> hi everybody, I'd like to help the translation of zope into italian - I've subscribed to launchpad but I don't understand HOWTO. some links would be welcome. thank you
[04:25] <mpt> wdamn: Ok, go to https://launchpad.products/zope then click "Translations", then "Template 'zope' in Zope 3.1", then "Italian"
[04:30] <carlos> dand, the plural form change is now on production. stub, thanks!
[04:31] <dand> carlos: gracias :)
[04:39] <sabdfl> wdamn: https://launchpad.net/products/zope/ then further per mpt's instructions
[04:39] <kiko> hey sabdfl 
[04:40] <sabdfl> hiya
[04:43] <kiko> I'm sick :-(
[04:44] <carlos> kiko, :-(
[04:44] <carlos> superkiko never get sick!
[04:44] <carlos> :-P
[04:44] <kiko> yeah, it's been quite a while -- since switzerland
[04:47] <sabdfl> kiko: i got a nasty bug on The Island
[04:48] <sabdfl> kiko: and aren't you due for a holiday? always happens.
[04:51] <wdamn> sabdfl, mpt: thank you :)
[04:52] <mpt> You can't be sick, kiko, you need to review my [not-so-trivial]  fixes
[04:53] <carlos> mpt, :-D
[04:55] <kiko> mpt, I can review even while sick
[04:55] <dand> I noticed some translations I entered last week in Rosetta for gnome-app-install (ro) are now missing. should I enter them again or there's a temporary glitch?
[04:56] <Kinnison> hey sabdfl, you coming to camby this w/e?
[04:56] <sabdfl> Kinnison: bbq on sat?
[04:56] <Kinnison> sabdfl: yep
[04:56] <sabdfl> i'm going to be speaking at aKademy
[04:56] <Kinnison> sabdfl: :-(
[04:57] <sabdfl> bling bling
[04:57] <Kinnison> sabdfl: there's sunday and monday too
[04:57] <sabdfl> bling bling bling
[04:57] <kiko> carlos, check out dand's report?
[04:57] <sabdfl> am only getting back monday night :-/
[04:57] <dand> kiko: thanks :)
[04:57] <Kinnison> sabdfl: fair enough, enjoy aKademy
[04:57] <sabdfl> Kinnison: thanks, and regards to TheKrowd
[04:58] <carlos> dand, could you give me a more concrete clue?
[04:58] <carlos> dand, for instance, a concrete msgid that you know you already translated would be really helpful
[04:58] <dand> carlos: sure: "Add or Remove Applications"
[04:58] <dand> carlos: it was translated 100%
[04:59] <Kinnison> sabdfl: how Kute. I'll pass on your Kind Komments
[04:59] <carlos> dand, URL?
[04:59] <dand> https://launchpad.net/distros/ubuntu/breezy/+sources/gnome-app-install/+pots/gnome-app-install/ro/+translate
[04:59] <sabdfl> kiko: now that i'm playing more with the menu system, i think the inheritance is confusing, and we should go to straight objects + facets
[04:59] <sabdfl> if an object has no Bugs facet, it gets no Bugs tab
[04:59] <sabdfl> mpt: ^ ?
[04:59] <dand> carlos: I don't think there were 44 strings in all, I wish I had a po export...
[05:00] <dand> carlos: are there multiple templates of gnome-app-install available? 
[05:00] <carlos> dand, there is such feature...
[05:00] <kiko> sabdfl, makes sense to me
[05:00] <dand> carlos: yeah, I know. I just wish I would have used it for gnome-app-install, after translating it
[05:00] <kiko> sabdfl, do the facets disappear or just get unlinked?
[05:00] <carlos> dand, if you added it to our database, you have it there
[05:00] <carlos> is not lost
[05:01] <carlos> but perhaps could be a bug that has disabled it
[05:01] <mpt> sabdfl: That's what I said to kiko yesterday, once LaunchpadHierarchyNavigation is implemented, every facet should be at the same level, or not available at all.
[05:01] <sabdfl> kiko: disappear
[05:02] <sabdfl> though, unlinking gives the muscle memory advantage
[05:02] <dand> carlos: I'll try translating it 100%, watch it closely and let you know if it happens again
[05:02] <kiko> right
[05:02] <carlos> dand, no, please, wait
[05:03] <dand> carlos: ok
[05:03] <carlos> Let me finish what I'm doing atm and I will take a close look at it
[05:03] <carlos> dand, can you file a bug with the information I just asked you?
[05:03] <dand> carlos: absolutely, there's no hurry. thanks!
[05:03] <carlos> dand, thank you
[05:12] <kiko> mpt, is https://launchpad.net/malone/bugs/1263 fixed?
[05:17] <mpt> yes
[05:18] <carlos> kiko, btw whitespace data migration is done
[05:18] <kiko> carlos, I know, wonderful, isn't it?
[05:18] <carlos> kiko, :-)
[05:19] <carlos> kiko, how do you want to handle the conflicts in daf's branch?
[05:19] <carlos> kiko, I cannot commit unless I fix them
[05:20] <kiko> hmmm
[05:20] <kiko> hmmm
[05:20] <kiko> complicated
[05:20] <carlos> I know..
[05:21] <kiko> well
[05:21] <kiko> what sort of changes are they?
[05:21] <kiko> are they all interdependent?
[05:21] <kiko> or can you just pull a patch and then remove the files which aren't rosetta-related?
[05:22] <carlos> kiko, I can do the later
[05:22] <carlos> it's a "cleanup" branch
[05:22] <carlos> removes db imports, fix traversals, etc...
[05:23] <kiko> right
[05:23] <kiko> so generate a patch, mail me the non-rosetta parts, and take care of the rest
[05:23] <kiko> we'll dead-end daf's branch
[05:26] <kiko> hey
[05:26] <kiko> who's our regular expression ninja?
[05:26] <kiko> I have an interesting problem
[05:26] <kiko> I want to match a string which may contain dots, commas and question marks /except/ for the last dot, comma or question mark
[05:27] <carlos> kiko, ok
[05:27] <carlos> will do it tomorrow, I will take care of other things today, I need to do some fun stuff now or will be too bored :-P
[05:33] <stub> kiko: Sounds like a use case for lookaheads
[05:34] <kiko> stub?
[05:36] <stub> kiko: Check out the Python Library Reference. But from your description, all you want is ^([.,?] +)[.,?] $
[05:37] <kiko> the trailing bits are optional
[05:37] <stub> Then ^([.,?] +?)[.,?] ?$
[05:38] <kiko> the trailing $ is really close to what I want
[05:38] <kiko> I'll think more about it
[05:40] <stub> eh?
[05:41] <stub> Describing it in english properly is the first step anyway ;)
[05:41] <mpt> "25 conflicted items in this tree."
[05:41] <mpt> woohoo
[05:42] <stub> Because I'm sure you really don't want to match a string consisiting of just punctuation like you said ;)
[05:42] <kiko> stub, well:
[05:42] <kiko> http://localhost:8086/malone/bugs/9.
[05:42] <kiko> I don't want the match text to include the trailing dot
[05:42] <kiko> better example:
[05:42] <kiko> http://localhost:8086/malone/bugs/9.html.
[05:42] <kiko> I don't want the match text to include the trailing dot
[05:49] <stub> (http://[\w.] )(:\d+)?/([\w.,?] +?)[.,?] ?
[05:50] <kiko> stub, that doesn't work in the case of:
[05:50] <kiko> http://localhost:8086/malone/bugs/foo.bar.9.html.
[05:50] <stub> It doesn't?
[05:50] <kiko> no, it doesn't
[05:50] <kiko> because the +? makes the match non-greedy
[05:50] <kiko> so we stop matching at the first . we find
[05:50] <stub> Ahh... so you need whitespace or $ termination in there too
[05:51] <kiko> right, which is what I said above
[05:52] <stub>  (http://[\w.] )(:\d+)?/([\w.,?] +?)([.,?] ?(?=\s) would do whitespace termination
[05:52] <carlos> mpt, how is your work queue?
[05:52] <carlos> too big?
[05:52] <stub> (http://[\w.] )(:\d+)?/([\w.,?] +?)([.,?] ?(?=\s)|$) might do it
[05:53] <stub> Or you could install pyparsing as a dependancy, which has been getting good reviews for 'parsing stoof'. Not that I have played with it.
[05:54] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: last bits of basic bug atttachment implemenation, plus some bug fixes. [r=spiv]  (patch-2297: bjorn.tillenius@canonical.com)
[05:58] <mpt> carlos: I'm tidying up Rosetta's translation form at the moment, then finishing cleaning up the actions portlets
[05:58] <carlos> mpt, I would like to implement https://wiki.launchpad.canonical.com/TranslationReview
[05:59] <carlos> mpt, but I will need some help with the javascript part
[06:00] <mpt> carlos: yes, that's what I'm working on
[06:00] <carlos> cool
[06:01] <carlos> mpt, I need it for the pomsgsetview page
[06:01] <carlos> so people can see suggestions for multiline entries
[06:01] <carlos> mpt, please, tell me when it's ready
[06:01] <carlos> so I can start with hte other spec
[06:06] <mpt> ok
[06:09] <mpt> Anyone know how to resolve a conflict in a binary file?
[06:09] <kiko> delete it and add a new one
[06:20] <kiko> bradb, are you hacking tests for the patch I submitted?
[06:20] <bradb> kiko: No, I'm hacking MaloneSearchResults.
[06:21] <bradb> But I could put that off to write the test for the BugTaskAssigneeWidget bugfix, if you want.
[06:21] <kiko> well
[06:21] <kiko> I'd like to get those tests in today to avoid having it broken for one more week 
[06:21] <kiko> is MSR looking landable?
[06:23] <bradb> MSR will easily be review-queueable today, just a few kinks to iron out. Note: the first merge will be such that MSR is only shown on the sourcepackage bug listing, and nowhere else (otherwise it becomes a significantly larger patch and will take a lot longer to land.)
[06:23] <bradb> I'll have time to get to both today (I would have already probably done the required MSR work if my house didn't decide to have plumbing problems this morning.)
[06:24] <kiko> sure
[06:24] <kiko> well, get the assignee bugfix in today
[06:24] <kiko> I noticed that my patch is actually correct because in production the link to "me" is often missing
[06:25] <bradb> "me" only shows if there's no assignee
[06:26] <kiko> which is wrong
[06:26] <kiko> or aren't you allowed to take bugs assigned to others? :)
[06:26] <kiko> i.e. steve's on vacation
[06:26] <kiko> daf's on sick leave
[06:26] <kiko> etc
[06:27] <bradb> Sure, but it's a balance between how common that will happen in Malone and 4 radio buttons, no/
[06:27] <kiko> not really
[06:27] <kiko> 4 radios in that situation is okay -- it's actually confusing that me doesn't show up in certain situations
[06:28] <bradb> ok
[06:29] <bradb> creating a branch now, will write the test to make sure it exposes the failure, then add the patch to make sure it fixes it as expected
[06:31] <mpt> There should never be four radiobuttons, but no-one listens to me
[06:31] <bradb> mpt: I do. Heck, I specifically made sure you and kiko approved the design of the widget before committing it. :)
[06:32] <bradb> (I do /listen/ to you, that is, not I do think there should be 4 rb's :)
[06:33] <mpt> yeah, I know
[06:33] <mpt> I didn't write up a formal specification for it, though
[06:34] <bradb> mpt: Will it be reasonable for the first merge of MSR to have MSR only implemented in the sp bug listing, or will that be completely weird?
[06:34] <mpt> yes, and yes
[06:34] <kiko> mpt, it's better to have 4 radios than no "me" button in arbitrary situations, sorry.
[06:34] <bradb> mpt: I thought you might say that :P
[06:36] <mpt> kiko: Sure it is, but it would have been just as much effort to implement it the right way that produces only three
[06:36] <mpt> never mind, I'll fix it later
[06:36] <kiko> oh
[06:36] <kiko> you are talking about removing assigned_to
[06:36] <kiko> gotcha
[06:37] <mpt> ( ) nobody ( ) me (*) [current@assignee ] 
[06:37] <bradb> mpt: you mean that "assigned to" would be populated?
[06:37] <bradb> right
[06:37] <mpt> right, just like all the other fields in that form.
[06:37] <kiko> well
[06:37] <kiko> I'm not fixing that today
[06:37] <kiko> so we'll have 4 until mpt gets around to it
[06:39] <mpt> oh, baz, you got royally confused here
[06:41] <kiko> ProgrammingError: ERROR:  permission denied for relation person
[06:41] <kiko> is anyone getting that when running functional tests?
[06:42] <mpt> kiko-fud: Not quite the same as my ProgrammingError: ERROR:  relation "person" does not exist'
[06:46] <sabdfl> kiko-fud: did you just refuel?
[06:56] <Kinnison> How often does jamesh's pending branch summary get regenerated?
[07:01] <kiko> sabdfl, yes, a while back -- why?
[07:03] <dilys> Merge to rocketfuel@canonical.com/cscvs--devel--1.0: [r=spiv]  disconnect native cvs client before and after rlog (patch-104: david.allouche@canonical.com)
[07:05] <sabdfl> kiko: what was a while back?
[07:05] <sabdfl> ddaa: won't that kill performance?
[07:06] <kiko> sabdfl, the refuel
[07:06] <sabdfl> kiko: so it's not a problem just introduced in rf today?
[07:06] <kiko> mpt seem to have gotten something similar yesterday
[07:06] <kiko> I've got my work blocked because of it, waah
[07:08] <ddaa> sabdfl: the cost is just a couple of additional pserver authentications per sync. Now that you mention it, it might interact badly with SF.net connection throttling...
[07:09] <ddaa> However, there are bugs in cvs servers that cause them to blow occasionally when doing too many different things in a single connection.
[07:09] <sabdfl> ddaa: and for the initial fetch and import?
[07:10] <ddaa> sadfl: same thing, 2 more connections.
[07:10] <ddaa> the rlog is done only once.
[07:10] <ddaa> That is the rlog for the whole module.
[07:15] <sabdfl> ok
[07:15] <sabdfl> shouldn't be a problem them
[07:15] <sabdfl> then, even
[07:19] <Kinnison> night guys
[07:20] <kiko> night Kinnison 
[07:45] <bradb> mpt: for the XXX in tales.txt, did you mean these:
[07:45] <bradb> displaying-bugs-and-tasks.txt:27:  >>> test_tales("bugtask/fmt:icon", bugtask=high_priority_task)
[07:45] <bradb> displaying-bugs-and-tasks.txt:30:  >>> test_tales("bugtask/fmt:icon", bugtask=medium_priority_task)
[07:45] <bradb> displaying-bugs-and-tasks.txt:33:  >>> test_tales("bugtask/fmt:icon", bugtask=low_priority_task)
[07:46] <mpt> Is it that easy?
[07:46] <mpt> sure, something like that :-)
[07:49] <bradb> Well, not quite /that/ easy. I snipped the output that the result is compared against.
[07:49] <bradb> But yes, that easy, basically.
[08:09] <kiko> bradb, what's the ETA for the assignee widget fix?
[08:10] <kiko> I'm only insisting because it blocks work in one of my trees
[08:13] <bradb> kiko: If I switch to that branch now, I'm guessing an hour or an hour and a half if I can baz smash it.
[08:14] <kiko> you only have one tree?
[08:14] <kiko> I just want to make sure it's done today
[08:14] <bradb> I have two trees
[08:26] <mpt> hi ho, hi ho, just 7 conflicts to go
[08:36] <kiko> it's CRACKBAZ
[08:38] <elmo> what's python equiv of iconv -f utf-8 -t ascii?
[08:39] <elmo> codecs.utf_8_decode(foo, "replace") isn't doing what I want, i.e. giving me ASCII
[08:41] <Keybuk> .encode("ascii", "replace")
[08:41] <Keybuk> (on the end of what you just had)
[08:42] <sabdfl> cheers all, i may be able to hop on again later
[08:42] <elmo> boggle
[08:42] <Keybuk> actually, let's start from the basics
[08:42] <Keybuk> you have a string that's in utf-8, yes?
[08:42] <Keybuk> but is a Python ordinary string?
[08:42] <elmo> I don't know, it's from SQL Object
[08:42] <Keybuk> SQLobject will give you a Unicode string
[08:43] <Keybuk> so just do that.encode("ascii", "replace")
[08:43] <Keybuk> where that is your thing-from-sqlobject
[08:43] <Keybuk> sourcepackage.name.encode("ascii", "replace") for example
[08:43] <Keybuk> or just str() it
[08:43] <Keybuk> str(sourcepackage.name)
[08:44] <Keybuk> though str() will fail if it contains non-ascii characters, where encode("ascii", "replace") will replace them with "?"
[08:44] <elmo> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 2: ordinal not in range(128)
[08:44] <elmo> is from str(member.familyname)
[08:44] <Keybuk> right, so use member.familyname.encode("ascii", "replace")
[08:45] <elmo> ok, thanks.. that gets me further 
[08:45] <elmo> just to "??" ville
[08:46] <Keybuk> *shrug*
[08:46] <Keybuk> you can't do anything else with it unless you know the language of the string you're trying to transliterate
[08:46] <Keybuk> Unicode helpfully is done by glyph, not logical character
[08:46] <kiko> Mem:       1035928    1030292       5636          0      66444      56364
[08:46] <kiko> baz loves me
[08:47] <Keybuk> it might be  -> ue in one language, but  -> ui in another
[08:47] <elmo> bugger
[08:48] <kiko> Keybuk, if you knew the language, how would you go about converting it?
[08:48] <elmo> ok, so here's the thing
[08:48] <Keybuk> kiko: great, big, honking lookup tables
[08:48] <elmo> I'm trying to do first.last@ubuntu.com for all members
[08:48] <elmo> anyone got any bright ideas on how to handle folks with non-7-bit names?
[08:48] <kiko> Keybuk, nothing that python or glibc provide to you out of the box? :-(
[08:49] <Keybuk> kiko: nope
[08:49] <Keybuk> it's a non-trivial problem
[08:49] <kiko> that's disappointing.
[08:49] <kiko> elmo, skip them and email them for their preferred transliteration? how many are there?
[08:50] <elmo> kiko: the point is to do this automatically, or I wouldn't be bothering with launchpad
[08:50] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Fix for bug 1634: Linkification code breaks with URLs that are followed by greater-than+comma or greater-than+period. Also implements tests for linkification that makes sure that this /stays/ fixed (patch-2298: christian.reis@canonical.com)
[08:50] <kiko> elmo, I know, but I don't have a better suggestion.
[08:50] <elmo> I'd guesstimate about 10+ once all the pending people get approved
[08:50] <kiko> ah, pqm loves me
[08:51] <elmo> well, would it be silly to have a "old-skool-name" field people could fill in?
[08:53] <kiko> would you fill it out with js automatically?
[08:54] <Keybuk> elmo: imagine when a Japanese person comes along
[08:54] <elmo> kiko: I guess, it would default to the same as your normal name, unless it was non-ascii? and prompt if it was
[08:54] <Keybuk> and fills in  as their name
[08:54] <elmo> Keybuk: ... they have romanized versions of their names right?
[08:54] <salgado> elmo, once Steve told me he wrote something to do this. btw, I guess mako has this too
[08:55] <Keybuk> yeah, better to add an "preferred ASCII format of name" column
[08:55] <elmo> ok, so as long as it's not completely crackful idea, I'll mail the list
[08:55] <Keybuk> another thought
[08:55] <Keybuk> you know we use first.last@
[08:55] <Keybuk> what do we do for inverse names?
[08:55] <Keybuk> goto.masanori@  or masanori.goto@ ?
[08:56] <elmo> aww, christ knows
[08:56] <Keybuk> (goto is his family name)
[08:56] <elmo> the debian .jp guys aren't even consistent about that
[08:56] <elmo> ATM, my script uses given.famil@
[08:56] <elmo> do we need a "name order preference" button too?
[08:56] <elmo> that'd be useful for more than just email, I guess
[08:56] <Keybuk> I did bring this up about how stupidly western first.last@ format names were when you decided to use them, but did you listen? ;)
[08:56] <elmo> Keybuk: did you come up with a better idea? :-P
[08:57] <Keybuk> usernames
[08:57] <elmo> yeah, 'cos we want microsoftsucks@ubuntu.com
[08:57] <Keybuk> ok
[08:57] <elmo> and there'll be no namespace collisions with usernames at all
[08:57] <Keybuk> so on lp, if I go to people/keybuk and click "Edit Details" it asks me for my up+pw, then tells me "You're ALREADY LOGGED IN"
[08:58] <Keybuk> hmm
[08:58] <Keybuk> we have a Display Name field
[08:58] <Keybuk> that suffices for "preferred order" - use whatever they put in that
[08:58] <Keybuk> and if their name contains non-ASCII, ask for an "ASCII Display Name" ?
[08:58] <elmo> the displayname is a nickname
[08:58] <elmo> AFAICT
[08:59] <elmo> err, no it's not, sorry ignore my crack
[09:00] <Keybuk> someone could still give their name in lp as Mrs Microsoft Sucks
[09:00] <Keybuk> microsoft.sucks@ubuntu.com
[09:01] <elmo> yeah, but they'd have to get past the CC with that as their name
[09:01] <Keybuk> likewise they would for preferred username for e-mail address
[09:01] <Keybuk> :)
[09:02] <Keybuk> then again, I swear the newscaster on Radio 2 just introduced herself as Vanilla Fudge
[09:04] <elmo> why do we even have the separate display name
[09:04] <elmo> that seems to be inviting trouble
[09:04] <Keybuk> the only thing funnier than invented names is real ones
[09:04] <Keybuk> (I think her name is Fanella Fudge)
[09:05] <elmo> Fanella?
[09:05] <Keybuk> at my school, a few years above me, there were a brother and sister -- Wayne and Jo King
[09:05] <Keybuk> I had a Justin Hanky in my class
[09:05] <kiko> here's a question
[09:06] <kiko> salgado, BjornT, bradb: is it possible to make a functional doctest for a browser method?
[09:06] <kiko> ah,there is, cool
[09:08] <bradb> kiko: testing views, you mean?
[09:08] <bradb> bradb@oxygen:~/launchpad/lib/canonical/launchpad/doc $ ls *pages*
[09:08] <bradb> bug-release-targeting-pages.txt  sourcepackage-bug-pages.txt
[09:08] <bradb> are some examples of view tests I've written
[09:12] <kiko> opens the wall?
[09:13] <bradb> Blockage in the cold water tube leading to the washing machine. Yes, I'm wearing dirty clothes right now.
[09:15] <bradb> "M'a ess d de devisser le tuyaux icitte l et.......*snap*"; he snaps the pipe trying to unscrew the faucet from the tube.
[09:16] <bradb> at which point, the choice to open the wall was made
[09:16] <kiko> you guys are crazy
[09:16] <bradb> The plumber is a madman.
[09:17] <kiko> who hired him?
[09:17] <kiko> you're a team
[09:17] <bradb> A team? i.e. the condo administration, you mean?
[09:17] <kiko> heh
[09:17] <kiko> how are my tests looking?
[09:18] <bradb> They aren't, I'm only now waiting for the branch to switch
[09:21] <bradb> better yet:
[09:21] <bradb> .........................................................ssh: chinstrap.warthogs.hbd.com: Name or service not known
[09:21] <bradb> Segmentation fault
[09:22] <salgado> bradb, I created a vocabulary for the Country table, but I don't want the fields using this vocab to render that text entry with the popup. instead, I want to have a select widget
[09:22] <salgado> do you know how to do that?
[09:24] <bradb> I believe inheriting from SQLObjectVocabularyBase should be enough.
[09:25] <bradb> Just don't do the implements(IHugeVocabulary) in your vocabulary, because if you want a select widget rendered, then it doesn't quality as "huge".
[09:25] <bradb> MilestoneVocabulary is an example
[09:26] <bradb> s/quality/qualify/
[09:27] <kiko> isn't a select widget for country kinda crazy, or are you going to use a select size=5?
[09:29] <salgado> bradb, yeah, that seems to work. but it failed because zope calls str(token) and there's non-ascii characters in that table
[09:29] <kiko> yay for zope
[09:29] <salgado> kiko, I can use a multiline select, but I think even a single-line select is better than our popup widget in this case
[09:30] <kiko> it's a lot of countries, though
[09:35] <bradb> Applying 128 revisions ...........................................................
[09:35] <salgado> kiko, bradb, https://chinstrap.ubuntu.com/~dsilvers/paste/filey6o5Mk.html
[09:36] <salgado> I think the str() should be around value only
[09:36] <salgado> as that's what the docstring says
[09:38] <BjornT> salgado: it shouldn't matter, since token should be ascii only
[09:38] <salgado> BjornT, why should it be ascii only?
[09:40] <BjornT> salgado: i'm not sure sure exactly why, but it's specified like that in ITokenizedTerm
[09:41] <bradb> good point
[09:41] <salgado> BjornT, so I'm not allowed to display non-ascii data in the widgets if I'm using a vocab?
[09:43] <BjornT> salgado: title should work i think
[09:46] <salgado> BjornT, it works. ta
[09:47] <salgado> BjornT, so, I guess I should update the NamedSQLObjectVocabulary docstring to say that the names must be unique *and* 7-bit. what do you think?
[09:49] <BjornT> salgado: yeah, that'd be a good idea
[09:57] <bradb> * Comparing FROM and TO ............................................................baz: uncaught exception: -1:(unable to fork for diff)
[09:57] <bradb>   please report this as a bug to bazaar@lists.canonical.com
[09:59] <kiko> bradb, kill firefox
[09:59] <kiko> and anything else big
[09:59] <bradb> yeah, i killed ffox and emacs
[10:00] <bradb> (for round three, that is)
[10:14] <mpt> carlos: How do I format a suggestion the same way as the original English is formatted?
[10:14] <mpt> the original uses tal:content="structure messageSet/getMsgID"
[10:15] <carlos> mpt, We will need to feed the messageSet dictionary with the suggestions inside the view class
[10:15] <carlos> instead of getting the suggestions directly from the template
[10:17] <mpt> carlos, so should there be a /fmt:showinvisibles?
[10:17] <carlos> showinvisibles?
[10:17] <carlos> why?
[10:17] <mpt> To show the space characters and linebreaks
[10:17] <mpt> and tab characters
[10:17] <carlos> oh
[10:17] <mpt> like the originals do
[10:17] <carlos> hmm
[10:18] <mpt> So when you're looking at a suggestion that's slightly different from the original, you can see what's different
[10:18] <carlos> well, I was thinking on show them always
[10:18] <carlos> oh
[10:18] <carlos> hmmm
[10:18] <carlos> good point
[10:18] <carlos> mpt, yes, sounds ok
[10:18] <carlos> mpt, now that you are with that...
[10:18] <mpt> You can't show them always if you want to put them in the text field :-)
[10:19] <mpt> Currently they're in a <pre>, which is ugly
[10:19] <carlos> mpt, should we should whitespaces always with the middle point? instead of just show the ones at the start/end?
[10:19] <carlos> mpt, yeah
[10:21] <mpt> carlos: Yes, the same applies
[10:21] <carlos> oh, what am I thinking on?
[10:22] <carlos> s/should we should/should we show/
[10:22] <mpt> Otherwise some silly person comes along who learnt to type in the 1960s, so they put two spaces between sentences rather than one, and you're staring at their suggestion and thinking "huh?"
[10:27] <bradb> kiko: https://chinstrap.ubuntu.com/~dsilvers/paste/filexio8yi.html -- here's what I've added to the doctest (at the end of the section that has just finished demonstrating that "assign_to" works} to demonstrate the breakage you discovered. Does this look like what you were expecting?
[10:27] <bradb> If so, I'll add you patch and see if it magically passes.
[10:27] <carlos> mpt, yeah, I like that
[10:27] <kiko> should be carlos 
[10:28] <bradb> kiko: Without the patch, the test breaks because of no .name on NoneType object (i.e. getInputValue is returning None when it should return the current assignee instead.)
[10:29] <kiko> right.
[10:30] <mpt> kiko: Will you have time to review my products/projects fixes today?
[10:31] <kiko> I'm at the moment trying not to cry
[10:31] <kiko> where are those fixes?
[10:31] <mpt> mpt@canonical.com/launchpad--devel--0
[10:35] <kiko> mpt, looks okay, yes, I'll have time for it.
[10:35] <mpt> thanks kiko
[10:36] <kiko> however I'd like to talk to you
[10:40] <mpt> now?
[10:41] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Fixes for another 3 bugs: bug 1358: Sort order should be indicated in Malone results; bug  1743: wording of Release Filename Pattern in Edit Series Details is ambiguous; bug 1787: Sorting a bug list will unhide fixed/rejected tasks. Includes some cleanups and refactorings along the way. (patch-2299: christian.reis@canonical.com)
[10:41] <kiko> finally
[10:41] <mpt> carlos: I'm sorry if I've asked you this before, but when a message has more than one plural form, is the fuzzy bit set for all of them at once, or individually?
[10:41] <carlos> mpt, all of them
[10:42] <mpt> pofile-translate.pt makes my brain hurt
[10:48] <kiko> carlos!
[10:51] <bradb> kiko: So, the test fragment I showed above passes now. Should I merge this with your patch?
[10:51] <kiko> bradb, sure -- if the tests run, it's all good :)
[10:51] <bradb> What's the reviewer tag on it?
[10:51] <kiko> did you look at my patch at least?
[10:51] <bradb> no
[10:51] <bradb> :P
[10:53] <bradb> Hm, I'll have to fix a few things.
[10:53] <bradb> e.g. tal:attributes="for string:assigned_to_nobody"> should be using view/assigned_to_nobody
[10:55] <sivang> mpt: around ?
[10:56] <mpt> sivang: yo
[10:56] <kiko> bradb, that's not really the same thing, but okay
[10:56] <kiko> it's trivial
[11:05] <bradb> kiko: Also, I'm wondering: "raise AssertionError" doesn't seem very self-documenting. Maybe something like "raise WidgetInputError('Unknown assignee option selected')"?
[11:07] <kiko> bradb, it's an assertion error, it should never happen
[11:08] <kiko> I don't like wasting time cooking up exceptions that are basically assertions with another name
[11:08] <kiko> feel free to change if you like though
[11:08] <bradb> kiko: "wasting time cooking up..." -- WidgetInputError is the exception documented in IInputWidget.getInputValue. :)
[11:09] <kiko> my point is that you had nothing there
[11:09] <kiko> it's about 10 extra calories looking up what the right exception is
[11:09] <kiko> you saved up those calories by omitting the exception
[11:10] <kiko> I spent 1 calorie by adding a raise AssertionError
[11:10] <sivang> mpt: if I get the spec straight, LaunchpadIntegrationHelpPage talks about what will open to the user when he choses from the lp integration menu itesm "Get help" ?
[11:11] <mpt> sivang: yes
[11:12] <kiko> I am fine with coding Properly, bradb, but coding Cheap is often better than coding Incomplete. :)
[11:12] <bradb> kiko: BTW, using by not using view/assign... attributes you hardcoded a string as "assigned_to_nobody", when the string is actually "assign_to_nobody", it appears.
[11:13] <carlos> kiko, ?
[11:13] <kiko> bradb, hmmm. AFAICR the labels worked correctly
[11:14] <bradb> kiko: They would have, because the id and for attributes were consistently incorrect ;)
[11:14] <sivang> mpt: I think I have an idea how to implement the client caching and retrival of help info from launchpad, should I outline my proposal on that same page? In which stage of implementation are you with the actual launchpad page?
[11:14] <kiko> bradb, I could have made the same mistake using view/assign...
[11:15] <bradb> kiko: Yep, and it would have raised an exception. :)
[11:15] <kiko> why?
[11:15] <bradb> (which is exactly what just happened here when i threw a view/ in front of those string literals.)
[11:15] <kiko> ah
[11:15] <kiko> well
[11:16] <kiko> to be honest, that sort of error matters like 0.000000001% on the scale of things :)
[11:17] <sivang> mpt: (ofcourse , I assume we discuss this as post breezy goal, since we're effectibely in FF)
[11:17] <sivang> s/b/v/
[11:18] <mpt> sivang: Provided that the Ubuntu side of things is pointing at the right URLs, Launchpad can change what appears at those URLs regardless of any freeze
[11:19] <sivang> mpt: sure, that also needs a discussion. When will be the right time to talk about the having stuff on the clinet side?
[11:20] <sivang> mpt: other then that, a couple of things I think would be nice to have on the help page is:
[11:21] <sivang> 1) links to frequent occuring issues . (if you're alsa doesn't work out of the box click here)
[11:21] <sivang> 2) Allow individuals to lis them selves as support sources.
[11:22] <sivang> ofcoure in (1) it's issues and their usual remedies
[11:23] <bradb> kiko: So, I've looked it over, made the small fixes mentioned above. Should I go ahead and merge with an r=[bradb] ?
[11:23] <kiko> yes
[11:23] <kiko> thanks brad
[11:23] <bradb> no problem, thanks for the patch
[11:24] <sivang> 3) have support "groups" as part of the support source; peopel with common expertise that can help on that field, on which a customer/user can dipatch a problem / question and expect an authoritive advice
[11:25] <sivang> and on top of this, MaloneSupportINtegration would be aweseom , although I asume is still far on the development queue :)
[11:25] <bradb> salgado: any chance of some portlet mania love today?
[11:26] <mpt> sivang: The right time for the client side was last month, and afaik it's already implemented
[11:26] <mpt> sivang: As for the server side, those are interesting ideas, though probably for the future
[11:27] <mpt> because I over-specced it, it's just going to be a wiki-style page for now.
[11:28] <sivang> mpt: on the client side you mean, the support information is cached locally and available when not connected to a network as well? the client side currently opens a web browser with the right link, that's all
[11:29] <mpt> yes, opening a Web browser is what I meant
[11:29] <mpt> sivang: Will you be at UBZ?
[11:29] <sivang> mpt: ah, well you mention on the spec the possibility to have apps fetch each his respective support info and let user see it offline
[11:29] <sivang> mpt: UBZ ? 
[11:30] <mpt> sivang: https://wiki.ubuntu.com/UbuntuBelowZero
[11:31] <carlos> good night!
[11:31] <carlos> mpt, do you need anything from me?
[11:32] <mpt> carlos, when you wake up have a look at mpt@canonical.com/launchpad--translation-cleanup--0
[11:32] <carlos> ok
[11:32] <mpt> And see if you can fix any of the XXXs :-)
[11:32] <kiko> carlos, do that /last/ :-)
[11:33] <mpt> Well, it's TranslationReview
[11:33] <kiko> mpt, carlos already has a pretty long plan for when he wakes up :)
[11:33] <mpt> How urgent is that supposed to be?
[11:33] <kiko> (for the rosetta 1.0 release)
[11:33] <carlos> kiko, sure ;-)
[11:33] <kiko> it's urgent, just post 1.0-release, which was supposed to be tonight
[11:34] <mpt> oh
[11:34] <mpt> will it be?
[11:34] <sivang> mpt: ah nice, I didn't know it was going to be in Canada :)
[11:34] <carlos> see you
[11:35] <mpt> g'night carlos
[11:35] <sivang> mpt: hm, I don't know yet if I will - will you be interested to discuss those further there?
[11:35] <mpt> sivang: If you are, you could request a BoF on it, and even if you aren't, you could put the beginnings of a spec in the wiki
[11:36] <sivang> mpt: would you like me to add my ideas on that same spec? or should we opena new pag for it?
[11:39] <mpt> sivang: Put it in a "Discussion" section at the bottom
[11:40] <salgado> bradb, sorry, dude. I was in a hurry today. will try tomorrow morning. 
[11:40] <bradb> salgado: no worries
[11:40] <salgado> bradb, btw, I just saw that there's conflicts on that branch
[11:41] <bradb> hmph
[11:51] <sivang> mpt: ok, I wil. That's actually pretty darn interesting part in Launchpad. that and MaloneSupportIntegration
[11:56] <mpt> sivang: sure ... Sorry I'm a bit distracted from it right now :-)