[12:14] <dilys> New bug 2160 for Launchpad/Soyuz: Nuclear explosion when no string is input in package search 
[12:14] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2160
[12:45] <kiko> hmmm
[12:45] <kiko> dilys, wake up.
[12:45] <kiko> I filed at least 10 bugs 
[01:03] <dilys> kiko: I'm sorry, I wasn't paying attention
[01:03] <dilys> kiko: care to file them again?
[01:03] <kiko> I noticed.
[01:03] <kiko> well, that's not a very good answer, now is it?
[01:03] <daf> what did you file them against?
[01:04] <daf> Dilys isn't necessarily subscribed to all products
[01:04] <kiko> soyuz.
[01:04] <daf> hmm
[01:04] <kiko> she probably watches stevea, come to think of it.
[01:04] <kiko> she should also watch me 
[01:04] <kiko> there are no product watches in bugzilla currently
[01:05] <daf> yeah
[01:05] <daf> they would be handy
[01:05] <kiko> there are bugs filed on it, but you know..
[01:05] <daf> :)
[01:06] <kiko> wild, over 60 spamcop reports for my enjoyment
[01:06] <daf> ok, I've subscribed Dilys to you
[01:08] <dilys> kiko: spam me harder!
[01:17] <kiko> heh
[01:41] <stub> elmo: Is it possible to turn off certificate authentication on bugzilla.warthogs.hbd.com for connections from Mawson?
[02:13] <carlos> night!!
[02:33] <BradB> stub dude, we need a browser:widget not-subdirective!
[02:33] <stub> eh?
[02:34] <BradB> oh, just random Z3 thoughts if you were looking for something to hack today that we'd make use of.
[02:35] <stub> I don't understand what you are asking for ;)
[02:35] <BradB> currently, if you want to change the attributes of a widget, e.g. the size of an input, you have to make that change in every form it applies to
[02:35] <BradB> using the browser:widget subdirective
[02:35] <BradB> e.g.
[02:35] <BradB>         <browser:widget
[02:35] <BradB>            field="title"
[02:35] <BradB>            class="zope.app.form.browser.TextWidget"
[02:35] <BradB>            displayWidth="55" />
[02:35] <BradB> (that's inside a browser:editform)
[02:36] <BradB> i want to be able to change widget configuration globally, and if *needed* change it per form, with the subdirective.
[02:37] <stub> So you want to be able to say <browser:widget for=".whatever.IBug" field="title" class="whatever" displayWidth="55" />
[02:37] <stub> I believe this can already be done in Python btw - just not in ZCML
[02:38] <BradB> yes....it can?
[02:39] <BradB> Philipp didn't mention that, if that's the case. It may be though.
[02:40] <stub> In the IBug schema definition I think you can pass keyword arguments that get sent through to the widget (dislayWidth="55"), and change the field used to render it. (Or if not, you can alway subclass TextField into BugTitleField which does this)
[02:41] <BradB> subclassing takes too much effort when you consider we may want to do this dozens and dozens of times for different fields.
[02:41] <stub> Yup - I'll chase it up and see if it is doable without subclassing.
[02:41] <stub> (just with keyword arguments)
[02:42] <BradB> http://paste.husk.org/1963
[02:42] <BradB> is what philikon started hacking up
[02:44] <daf> grrr
[02:44] <daf> https://www.ubuntulinux.org/forgottenpassword
[02:44] <daf> " A system error occurred."
[02:44] <BradB> that's already been reported
[02:45] <daf> sigh
[02:45] <stub> I thought I'd turned on tracebacks by default?
[02:45] <BradB> ah, we needed to bug SteveA about that today (which was noted in the bugzilla report...maybe he didn't notice)
[02:45] <BradB> stub: on prod apps?
[02:45] <stub> On dogfood for now
[02:45] <BradB> that's the real app though
[02:46] <BradB> btw, i'm currently fixing malone bugs 13, 14, 15, 16 and 30
[02:46] <BradB> if i land my changes though, summary disappears :P
[02:47] <BradB> which everyone thus far has agreed to be A Good Thing...we just need to convince sabdfl ;)
[02:47] <stub> I've got an email ready to send on that
[02:47] <BradB> heh
[02:54] <BradB> heh yep. i'd only have added that the description of a bug that the steps to reproduce it are too tightly coupled to make decoupling them into two fields a sane thing.
[02:55] <BradB> s/that the/and the/
[02:55] <stub> lifeless: ping
[02:56] <stub> lifeless: What was that field you were having UTF-8 encoding issues with that was going to be dropped? You didn't know what character set encoding it was in (I think it was a changelog of some kind)
[02:56] <kiko> I had a problem with ChangeLogs in gina, for the record..
[02:58] <stub> I think the argument about lazy changelogs is redundant then, because it is pointless storing them in the database at all (unless we heuristically guess the encoding - probably a 98% success rate)
[02:59] <stub> And gpg keys could also go into the librarian, since there is no meaningful operations we can perform on them inside postgresql
[02:59] <kiko> true on both counts, though searching through changelogs, well..
[03:00] <kiko> I solved the ChangeLog import by using a "smart" conversion routing that seemed to do a decent enough guess.
[03:02] <stub> ok - so we are using heuristics to guess the encoding (which is good)
[03:04] <kiko> you actually have that code in your tree, look at gina's db.py:ensure_string_format -- caveat hack
[03:06] <kiko> ah, btw.
[03:06] <kiko> I have a patch to suggest to you, a successor to the Makefile fix I sent you once (that you disliked).
[03:14] <stub> kiko: That charset stuff seems broken - at the moment is is doing some redundant operations and may return either a utf-8 encoded string or a Unicode string
[03:19] <stub> I'll knock up a similar one in lp/encoding.py for everyone
[03:19] <kiko> stub, what's the difference between them?
[03:19] <kiko> or were you not referring to gina/database.py?
[03:23] <stub> A UTF-8 string is just a sequence of bytes which can be written to files, sent over tcp sockets etc. but is useless unless everyone who uses it *knows* it is a utf-8 encoded string (and not a shift-jis encoded string, or iso-8859-1 etc.). A Unicode string is an object that abstracts out the need to know the encoding (it knows it for you, and hides it from you).
[03:23] <stub> open('foo.txt','w').write(u'A Unicode string') will fail 
[03:24] <kiko> oh.
[03:24] <kiko> I see what you mean.
[03:25] <lifeless> stub: erm, it was title I think.
[03:40] <kiko> stub, AIUI that code will always return a unicode object, no?
[03:47] <stub> No - if the first bit raises a Unicode error, the second bit returns a UTF-8 encoded string (s = name.decode("latin-1").encode("utf-8"). The next line doesn't modify s, and the line after returns s (still UTF-8 encoded)
[04:01] <kiko> but what we receive is also a utf-8-encoded string, stub
[04:01] <kiko> or else decode/encode would raise an error in the first clause.
[04:01] <kiko> am I mistaken? I tested this quite a bit and it was the only setup that got output that made sense..
[04:01] <lifeless> kiko: ASCII strings pun as UTF-8 by definition.
[04:02] <lifeless> UTF-8 doesn't pun as ascii though.
[04:02] <kiko> yes
[04:02] <kiko> so the code there basically tries to decode and reencode as utf-8, and if it fails, it's not utf-8 and I can try decoding as latin-1 
[04:03] <kiko> but maybe I'm on crack, I'm dead sleepless
[04:03] <stub> oh - yes. both return utf-8. The redundant code confused me.
[04:03] <kiko> which code is redundant? 
[04:03] <kiko> the test decode and return bits?
[04:04] <stub> name.decode("utf-8").encode("utf-8") should just be name.decode('utf-8'), because we can assume that anything Python encodes as UTF-8 is valid
[04:04] <kiko> hmmmm. but why would I have done that unless I ran into a problem? :-)
[04:04] <stub> And the 's.decode('UTF-8') is also unnecessary for the same reason
[04:04] <kiko> maybe you're right, it's straining my memory at this point. 
[04:05] <stub> If you happen to have found a sequence of byte such that name.decode('utf-8') does not return a utf-8 encoded string or raise an exception it is a pretty serious bug in Python that will cause data loss
[04:06] <kiko> upon which encode('utf-8') should always succeed, I see.
[04:07] <kiko> okay, time to kick this server's disks.
[04:12] <BradB> ho ho ho
[04:27] <stub> Urgh - ubuntu has packaged up the Japanese-only Python codecs rather than the cjk codecs (which are going into 2.4) :-( Which we need if we want to process email reliably
[04:27] <stub> Hopefully elmo won't mind installing stuff from Universe onto production...
[07:57] <dilys> New bug 2168 for Launchpad/Rosetta: recent changes feature
[07:57] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2168
[09:30] <sabdfl> BradB: i've already created a Title and Summary widget
[10:37] <Kinnison> Morning
[10:39] <SteveA> hi
[11:02] <Kinnison> Morning cprov
[11:04] <cprov> Kinnison: morning 
[11:07] <Kinnison> Morning ddaa
[11:08] <ddaa> hello Kinnison
[11:20] <SteveA> spiv: ping
[12:46] <salgado> what's the preferred way for defining sqlobject columns in launchpad: _columns = [StringCol('foo')]  or foo = StringCol() ?
[12:46] <Kinnison> the latter apparently
[12:47] <kiko> that was in launchpad email, right Kinnison?
[12:47] <Kinnison> Dunno. sabdfl told me when I was writing some view classes
[12:48] <salgado> I saw lots of places with _columns. that's why I asked
[12:48] <kiko> IIRC it was on lp-list
[12:49] <kiko> which reminds me.
[12:49] <kiko> elmo?
[12:49] <Kinnison> salgado: yeah; old code tends to be _columns
[12:49] <Kinnison> salgado: new code tends to be the foo = StringCol()
[12:54] <sabdfl> salgado: what Kinnison said
[12:54] <Kinnison> coo; I got something right
[12:54] <salgado> Kinnison, sabdfl: ok, thanks. 
[12:55] <Kinnison> sabdfl: meep; I have feathers?
[12:55] <sabdfl> erm, I think I'm mixing my metaphors
[12:55] <sabdfl> or drikns
[12:55] <Kinnison> mixing drinks sounds like more fun
[12:56] <Kinnison> sabdfl: I think I've come to the conclusion (wrt. lucille domination) to take the less correct and way easier to implement domination model I invented while trying to go to sleep last night
[12:56] <Kinnison> sabdfl: I'll send a mail to you and elmo when I've finished this librarian stuff for kiko
[12:56] <kiko> thanks 
[12:56] <sabdfl> Kinnison: ok, sounds sensible
[01:02] <cprov> Kinnison: which "librarian stuff for kiko" are you talking about ?
[01:02] <Kinnison> cprov: FileDownloadClient.getURLForAlias() mostly
[01:02] <Kinnison> cprov: also an email to the launchpad list detailing roughly how to use the librarian
[01:04] <Kinnison> cprov: also a couple of bits for making sure the filenames are encoded in utf8 properly
[01:05] <cprov> Kinnison: ehe,  I know what stuff i just don't understand the "for kiko" . is he implementing something that I don't know in Soyuz ?
[01:05] <Kinnison> I thought it was kiko who had asked me for it
[01:05] <Kinnison> I guess it might have been you
[01:07] <cprov> Kinnison:  I  did it yesterday :), Maybe be kiko did too ...
[01:08] <Kinnison> cprov: heh
[01:10] <Kinnison> Would anyone mind if I updated the librarian files only on mawson in order to test this stuff?
[01:12] <kiko> not me
[01:12] <kiko> I filed a bug on kinni yesterday on the Pending Problem.
[01:12] <Kinnison> I just need to update client.py and web.py :-)
[01:13] <Kinnison> kiko: aah that's it :-)
[01:13] <kiko> cprov, phone
[01:19] <kiko> sabdfl, do you have a plan for the "I am a new soyuz user" usecase?
[01:19] <kiko> sabdfl, I happen to have no password in the database, and I'd like to use the UI to create my user
[01:20] <sabdfl> kiko: no idea, what will work best?
[01:20] <kiko> I believe that is a potential dogfood issue
[01:20] <sabdfl> yes it is
[01:20] <kiko> so let's think about it for a minute
[01:20] <kiko> first, is the soyuz user a launchpad-wide user?
[01:21] <kiko> if so, are we answering the launchpad-wide user registration problem?
[01:22] <kiko> I pray yes, it's time we dealt with this
[01:26] <Kinnison> Who here is a twistd person?
[01:26] <SteveA> spiv: ping
[01:26] <SteveA> Kinnison: spiv knows a lot of twisted.
[01:26] <SteveA> but, perhaps he is having an australia day today
[01:28] <Kinnison> SteveA: twisted isn't working like it used to
[01:28] <kiko> SteveA, care to participate in the "New Soyuz/Launchpad User" discussion?
[01:30] <SteveA> kiko: sure, but when?
[01:31] <cprov> SteveA: sabdfl: any objections to talk about it now ?
[01:32] <kiko> now would be nice.
[01:32] <sabdfl> go ahead
[01:32] <kiko> so there are the two questions I posed
[01:32] <kiko> first, is the soyuz user a launchpad-wide user?
[01:32] <kiko> if so, are we answering the launchpad-wide user registration problem?
[01:32] <sabdfl> when you add a user to the website, they are added to launchpad
[01:32] <sabdfl> and that code exists and is in use
[01:33] <sabdfl> the more interesting dilemma is when a use for which we have an existing account but no password wants to register
[01:33] <kiko> hmmm
[01:33] <kiko> and what if I am registered with another email account, too.
[01:34] <cprov> sabdfl: forgottenpassword can help
[01:34] <sabdfl> cprov: ok
[01:34] <sabdfl> kiko: we need a "merge person" function
[01:35] <kiko> sabdfl, definitely. but let me get this cleared up: a launchpad developer, then, needs to rely on other non-UI ways to create users for his database?
[01:35] <kiko> IOW, there will be no launchpad-based person creation functionality?
[01:35] <kiko> (as in living in lib/canonical/launchpad)
[01:42] <SteveA> kiko: users will be registered, and thus persons created, at various different points in the workflow of the different applications.  What are the current places in launchpad a user might need to register?
[01:43] <SteveA> in rosetta, a user can sign up in a straightforward way, but we're interested in a few rosetta-specific things about them too.
[01:43] <kiko> hmmm
[01:44] <kiko> shouldn't the user be a "launchpad user".
[01:44] <sabdfl> kiko: I guess we need (a) a standard way to redirect people at the "register" pages, and (b) a standard way to add a user from within the code
[01:44] <kiko> ah, now we're talking!
[01:44] <SteveA> where will "register" pages live?  what domain name / path?
[01:45] <kiko> foaf/+register ?
[01:45] <sabdfl> makes sense
[01:46] <SteveA> ok.  for deploying the whole thing ?
[01:46] <kiko> now does this contain all the registration information for a rosetta user? for a soyuz user?
[01:46] <kiko> or do they have "I am a launchpad user, now I want to use rosetta" setup step?
[01:47] <SteveA> perhaps foaf/+register?application=rosetta
[01:47] <SteveA> can add in some rosetta-specific fields
[01:48] <kiko> we're still stuck when that user wants to log into soyuz, no?
[01:48] <SteveA> why?
[01:49] <kiko> well
[01:49] <kiko> how do you see the user being presented with register?application=soyuz?
[01:49] <kiko> I mean, what would he do to be taken to that page.
[01:50] <SteveA> the "login" page will have a link to "register"
[01:51] <kiko> where does the login page live? :)
[01:51] <SteveA> let's assume we're not doing a centralized single-sign-on just now
[01:51] <SteveA> so, I reckon we should have a /+login and a /+register at any particular "/" that is the root of a site we're virtual hosting at
[01:52] <kiko> ah.
[01:52] <kiko> I see.
[01:52] <SteveA> but, the code lives in one place
[01:52] <SteveA> the register code lives in foaf
[01:52] <kiko> one thing that makes me curious about this
[01:52] <kiko> what happens to the navigation bar at the top of the screen when we virtualhost?
[01:52] <SteveA> kiko: I'm making this up as I go along
[01:52] <kiko> I like your ideas, I'm storming too
[01:53] <SteveA> that's a very good question, and one that I'll be talking with Brad about a bit later today
[01:53] <SteveA> feel free to join in
[01:53] <kiko> do all virtualhosts have all tabs available? some? none?
[01:53] <kiko> I will definitely join 
[01:53] <SteveA> I must think of going to find lunch soon
[01:53] <kiko> lithuanian people eat early.
[01:53] <SteveA> it is 3pm here
[01:54] <kiko> taken out of context, that is <wink>
[01:54] <SteveA> working day for one of the programmers here is 12.30pm -> midnight
[01:55] <SteveA> kiko: does that sort things out enough for now for you?
[01:55] <SteveA> is there anything else we should discuss now, before the meeting later today?
[01:55] <kiko> it's getting us somewhere, more discussion is still needed but we'll start considering foaf
[01:56] <kiko> salgado could be named foaf fiend
[01:56] <kiko> let's ponder that
[01:56] <kiko> (cprov suggested it yesterday)
[01:56] <SteveA> spiv is in charge of doap and foaf
[01:56] <kiko> yes, but he's by himself
[01:56] <kiko> and salgado has geographical advantages to him (wrt us at least! :)
[01:57] <SteveA> ok
[01:57] <SteveA> but, if you want to get started on writing the +register page...
[01:57] <SteveA> go ahead
[01:57] <kiko> right
[01:57] <kiko> this needs some daf-brad-consensus as they would be users as well
[01:57] <SteveA> you can get a basic launchpad registration going
[01:58] <kiko> aham
[01:58] <SteveA> then we can talk to daf about removing the rosetta one
[01:58] <SteveA> and merging what is different into the central one
[01:58] <SteveA> same for malone
[01:59] <cprov> SteveA: sure, I'll do the same with soyuz/people/+add
[01:59] <SteveA> we might not even need a ?application=rosetta thing on the end of +register
[01:59] <SteveA> once we've cracked the virtual hosting thing, perhaps it will be able to pick up that it is a rosetta context anyway
[01:59] <SteveA> cprov: great
[02:01] <cprov> SteveA: I suggest talk about it tomorrow in the Meeting, everybody interesting in
[02:03] <SteveA> ok
[02:14] <spiv> SteveA: pong
[02:16] <Kinnison> spiv: twisted is being a shit wrt. the librarian on mawson
[02:19] <spiv> Kinnison: Hmm.  Can I have a slightly more useful bug report? :)
[02:19] <Kinnison> spiv: the root.putChild calls in server.tac appear to have no useful effect because using them results in 4xx responses
[02:19] <Kinnison> I'll be more useful when I'm back
[02:20] <spiv> Ok, thanks :)
[02:50] <Kinnison> spiv: back
[02:51] <Kinnison> spiv: I'm just gathering info
[02:52] <Kinnison> GET /byalias?alias=1 HTTP/1.0
[02:52] <Kinnison> 400 Unknown command: GET /byalias?alias=1 HTTP/1.0
[02:52] <Kinnison> Is a fairly good example
[02:52] <Kinnison> root.putChild('byalias', fatweb.AliasSearchResource(storage))
[02:52] <Kinnison> is in server.tac
[02:53] <Kinnison> spiv: please ignore me for at least the next 10 minutes while I repeatedly hammer my head against the wall
[02:55] <spiv> Sure...
[02:55] <Kinnison> For my next trick; I make sure that we connect 1. to the right port onthe librarian, and 2. to the right f*cking database
[02:56] <Kinnison> Okay; seems to be fine now
[03:00] <Kinnison> >>> from canonical.librarian.client import FileDownloadClient
[03:00] <Kinnison> >>> fdc = FileDownloadClient('localhost', 8000)
[03:00] <Kinnison> >>> fdc.getURLForAlias(1)
[03:00] <Kinnison> 'http://localhost:8000/1/1/3dchess_0.8.1-11.dsc'
[03:02] <Kinnison> cprov: is that simple enough for you? :-)
[03:06] <cprov> Kinnison: fantastic
[03:06] <Kinnison> cprov: I'll just test the better urls; one sec
[03:06] <Kinnison> >>> fdc = FileDownloadClient('launchpad.ubuntu.com', 8000)
[03:06] <Kinnison> >>> fdc.getURLForAlias(1)
[03:06] <Kinnison> 'http://launchpad.ubuntu.com:8000/1/1/3dchess_0.8.1-11.dsc'
[03:06] <Kinnison> yep
[03:06] <Kinnison> that works too
[03:07] <Kinnison> Okay; we need elmo to open port 8000 in the firewall I think
[03:10] <cprov> Kinnison: how to grab the servername from Zope env ? localhost/launchpad.ubuntu.com/gwyddion.gwyddion.com/etc ?
[03:10] <kiko-fud> cprov, I see, this bookkeeper thing lives on another port?
[03:10] <Kinnison> cprov: I'm not a zopeist
[03:11] <Kinnison> cprov: you'll have to ask someone who understands how zope is configured
[03:12] <cprov> kiko-fud: sorry ? bookkeeper ?
[03:12] <cprov> Kinnison: ok
[03:12] <kiko-fud> cprov, libby :)
[03:13] <SteveA> cprov: from the request ?
[03:16] <cprov> SteveA: sure !
[03:21] <Kinnison> Right; I'm happy with this
[03:21] <BradB> cprov: request.getApplicationURL() should do
[03:22] <BradB> SteveA, kiko-fud: interested in discussing absolute URL's to placeless objects now then?
[03:22] <kiko-fud> I need to have lunch, goo
[03:22] <SteveA> I'm having lunch now
[03:22] <BradB> ok
[03:22] <SteveA> bit later would suit better
[03:22] <SteveA> want to fix a time?
[03:22] <kiko-fud> 1h
[03:22] <kiko-fud> from now
[03:22] <SteveA> 1h10 ?
[03:23] <SteveA> 15:30 UTC I think that is
[03:23] <kiko-fud> sure
[03:23] <BradB> sure
[03:23] <dilys> Bug 2160 resolved: Nuclear explosion when no string is input in package search
[03:23] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2160
[03:28] <dilys> Bug 2161 resolved: Visiting a person without being logged in blows up
[03:28] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2161
[03:46] <BradB> kiko-fud: use malone for launchpad bugs dude!
[03:47] <SteveA> can we turn off "new bugs for launchpad" in bugzilla?
[03:48] <spiv> BradB: Surely he's still allowed to resolve bugs? :)
[03:48] <spiv> Kinnison: Hmm, around?
[03:49] <Kinnison> spiv: yes
[03:49] <spiv> Kinnison: Sure.
[03:50] <BradB> spiv: sure, resolve existing bugs in bugzilla, but new ones (like 2167) need to be reported in malone
[03:50] <BradB> though that one was actually meant to be an email to lp@, by the looks of it :P
[03:51] <spiv> BradB: Oh, I thought you were saying that in response to the most recent dilys output :)
[03:51] <spiv> Kinnison: There's an issue with how the librarian currently does db access.
[03:51] <Kinnison> spiv: go on...
[03:52] <spiv> Kinnison: Twisted's networking layer is single-threaded; so processing in it shouldn't block.  It looks like we're currently doing DB access in it though.
[03:52] <spiv> In some respects it's a minor problem, because our DB is fast ;)
[03:52] <Kinnison> hmm
[03:53] <spiv> But ideally the DB access would be done in threads.
[03:53] <Kinnison> I must admit I thought the librarian was threaded already :-)
[03:53] <Kinnison> I assume uploads and downloads are done multiplexed then
[03:53] <Kinnison> we're not in single-client-at-a-time territory are we?
[03:53] <spiv> Yeah, I just suddenly realised it glancing at the code, it was a flaw in my initial code.
[03:54] <spiv> Oh, no, the network IO is all nicely multiplexed.
[03:54] <Kinnison> cool
[03:54] <spiv> Except during a DB call :)
[03:54] <BradB> hm, who admins the canonical bugzilla then?
[03:54] <Kinnison> elmo: Any chance you can get the archive updating on mawson?
[03:54] <spiv> Twisted has infrastructure to make this easy when using raw DB-API stuff.
[03:55] <spiv> Unfortunately sqlobject doesn't really fit into model.
[03:55] <BradB> spiv: heh heh
[03:55] <BradB> non-blocking + ORM = splat
[03:56] <spiv> I'm not sure what the priority of fixing this should be; like I say, DB access is pretty fast for librarian, I think most things it does are small queries on indexes.
[03:56] <spiv> So in practice we won't notice this until we start hammering the librarian.
[03:56] <spiv> I know how to fix it, but it requires a bit of restructuring, unsurprisingly :)
[03:57] <spiv> Kinnison: How good is your Twisted? :)
[03:58] <Kinnison> Erm, well, let's just say I know nothing and leave it at that eh?
[04:00] <spiv> Ok, sure.
[04:01] <spiv> I think it can wait a bit, or at least, I don't have time for it immediately ;)
[04:01] <Kinnison> Yeah
[04:01] <Kinnison> I certainly think it can wait
[04:01] <spiv> Perhaps we can pair on it in Mataro.
[04:01] <SteveA> file a bug on it
[04:01] <SteveA> in malone
[04:03] <Kinnison> spiv: Possibly
[04:32] <BradB> kiko-fud, SteveA: if you can wait a couple more mins, i just want to upgrade something in the plone site
[04:35] <SteveA> k
[04:40] <dilys> Bug 2007 resolved: Linkify bits in personal information.
[04:40] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2007
[04:40] <kiko-fud> back
[04:41] <BradB> ok, ready to rock now
[04:41] <BradB> plone site's fixed
[04:42] <kiko> so
[04:42] <SteveA> BradB: what was up with it?
[04:42] <kiko> how are we going to handle logging in?
[04:43] <BradB> SteveA: Plone 2.0.4's portal_factory breaks PloneHelpCenter. Had to upgrade from SVN, where geoffd's made a fix.
[04:43] <SteveA> ok
[04:43] <SteveA> I propose we move to cookie based login forms asap.
[04:43] <kiko> SteveA, sidenode, comment requested for https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2161#c1
[04:45] <kiko> agreed
[04:45] <SteveA> kiko: ommented
[04:45] <SteveA> kiko: commented
[04:45] <kiko> thanks.
[04:46] <BradB> ok, so here was the problem i wanted to discuss then: getting absolute URL's to placeless objects.
[04:46] <SteveA> ok, so how about I work on the cookie auth thing tomorrow?  I really don't think there is much left to do on it.  If I leave basic auth availalble then page tests will still work.
[04:47] <SteveA> BradB: so, we should provide our own @@absolute_url and IAbsoluteURL views/adapters
[04:47] <SteveA> that would probably get us most of the way there, if not all the way there.
[04:48] <BradB> sure
[04:48] <SteveA> to do this, we'd need to start keeping a traversal context object around somewhere.
[04:48] <SteveA> we need this anyway, to do the context-sensitive stuff more sanely
[04:48] <BradB> my main problem is how to make this work while VH'ing.
[04:48] <SteveA> does that sound like it would solve the issues you've got?
[04:49] <SteveA> the absolute url stuff knows how to do virtual hosting
[04:49] <SteveA> so, I think that will be okay
[04:49] <BradB> SteveA: yeah, but a bug doesn't "live" anywhere though.
[04:49] <SteveA> are there specific virtual hosting issues you can describe?
[04:49] <BradB> yes
[04:49] <SteveA> cool
[04:49] <BradB> 1. bugs.foo.com => launchpad/malone
[04:50] <BradB> 2. bugs.foo.com => launchpad/malone/bugs
[04:50] <SteveA> let's call it bugs.bar.com
[04:50] <SteveA> because otherwise my head will explode from confusion
[04:50] <BradB> how do you know that the abs url for the first is bugs.bar.com/bugs/$bug.id, but for the second it's bugs.bar.com/$bug.id?
[04:50] <SteveA> (it's a bugbar.  Sometimes you eat the bar; sometimes the bar eats you)
[04:51] <BradB> heh
[04:51] <SteveA> when you say "how do you know", which piece of software is "you" in this example?
[04:52] <BradB> the IAbsoluteURL adapter
[04:52] <BradB> (from an IWhatever)
[04:52] <SteveA> if "you" has the request, then that's okay; the absolute url machinery takes care of that.
[04:52] <SteveA> but, if "you" is an event handler that wants to send an email containing a URL, it gets a bit trickier
[04:52] <SteveA> because it doesn't easily have access to the request (although, it can get it if necessary).  It is a cleaner design if it doesn't need to get the request)
[04:54] <SteveA> perhaps we need a table; a mapping of virtual host domain name to what emails should be sent out containing?
[04:54] <SteveA> what are some typical use-cases for sending out emails containing urls?
[04:55] <SteveA> notification of something to do with a particular bug, I suppose
[04:55] <BradB> sorry, landlord just dropped in to install my shower. /me catches up.
[04:55] <BradB> SteveA: yes, all bug notifications
[04:55] <BradB> like bugzilla
[04:57] <SteveA> so, let's say we've got this "url traversal context" object that represents where you are
[04:58] <SteveA> in terms of virtual hosting, knowing how to make absolute urls for you, what application, project, product, etc. you're in
[04:58] <kiko> sounds interesting.
[04:58] <SteveA> the thing that emails can get hold of this "UTC" object easily (argh, bad name, worse acronym) 
[04:58] <SteveA> just by importing it and using it
[04:59] <SteveA> and it can say emailtext % {'bugurl': UTC.urlFor(mybug)}
[04:59] <SteveA> sabdfl came up with a good name for this UTC object.  I can't remember it though.  need to look it up in my notes.
[05:00] <BradB> wouldn't we want that to be a utility?
[05:00] <SteveA> it could be a utility.  might make unit tests easier if it were.
[05:00] <SteveA> but it need not be a utility in general.
[05:00] <SteveA> it would be a "thread local"
[05:01] <SteveA> or perhaps it would belong to the request, and be got via the interaction.  but, those are implementation details
[05:01] <SteveA> what I want to find out now is if this science-fictional account sounds like it would solve your problems
[05:02] <SteveA> and make things straightforward enough
[05:02] <SteveA> as, it doesn't sound too hard to implement
[05:03] <BradB> what if you're not traversing? what if soyuz wants a link to a bug, for example?
[05:03] <BradB> and there's a soyuz.bar.com and malone.bar.com?
[05:04] <BradB> the point of this mechanism is that it needs to be generic, because there are lots of use cases for "i have an object, give me a url to it" in launchpad.
[05:04] <SteveA> so, let's talk about this in some detail
[05:04] <SteveA> to make sure I understand
[05:04] <SteveA> what object have we url-traversed to?
[05:05] <SteveA> a package in soyuz.bar.com ?
[05:05] <BradB> sure
[05:05] <SteveA> and, from calling a method on the package, we find we have a bug related to that package
[05:05] <BradB> yes
[05:06] <SteveA> so, we want to provide the url to the bug, say on the web page, for a portlet or something
[05:06] <BradB> yes
[05:06] <SteveA> and, because the "url topology" of bar.com is that we have soyuz.bar.com for the soyuzstuff and malone.bar.com for the bugstuff
[05:06] <SteveA> the link needs to be going to malone.bar.com
[05:06] <BradB> yes
[05:06] <SteveA> because...
[05:07] <SteveA> 1. it is a bug
[05:07] <SteveA> 2. the rule for bar.com says "bugs appear in malone.bar.com"
[05:07] <BradB> yep
[05:07] <SteveA> and, the "UTC" component needs to know that rule
[05:08] <SteveA> how does this sound so far?
[05:08] <kiko> hmmmm
[05:08] <BradB> good, as long as you don't mean the user has to do some kind of configuration to tell the UTC component about that rule
[05:08] <SteveA> which user?
[05:08] <kiko> how would this be configured by the installer?
[05:08] <SteveA> which user do you mean?
[05:09] <BradB> the site admin
[05:09] <kiko> same question
[05:09] <BradB> beyond configuring apache, this should Just Work
[05:09] <SteveA> to an extent, yes
[05:09] <kiko> how?
[05:09] <sabdfl> i think my term was something like "launchpad context"
[05:09] <dilys> Bug 2163 resolved: Don't show "last packages" unless we have some
[05:09] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2163
[05:09] <SteveA> this is a common enough pattern: for bar.com, bugs are at malone.$DOMAIN, packages are at soyuz.$DOMAIN
[05:09] <sabdfl> i was imagining it would be a property of the request object
[05:09] <SteveA> sabdfl: you avoided the term "context"
[05:09] <kiko> but wait; the site admin is who, the admin for the site that hosts *all* launchpad sites?
[05:10] <sabdfl> hmm... true
[05:10] <SteveA> sabdfl: it would basically be part of the request, but we want to make it accessible to parts of the application that don't have the request.  that's just an implemenation detail really though.
[05:10] <SteveA> sabdfl: it is reasonable to consider it "part of the request"
[05:10] <sabdfl> ok
[05:11] <sabdfl> location - overloaded
[05:11] <sabdfl> context - overloaded
[05:11] <sabdfl> setting? - overloaded
[05:12] <SteveA> kiko: in production, our model is there is just one "launchpad" application, that can handle any kind of request for any of rosetta/malone/soyuz on any domain
[05:12] <SteveA> we have as many instances of "launchpad" as we want, on different app servers
[05:12] <SteveA> (or the same app server if it is multi-processor)
[05:12] <kiko> right. a launchpad "multi-server".
[05:13] <BradB> hm, maybe some config is inevitable, no matter what
[05:13] <SteveA> yes, we'll need some.  but there are standard patterns for a lot of the projected use.
[05:13] <BradB> because bugs.bar.com and bugs.bar.org, et.c
[05:13] <BradB> s/et.c/etc./
[05:13] <SteveA> yeah
[05:14] <SteveA> I think the config will *eventually* live in the database, when we allow people to create soyuz.myproject.org themselves.
[05:14] <SteveA> there will need to be some apache-vh-config-include magic there, no doubt
[05:14] <kiko> exactly, some config is necessary, AND, for the case of our banquet-pad, I forsee some intricate config separating the bits and pieces.
[05:15] <BradB> SteveA: so, ultimately, to cover all the cases discussed thus far, and basically any other, i'd be able to ask any content object for an absolute url to itself on the web.
[05:15] <BradB> SteveA: is that the problem you're seeing this solving?
[05:15] <SteveA> right
[05:15] <SteveA> but one content object may have many absolute urls
[05:15] <kiko> indeed
[05:15] <BradB> yeah
[05:15] <SteveA> so, the one to choose will depend on the current request
[05:15] <SteveA> but, it may well be a different (but related) domain from the current request
[05:15] <SteveA> related by config
[05:16] <SteveA> of which there are standard patterns
[05:17] <SteveA> we done?
[05:17] <BradB> so, for soyuz.bar.com, bug url's should point to soyuz.bar.com, but the respective .org's should point to each other as well.
[05:17] <SteveA> if that's the rule, then yes.
[05:17] <BradB> er, i meant bug url's should point to malone.bar.com, but yeah
[05:17] <SteveA> that's probably the usual case
[05:18] <BradB> SteveA: is this something you're planning on implementing then?
[05:18] <SteveA> I am now ;-)
[05:18] <BradB> heh
[05:19] <BradB> SteveA: so perhaps a new ZCML directive comes out of this?
[05:19] <BradB> browser:absoluteurl or something
[05:19] <SteveA> I'll take this on, write up what we've discussed, and malonize it.
[05:19] <kiko> can we fit in some talk on the UI for a launchpad "instance"?
[05:19] <SteveA> maybe, but probably not zcml.
[05:19] <kiko> I'm curious about the tabs and where we would stick a cross-app log in/register thang.
[05:20] <kiko> and if we could trust the header would always be there
[05:20] <SteveA> kiko: sure.  you mean, making soyuz.ubuntu.com look like ubuntulinux.org etc. ?
[05:20] <kiko> well, I mean, what sort of flexibility should it have inbuilt.
[05:21] <kiko> can we trust the beloved tabs and logo will always be there?
[05:21] <SteveA> my initial sense is to make the login/register thing somewhat "anonymous", with no tabs, but an option to go "back where you came from"
[05:21] <SteveA> although it would need a logo
[05:21] <kiko> a launchpad logo
[05:21] <kiko> or else the launchpad instance logo
[05:21] <kiko> (i.e. skole for skole lunchpie)
[05:22] <kiko> any other random storms of thought flowing through?
[05:22] <SteveA> I'm not sure what would work best.  But, the outcome is, the skin to use for the login stuff depends what you're intending to log in to
[05:22] <SteveA> or register for
[05:23] <kiko> do we even agree that we will log into and register into separate things?
[05:23] <SteveA> I think we should just get login and register working centrally first, and worry about skinning it once we have the rest of this context ob done
[05:23] <SteveA> kiko: until / unless we do single-sign-on, surely we have to ?
[05:26] <kiko> well
[05:26] <kiko> single-sign-on is luckily orthogonal to registration
[05:26] <kiko> it's one thing to create an account and another to use it
[05:26] <SteveA> brb (2 mins)
[05:26] <kiko> I am happy with just working on centralizing registration from malone/soyuz/rosetta into foaf/register for now
[05:26] <kiko> but we should be thinking about these things..
[05:30] <SteveA> can you explain a bit more about what you're thinking?
[05:33] <kiko> ah
[05:33] <kiko> sorry, was in another channel
[05:33] <kiko> well
[05:34] <kiko> we complained about this in the soyuz sprint: three separate new user forms, and no consensus on how to join them
[05:34] <dilys> Bug 2162 resolved: Add legend to translation portlet
[05:34] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2162
[05:35] <kiko> we need to consider if we are going to use separate registration pages or treat the application as "launchpad" and have a central one.
[05:35] <kiko> there are advantages to both alternatives of course
[05:35] <kiko> if separate, we have more freedom to ask context-specific questions
[05:35] <kiko> if together, we avoid the need to make the user reintroduce himself for every new launchpad service he visits
[05:35] <kiko> note that the barrier between soyuz and rosetta and malone is only an href away
[05:36] <SteveA> ok, so if we have separate ones, there's a problem when someone is signed up with soyuz and then wants to use rosetta...
[05:36] <kiko> which makes having the user relogin or update his data when visiting rosetta, well, you get the picture. 
[05:36] <SteveA> ask one more question, or ask them all again (assuming rosetta has one extra question)
[05:36] <kiko> right
[05:36] <SteveA> do soyuz and malone have differing registration requirements?
[05:36] <kiko> I personally would hate anything that wasn't launchpad-centric just because it burdens the user and lowers our market perception.
[05:37] <kiko> well, as for login/username/password, no.
[05:37] <SteveA> I mean, the minimum required from a user so that they can use the system
[05:37] <kiko> question is if we're going to require anything else for any of the apps. and I say no, I don't think we should
[05:37] <kiko> right
[05:37] <SteveA> daf, carlos: ping
[05:37] <carlos> SteveA: pong
[05:37] <kiko> I think the minimum should be the minimum everywhere -- make lp really easy to join and use
[05:38] <SteveA> does the rosetta sign-up page need to ask more than the minimal information that would be common to all launchpad apps?
[05:39] <carlos> SteveA: if could be really good if they have a chance to select their know languages
[05:39] <carlos> but it's not mandatory
[05:40] <carlos> perhaps only the "main language" daf talked about some days ago at launchpad mailing list
[05:40] <SteveA> I suppose rosetta could ask that of any person who is logged in, but hasn't told their known languages and main language
[05:40] <SteveA> that would be more general
[05:40] <SteveA> and would work for the case when I'm registered for malone already and now want to use rosetta
[05:40] <SteveA> where is daf anyway?
[05:41] <carlos> SteveA: If we don't have that information I think we get it from the browser, so we don't need to ask it as a mandatory option
[05:41] <carlos> SteveA: no idea
[05:41] <SteveA> ok, but the principle is that a user who is already signed up for launchpad can use rosetta
[05:41] <SteveA> and can answer other questions later on
[05:42] <carlos> SteveA: but the main language is interesting to select the UI language (also not mandatory, we could get it from the browser)
[05:42] <carlos> SteveA: yeah, it works with the current schema
[05:42] <SteveA> if that's workable for rosetta, then once we have a new one single registration screen, (belonging to foaf), we should remove the specific rosetta one
[05:43] <carlos> we look at the database info, if it does not exists, we get the info from the browser
[05:43] <SteveA> and even now, consider removing the request for special information in the rosetta one
[05:43] <SteveA> carlos: can this be done for rosetta?  what do you think of such a change?
[05:43] <carlos> SteveA: it's fine for me, just tell me when it's ready and I will remove all but the language chooser
[05:44] <carlos> we don't have a registration screen but a preferences editor
[05:44] <carlos> we cannot create new accounts, only modify the data
[05:44] <carlos> to create accounts we use a script
[05:44] <SteveA> ok, that's fine then.
[05:44] <SteveA> kiko: are you happy with all this?
[05:46] <carlos> SteveA: how will it work with websites like rosetta.gnome.org?
[05:47] <carlos> it's only one of launchpad's applications
[05:47] <SteveA> the page will be available from any some.domain.org/+register page
[05:47] <carlos> and the preferences editor? (to change password and info)
[05:47] <carlos> as +useredit? or something like that?
[05:48] <SteveA> I guess so
[05:49] <carlos> ok
[05:49] <kiko> well
[05:50] <kiko> ah, then that's fine.
[05:50] <kiko> I think preferred language can be part of the initial registration
[05:50] <kiko> the reason is basically i18n of the interface
[05:51] <kiko> so this is good for rosetta. what about malone, BradB?
[05:51] <kiko> do you have user registration, or Not Yet?
[05:51] <carlos> kiko: the db schema does not have (yet) a way to store it
[05:52] <kiko> carlos, bug filed?
[05:52] <carlos> when daf appears I will ask about it so we could get a conclusion of the initial thread
[05:52] <kiko> (need to be afk 2m)
[05:52] <carlos> kiko: not yet decided how will it be stored
[05:52] <BradB> kiko: no user reg in malone that i'm aware of
[05:52] <carlos> so we only have a thread at launchpad
[05:53] <BradB> report dudes, use malone for all these bug reports.
[05:53] <BradB> remember even
[05:54] <carlos> BradB: https://launchpad.ubuntu.com/malone/bugs/31
[05:54] <carlos> does it means we will have all our bugs/comments from bugzilla in malone?
[05:55] <BradB> yeah, we have to
[05:55] <BradB> at the least, the ones that haven't yet been fixed.
[05:55] <carlos> hmm, I just noticied that we don't support attachments...
[05:56] <carlos> or I don't see them
[06:11] <kiko> no user reg, hum hum.
[06:12] <kiko> BradB, useful tho, no?
[06:12] <BradB> yeah, probably :P
[07:32] <sabdfl> hi guys, do the tests use a different db?
[07:32] <sabdfl> the user reg stuff is written
[07:33] <sabdfl> SteveA: what's the url for a user registration that would work on the dogfood server?
 the page will be available from any some.domain.org/+register page
[07:34] <carlos> sabdfl: is that what you need?
[07:38] <sabdfl> carlos: afaik there is already such a page, i was wondering whether it's accessible on the dogfood server
[07:40] <carlos> sabdfl: I thought someone was working on it, didn't know it already exists, in fact... I think Steve said something here that makes me think it was not yet wrote
[07:40] <SteveA> I don't believe there is a user registration page at all yet
[07:40] <carlos> that was about 2 hours ago
[07:40] <sabdfl> hmm... so does the website only use the xmlrpc interface?
[07:40] <SteveA> at one stage, there was going to be one for the rosetta alpha, but that was canned in favour of a script run by daf
[07:41] <sabdfl> ok
[07:41] <SteveA> the plone website uses the xmlrpc server to talk to the production database and create users
[07:41] <sabdfl> ok
[07:41] <sabdfl> have we assigned the work to create a launchpad registration page?
[07:42] <sabdfl> also, cookie based auth for launchpad?
[07:42] <SteveA> I'll be doing cookie-based auth, starting tomorrow.  someone in brazil is doing a registration page.
[07:42] <SteveA> I expect I'll be finishing tomorrow too
[07:43] <kiko> that would be salgado, and he should do this in short notice, he's been working for a week already and landing patches
[07:43] <lulu> night all :o)
[07:44] <sabdfl> night lu
[07:44] <SteveA> kiko, spiv and I were talking about salgado getting to know foaf better, and chatting to spiv regularly this week to do so
[07:44] <sabdfl> ok
[07:44] <SteveA> this will give us someone to do foaf work while spiv is away.
[07:44] <sabdfl> i'm keen to get cracking on the karma, and salgado could cut his teeth on that
[07:45] <kiko> he has his last week of classes next week, and tomorrow's a full day, but tonight onwards he'll be on this.
[07:45] <kiko> ah, that would be nice
[07:45] <sabdfl> i'm thinking we need a "karmapoints" table
[07:45] <SteveA> great.  I've asked spiv to co-ordinate touching base at least daily with salgado about foaf
[07:45] <sabdfl> with fields like:
[07:45] <sabdfl>  - person
[07:45] <sabdfl>  - datecreated
[07:45] <sabdfl>  - discipline
[07:45] <sabdfl>  - points
[07:45] <sabdfl>  - comment
[07:46] <sabdfl> so, for example, when someone edits the wiki, we put an entry in there with "wiki" as the discipline
[07:46] <sabdfl> maybe we track the disciplines in a separate table
[07:46] <sabdfl> or just use the schema / label
[07:46] <sabdfl> so this way, we can keep a sense of what people have done in different areas
[07:46] <sabdfl> website
[07:46] <sabdfl> wiki
[07:46] <sabdfl> package uploads
[07:46] <sabdfl> bugs closed
[07:47] <sabdfl> bug comments, assignments, watches created
[07:47] <sabdfl> translations
[07:47] <kiko> sort of a global activity log, interesting.
[07:47] <kiko> and comment would be hardcoded according to the action?
[07:47] <sabdfl> ultimately, arch commits too
[07:47] <sabdfl> ok
[07:47] <sabdfl> willdo
[07:47] <SteveA> cheers.  good night.
[07:47] <sabdfl> SteveA: will you have time for a call?
[07:47] <SteveA> yeah, a bit later?
[07:48] <sabdfl> ok, will be here, ping me
[07:48] <SteveA> want to get some food in first
[07:48] <SteveA> ok
[07:51] <sabdfl> BradB|lunch: holler when you're back
[08:01] !Geert:*! I'm writing a new FOSS tool for ISPs and need all the MIB output I can get from managed switches and routers (i.e. 'smnpwalk comm@device . >> brand_version.mib')
[08:02] !Geert:*! You can dcc, query, or mail me on geert@irssi.org
[08:14] <daf> carlos: pong
[08:15] <carlos> daf: hi
[08:17] <SteveA> daf: can you turn up a bit earlier in the day please?  It makes it really difficult for me to keep in touch otherwise.
[08:18] <kiko> daf!
[08:19] <daf> SteveA: apologies
[08:19] <daf> SteveA: I was working late last night
[08:20] <carlos> daf: Should we get a conclusion about the prefered language in launchpad? 
[08:20] <daf> yes, we should
[08:22] <carlos> daf: more discussion or is the final decision clear?
[08:23] <daf> well, there were no objections to my last post, but there was no support for it either :)
[08:23] <daf> perhaps I should read up on the syntax of ALTER
[08:24] <carlos> daf: that's the easier part
[08:24] <carlos> let me read your reply
[08:29] <carlos> daf: answered + sql patch
[08:30] <daf> thanks
[08:31] <carlos> daf: other thing we have pending is the mail from Jordi
[08:32] <carlos> if you give me the OK, I could prepare a patch for that feature (well, add it to my TODO list)
[08:32] <daf> I need to reply to that
[08:39] <carlos> daf: before I forget to tell you it, I will be offline on Thursday and Friday (perhaps I will be able to do some work offline and If I'm lucky enough get some network connection)
[08:39] <daf> carlos: ok
[08:40] <carlos> Jane know that already, I'm going to a GNOME event in Madrid to give a speech about Ubuntu and also another one about translations
[08:41] <carlos> daf: do we have already anything on what I could base my "translations" speech to introduce Rosetta?
[08:41] <daf> I don't think so, no
[08:42] <carlos> hmm anything I should not talk about (not sure what should be still "top secret" or not)
[08:44] <carlos> sabdfl: ?
[08:54] <BradB> sabdfl: back
[09:15] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: fixes (and unfixes) for various bugs reported from dogfooding (patch-749)
[09:17] <BradB> daf: when will dilys tell who submitted the pqm merge request that got merged?
[09:18] <daf> does PQM provide that information now?
[09:20] <carlos> BradB: about the functional tests, I got it running with Rosetta but the launchpad_ftest database should be created by hand first (createdb -E UNICODE --template=launchpad_ftest_template launchpad_ftest), is that normal ?
[09:21] <BradB> daf: frighteningly enough, perhaps not. hopefully it would be easy to add an X-merge-requester header or something
[09:21] <BradB> carlos: no. i fixed it so that the db gets reset properly every time.
[09:22] <sabdfl> BradB: here's a challenge for you
[09:22] <kiko> BradB, what did you think of my patch?
[09:22] <sabdfl> make a small change to templates/main-template.pt
[09:22] <sabdfl> and then run your page tests
[09:22] <BradB> sabdfl: already did that
[09:22] <BradB> perl -e -ep "s/old/new/" :)
[09:22] <BradB> perl -i -ep, that is
[09:22] <sabdfl> BradB: and you want a web designer to do that?
[09:23] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Some Bugzilla Bug fixes (patch-750)
[09:23] <BradB> sabdfl: no, we may need to elide as necessary, but i ended up getting too lazy to fix regression bugs, so i made them virtually impossible to happen. some more eliding could be done, but i'm really wary of bringing them back to anywhere near what they were before i built the forcefield (TM)
[09:24] <BradB> sabdfl: if our design is well done, the designer does 90% CSS changes, maybe even higher than that.
[09:24] <sabdfl> BradB: no ways dude
[09:24] <BradB> kiko: which patch?
[09:24] <sabdfl> i've just spent the afternoon eliding your force field
[09:24] <sabdfl> i've tried to capture the essence of each test
[09:25] <sabdfl> for example, if you are adding some data, i test that the same data shows up in the page
[09:25] <kiko> BradB, Makefile change.
[09:25] <sabdfl> but none of the decoration
[09:25] <sabdfl> test that separately
[09:25] <sabdfl> make your goal that a change should break at most one test
[09:25] <sabdfl> having a million page tests with the same decoration is just a recipe for irritation
[09:25] <BradB> kiko: that's a lot different than the db change i was talking about (which was a mod to PgTest itself), but yeah, it seems good, but i didn't test it, because i don't have plpython running on this machine. :)
[09:26] <kiko> right :)
[09:26] <BradB> sabdfl: sure, i agree.
[09:26] <BradB> sabdfl: as long as there are none that are basically just status code checkers :)
[09:27] <sabdfl> bradb: checking for status code and heading is acceptable
[09:27] <sabdfl> it says "we get a page with that heading"
 is too extreme, agreed
[09:28] <sabdfl> but ...<h1>Add A New Widget</h1>... is fine
[09:29] <sabdfl> daf: please make sure that rosetta tests are well elided
[09:29] <sabdfl> This tests searching for projects in Rosetta.
[09:29] <sabdfl>   >>> print http(r"""
[09:29] <sabdfl>   ... GET /rosetta/search-results?q=gnome HTTP/1.1
[09:29] <sabdfl>   ... Referer: http://localhost:9000/rosetta
[09:29] <sabdfl>   ... """)
[09:29] <sabdfl>   HTTP/1.1 200 Ok
[09:30] <sabdfl>   Content-Length: 7564
[09:30] <sabdfl>   Content-Type: text/html;charset=utf-8
[09:30] <sabdfl>   <BLANKLINE>
[09:30] <sabdfl>   <BLANKLINE>
[09:30] <sabdfl> that sort of thing will break for sure
[09:30] <BradB> yep
[09:30] <BradB> only keep status code header
[09:30] <daf> sabdfl: will do
[09:30] <daf> sabdfl: can you file a bug so I don't forget?
[09:30] <BradB> there already is one
[09:31] <sabdfl> i've fixed that one
[09:31] <BradB> that was for daf. https://launchpad.ubuntu.com/malone/bugs/26
[09:31] <BradB> but that's about broken ftests, more than complete func suites, i guess.
[09:32] <sabdfl> yes
[09:32] <BradB> in any case, i'm happy with any page test suite that allows us to say "cool, make check passed, i didn't break anything"
[09:32] <daf> BradB: a page test that says "..." would do that :)
[09:33] <BradB> daf: ahem, "didn't break anything" :)
[09:33] <sabdfl> in general: add a feature, add a test
[09:33] <sabdfl> so if you add something to an existing page, add a test that checks for that specific content AND NOTHING ELSE
[09:34] <sabdfl> then if someone breaks that feature, THAT test breaks
[09:34] <daf> BradB: oh, you mean it should be accurate too!
[09:34] <sabdfl> is there a way to run just the page tests?
[09:34] <sabdfl> it takes a few minutes to get through make check
[09:34] <sabdfl> too long
[09:35] <BradB> sabdfl: to really achieve that to the level of assurance the 8 tests i created have, would take about 30 tests, at least.
[09:35] <BradB> e.g. to test the sort orders and values of each of the widgets on each of the pages, to test the correctness of data output in tables, to test comment attribution, all the little things like that, that Just Work (i.e. are Just Tested) with the 8, true, functional tests i created.
[09:36] <sabdfl> point is to add the test when you add the feature
[09:36] <sabdfl> you only need to test a widget once, no matter how many pages use it
[09:36] <daf> sabdfl: "python test_on_merge.py canonical.ftests"?
[09:36] <daf> something like that
[09:37] <sabdfl> thanks, will try that
[09:37] <BradB> sabdfl: hm? vocabularies could be used correctly for one schema, and incorrectly for another.
[09:37] <BradB> the eight tests i had just handled all those minute details
[09:37] <sabdfl> BradB: ok, if there's something special about the way you use it, that's a test
[09:37] <daf> BradB: I think there might be a bug open on PQM for mentioning the merge requester
[09:38] <sabdfl> i don't really want to argue about this, it's clear in my mind how i want it
[09:38] <sabdfl> try to get one test to show one thing
[09:38] <sabdfl> you can easily load a page, copy that test 10 times, and elide differently
[09:38] <sabdfl> and that kind of testing coverage is *much* more useful
[09:39] <sabdfl> it tells you what actually broke, instead of just SCREAMING AT YOU THAT THERE IS BREAKAGE
[09:40] <sabdfl> SteveA: around for that call?
[09:49] <sabdfl> bradb:
[09:49] <sabdfl> M   lib/canonical/launchpad/database/bugmessage.py
[09:49] <sabdfl> M   lib/canonical/launchpad/database/pofile.py
[09:49] <sabdfl> M   lib/canonical/launchpad/interfaces/bugmessage.py
[09:49] <sabdfl> M   lib/canonical/launchpad/mailnotification.py
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/10-add-subscription.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/20-add-edit-product-infestation.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/30-add-edit-package-infestation.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/40-add-edit-package-assignment.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/50-add-edit-product-assignment.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/60-add-external-ref.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/70-add-edit-watch.txt
[09:49] <sabdfl> C   lib/canonical/launchpad/pagetests/malone/80-add-comment.txt
[09:49] <sabdfl> M   lib/canonical/launchpad/templates/binarypackage-search.pt
[09:49] <sabdfl> M   lib/canonical/launchpad/templates/bug-index.pt
[09:49] <sabdfl> M   lib/canonical/launchpad/templates/portlet-translations-sourcepackage.pt
[09:49] <sabdfl> M   lib/canonical/launchpad/templates/sourcepackage-search.pt
[09:49] <sabdfl> M   lib/canonical/launchpad/templates/soyuz-sourcepackage-index.pt
[09:49] <sabdfl> M   lib/canonical/launchpad/zcml/bug.zcml
[09:49] <sabdfl> M   lib/canonical/librarian/libraryprotocol.py
[09:50] <sabdfl> M   lib/canonical/librarian/web.py
[09:50] <sabdfl> M   lib/canonical/soyuz/sql.py
[09:50] <sabdfl> that's another reason :-)
[09:50] <kiko> heh
[09:51] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: bug kill and improves on permission (patch-751)
[09:51] <Kinnison> yay conflicts
[09:52] <BradB> sabdfl: that's only because you went in and chopped out the whole file though. :)
[09:52] <sabdfl> BradB: erm.... every single one of those conflicts is because of a single change on your side
[09:53] <sabdfl> adding the person name instead of (none) in the comment
[09:53] <sabdfl> seems to me we are better off if, when we add a new feature, we add a test which tests for that and *only* that
[09:53] <BradB> in any case, i'm not arguing, i'm following your lead. if the new way achieves the same level of stability that malone has had over the past week, i'll be happy.
[09:53] <sabdfl> ok
[09:54] <sabdfl> again, im running into this because I'm making changes that are orthogonal to yours 
[09:54] <sabdfl> and you'll appreciate it when you do the same to my code
[09:54] <sabdfl> i don't have time to spend hours fixing tens of tests so i can commit a one-line fix
[10:00] <carlos> ejem... dinner :-P
[10:09] <SteveA> sabdfl: hi
[10:10] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: new bounty system, and de-shotgunning tests (patch-752)
[10:14] <BradB> sabdfl: would you agree with the policy that if i can checkin a change that breaks somebody else's app, it's their responsibility to have allowed me to break it by having inadequate test coverage? i think that's the kind of policy that would, ahem, strongly encourage people to build strong functional test suites. :)
[10:34] <SteveA> BradB: how do you know you've broken it if there are no tests?
[10:34] <SteveA> or rather, insufficient tests
[10:34] <SteveA> I'm totally serious.  In your example, I do not see how you can tell you've broken something.
[10:34] <BradB> SteveA: by looking at it :)
[10:35] <BradB> i guess you were defending the person doing the checkin though, right? :)
[10:35] <SteveA> in general I'd say you're morally free to check in the change.  But, you should immediately notify the person responsible for that code.  You should consider fixing it anyway, if possible.
[10:35] <SteveA> and if it isn't too much hassle for you
[10:36] <BradB> but in many cases you won't realize that you've broken something
[10:36] <SteveA> and show sensitivity towards breakages that might reach the dogfood server
[10:36] <BradB> sure
[10:36] <SteveA> sure
[10:36] <SteveA> and I completely agree about getting decent test coverage
[10:36] <BradB> it saved me a ton of agony last week
[10:37] <SteveA> cool
[10:38] <SteveA> I must go sleep.  I've been getting into the morning vibe :-)
[10:39] <BradB> SteveA, sabdfl: i hope there can be some serious discussion about a combo box widget soon. dogfood's dying for one! maybe in the meeting tomorrow.
[10:39] <SteveA> yeah, it's on the agenda
[10:39] <BradB> woo
[10:41] <carlos> BradB: is it normal I'm not able to filter my bugs at: https://launchpad.ubuntu.com/malone/bugs/created
[10:41] <carlos> everytime I try to select my name, the page reloads with "All users" selected
[10:42] <SteveA> carlos and daf: rosetta item in tomorrow's meeting: getting rosetta alpha using the dogfood server.
[10:42] <carlos> also, I don't understand why there are shortnames instead of full names (I'm not sure if the "carlos" I'm selected is the right one)
[10:42] <SteveA> In the meeting tomorrow, can you be ready to discuss your plans for doing so, the steps involved, and how long it will take, and what help you need from others?
[10:42] <BradB> carlos: sounds like you've got a couple bugs to report :P
[10:43] <carlos> SteveA: not sure if daf is arround, I will ask as soon as he's back
[10:43] <carlos> SteveA: If we can talk tonight, it's doable
[10:43] <daf> carlos: I'm discussing it with Steve now
[10:43] <carlos> oh
[10:43] <carlos> ok :-)
[10:44] <carlos> BradB: :-)
[10:45] <carlos> BradB: I need to read more, it's already reported: https://launchpad.ubuntu.com/malone/bugs/21
[10:52] <carlos> BradB: ok, I found why I had to create the test database by hand
[10:52] <carlos> BradB: you are catching psycopg.ProgrammingError
[10:52] <carlos> but I'm getting: DatabaseException: FATAL:  database "launchpad_ftest" does not exist
[10:53] <carlos> is it ok to change it?
[10:53] <carlos> the problem is with the DROP DATABASE
[10:53] <carlos> if the database does not exists the first time
[10:55] <kiko-afk> just add a "-" before that line perhaps?
[10:56] <BradB> ah /hah/. i see now why page test output gets chopped sometimes. e.g. sometimes the recorded http looks like:
[10:56] <carlos> kiko-afk: it's inside python code
[10:57] <BradB>           </fieldset>
[10:57] <BradB>   <BLANKLINE>
[10:57] <BradB>           <div class="separator"></div
[10:57] <BradB> (randomly truncated)
[10:57] <BradB> it's because of 303's
[10:57] <carlos> kiko-afk:  not sure if that will work there
[10:58] <BradB> carlos: that's not the problem dude.
[10:58] <BradB> look at the except clause. it only propogates the exception if it was something *other* than the db not existing. :)
[10:59] <BradB> otherwise it goes on to create the db further down
[10:59] <carlos> BradB: but you are not getting the correct exception
[10:59] <carlos> psycopg.ProgrammingError vs DatabaseException
[11:00] <spiv> zope.app.rdb.interfaces.DatabaseException, I guess?
[11:00] <BradB> >>> import psycopg
[11:00] <BradB> >>> conn = psycopg.connect("dbname=template1")
[11:00] <BradB> >>> cur = conn.cursor()
[11:00] <BradB> >>> cur.execute("drop database alsjdfsd")
[11:00] <BradB> Traceback (most recent call last):
[11:00] <BradB>   File "<stdin>", line 1, in ?
[11:00] <BradB> psycopg.ProgrammingError: ERROR:  DROP DATABASE cannot run inside a transaction block
[11:00] <BradB> drop database alsjdfsd
[11:01] <BradB> heh
[11:01] <carlos> spiv: yes, seems like it's that one
[11:01] <BradB> >>> psycopg.__version__
[11:01] <BradB> '1.1.15'
[11:01] <carlos> Traceback (most recent call last):
[11:01] <carlos>   File "./lib/canonical/rosetta/ftests/test_poexport.py", line 157, in testPoExportAdapter
[11:01] <carlos>     project = Project.selectBy(name = 'gnome')[0] 
[11:01] <carlos>   File "/home/carlos/Work/dists/launchpad/lib/sqlobject/main.py", line 958, in selectBy
[11:01] <carlos>     cls._connection._SO_columnClause(cls, kw),
[11:01] <carlos>   File "/home/carlos/Work/dists/launchpad/lib/sqlos/connection.py", line 45, in __get__
[11:01] <carlos>     return getConnection(context, name)
[11:01] <carlos>   File "/home/carlos/Work/dists/launchpad/lib/sqlos/connection.py", line 93, in getConnection
[11:01] <carlos>     connCache[key]  = IZopeSQLConnection(newconn()).transaction()
[11:01] <carlos>   File "/home/carlos/Work/dists/launchpad/sourcecode/zope/src/zope/app/rdb/__init__.py", line 153, in __call__
[11:01] <carlos>     self.connect()
[11:01] <carlos>   File "/home/carlos/Work/dists/launchpad/sourcecode/zope/src/zope/app/rdb/__init__.py", line 140, in connect
[11:02] <carlos>     raise DatabaseException, str(error)
[11:02] <carlos> DatabaseException: FATAL:  database "launchpad_ftest" does not exist
[11:02] <carlos> ok
[11:02] <carlos> sorry
[11:02] <carlos> my fault
[11:02] <carlos> the test queries the database
[11:03] <carlos> but how could I force it to create it first?
[11:03] <carlos> I thought it was done before the test run
[11:04] <spiv> carlos: I think you need to use PgTestCase from canonical.ftests.pgsql?
[11:04] <carlos> spiv: I'm doing it already
[11:04] <carlos> class POExportTestCase(LaunchpadFunctionalTestCase):
[11:04] <spiv> Hmm.
[11:05] <carlos> it works as soon as the database exists the first time
[11:05] <carlos> and after the functional tests pass I get:
[11:05] <carlos> Exception exceptions.TypeError: <exceptions.TypeError instance at 0x30bef210> in <bound method Transaction.__del__ of <sqlobject.dbconnection.Transaction object at 0x30d42c90>> ignored
[11:05] <spiv> carlos: Are you overriding setUp?
[11:05] <carlos> no
[11:06] <carlos> I have only a method
[11:06] <carlos> def testPoExportAdapter(self):
[11:06] <carlos> It's still a unittest not a doctest
[11:06] <carlos> def test_suite():
[11:06] <carlos>     loader = unittest.TestLoader()
[11:06] <carlos>     return loader.loadTestsFromTestCase(POExportTestCase)
[11:06] <carlos> if __name__ == '__main__':
[11:06] <carlos>     unittest.main()
[11:10] <kiko-afk> erhm
[11:11] <spiv> carlos: I'm out of ideas.
[11:11] <BradB> carlos: there's already a bug filed for SQLObject relying on __del__. you can ignore that.
[11:12] <carlos> BradB: ok, what about the exception I get if the database does not exists? any idea?
[11:12] <carlos> spiv: don't worry, I'm also out of ideas 
[11:15] <BradB> carlos: debug it
[11:15] <BradB> override setup, import pdb; pdb.set_trace()
[11:15] <BradB> make sure to call super's setup, of course
[11:16] <carlos> ok
[11:18] <kiko-afk> where's stuberoola
[11:18] <BradB> carlos: er, you may want to try simply inheriting from LaunchpadTestCase
[11:19] <BradB> carlos: maybe LPFTC is out-of-date (even though i suggested inheriting from that one)
[11:19] <BradB> er, no, i'd stick with debugging it first
[11:20] <carlos> BradB: I think the problem is there (not sure)
[11:20] <carlos> BradB: LaunchpadFunctionalTestCase is not calling the LaunchpadTestCase overrided methods
[11:21] <carlos> BradB: I need a functional Zope3 instance so I think I need to inheriting from that class (or that's what the comment says)
[11:21] <BradB> yeah
[11:22] <spiv> carlos: Yeah, that looks like that could be the problem.
[11:22] <daf> BradB: any objections to me adding bug IDs to Malone notification email subjects
[11:22] <daf> BradB: ?
[11:23] <carlos> BradB, spiv: Ok, thanks for the help, I will fix it now
[11:23] <BradB> daf: i can do that. i'm still eliding my way through this new page test to prove that owners get subscribed to bugs they add though.
[11:23] <daf> BradB: I've already started :)
[11:23] <BradB> okie doke :)
[11:24] <daf> in fact, I've got it working
[11:24] <daf> I have one question, though
[11:25] <daf> I could either have each caller of send_edit_notification put the ID in the subject themselves, or pass the ID (or the object, or the event) to send_edit_notification so that it adds the IDs to each one
[11:25] <daf> preference?
[11:25] <carlos> yeah, that was the problem, functional tests are working now without creating the database by hand
[11:26] <BradB> daf: what did you do for adds?
[11:26] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: autofocus first input element on translation page load (patch-753)
[11:26] <sabdfl> BradB: yes, i agree, not having a test for your new feature means you can't cry when someone else checks in a change that breaks your feature
[11:26] <daf> BradB: haven't done adds yet
[11:27] <sabdfl> BradB: yes, also agree, selection widgets for person, package and product are top priority to get malone more widely useful
[11:27] <daf> BradB: it could either be "new bug #123": blah blah blah" or "#123: new bug 'blah blah blah'"
[11:27] <daf> BradB: or something along those lines
[11:27] <sabdfl> daf: how does dilys work?
[11:28] <sabdfl> can we get launchpad notifications to ping irc channels too?
[11:28] <BradB> daf: i'd make send_edit_notification do it, wrap simple_send with a send_add_notification and have it automatically do it too (well, after passing in the bug as a param)
[11:28] <daf> sabdfl: that's what I'm working on :)
[11:28] <sabdfl> rock
[11:28] <sabdfl> can you make it slightly general?
[11:28] <daf> it's totally general
[11:28] <sabdfl> ok
[11:28] <daf> dilys is a really simple bot written in twisted
[11:28] <daf> she listens on a socket for events
[11:29] <daf> so any program can tell her to say stuff
[11:29] <sabdfl> can we add ircchannel to Project, and send notifications accordingly?
[11:29] <daf> at the moment, she's triggered by programs run from my .procmailrc
[11:29] <sabdfl> for example, when a new bug is assigned to that product, send a message to that IRC channel
[11:30] <daf> that's an interesting idea
[11:30] <sabdfl> same with a bounty
[11:30] <daf> launchpad would need to know how to communicate with dilys
[11:30] <sabdfl> how about if we had a dilys of our own?
[11:30] <sabdfl> part of the infrastructure?
[11:31] <daf> sure, but you need to make sure she's running
[11:31] <sabdfl> part of launchpad
[11:31] <elmo> IRC bots are a freaking security  nightmare
[11:31] <carlos> hmm, perhaps that could be extended to send jabber messages? :-)
[11:31] <carlos> GForge does that
[11:31] <elmo> any IRC bot running on our machines would have to run chrooted, as an unpriviledged user etc.
[11:31] <elmo> and I'd REALLY like someone with a security slant to audit the code
[11:31] <carlos> :-)
[11:32] <daf> elmo: the code is 95 lines long
[11:32] <elmo> carlos: I'm paid to be scared :P
[11:32] <sabdfl> elmo: even for a bot that just sends messages, doesn't listen to the channel?
[11:32] <elmo> daf: the code to dchroot is a couple of hundred lines - mdz found at least two security bugs in it.  what's your point?
[11:32] <spiv> elmo: Well, it's implemented entirely in python, if that helps.
[11:32] <daf> elmo: that the code would be quick to audit
[11:32] <elmo> sabdfl: from what little I understand of IRC, you can't be a send only client - you have to listen to the server
[11:32] <sabdfl> ok
[11:32] <daf> elmo: I know, your job is to be paranoid
[11:33] <elmo> spiv: yeah, it does
[11:33] <sabdfl> ok, we'll find a way to implement this that elmo will like
[11:34] <sabdfl> but in general, the idea is to allow project/product/package to have some contact info associated with them
[11:34] <sabdfl> like jabber and irc channels
[11:34] <sabdfl> email addresses perhaps
[11:34] <sabdfl> and to have notifications sent to them
[11:35] <sabdfl> i think it would be awesome if guys could say "this is our project irc channel"
[11:35] <Kinnison> elmo: any word on when the archive on mawson will update regularly
[11:35] <sabdfl> and then automatically get an irc ping when a new bug is filed against that product
[11:35] <sabdfl> or when a new translation is added
[11:35] <sabdfl> or a new bounty created
[11:35] <elmo> Kinnison: that's still not working??
[11:36] <Kinnison> dsilvers@rosetta:/srv/archive.ubuntu.com $ ls -l
[11:36] <Kinnison> -rw-r--r--    1 archvsync archvsync 14981300 Nov  2 10:41 projectb.dump
[11:36] <elmo> #$!&^"*
[11:36] <Kinnison> I'd say not :-(
[11:36] <daf> BradB: ping
[11:38] <BradB> daf: pong
[11:39] <daf> BradB: gah, sorry
[11:39] <daf> BradB: wasn't paying attention
[11:39] <daf> BradB: yeah, that's the way I'd like to do it
[11:39] <BradB> sounds good
[11:50] <carlos> spiv: From the old functional test, I have this: self.ztm.commit()
[11:50] <carlos> spiv: how could I do it with the new way to do the functional tests?
[11:50] <carlos> or is not needed anymore?
[11:53] <sabdfl> night all
[11:54] <kiko-afk> night mark
[11:56] <carlos> sabdfl: night
[11:57] <daf> BradB: it seems to me that notify_bug_added only sends mail if the bug has an owner
[11:58] <BradB> it always will. it's just a crap special case that i'm in the midst of fixing (eliding a second page test currently to prove it works)
[11:58] <BradB> what should really be happening is that the owner gets added to the Cc list when they add a bug. then that crap special case gets ripped out.
[11:59] <BradB> (which i can do in this checkin)