[12:04] <carlos> spiv: ok, thanks for look at it :-)
[12:04] <carlos> people, good night
[12:07] <limi|busy> daf?
[12:12] <daf> limi|busy?
[12:12] <limi|busy> give me 20 seconds, and we'll know
[12:13] <limi|busy> Module canonical.rosetta.browser, line 75, in products
[12:13] <limi|busy> total = product.messageCount()
[12:13] <limi|busy> ForbiddenAttribute: ('messageCount', <Product at 0x
[12:14] <limi|busy> latest merges from rocketfuel
[12:14] <limi|busy> re-built DB
[12:14] <limi|busy> daf: this is when accessing the GNOME project in Rosetta
[12:15] <daf> bah
[12:16] <daf> can you give the complete last line of the error message?
[12:16] <limi|busy> yes
[12:16] <limi|busy> Module zope.tal.talinterpreter, line 311, in interpret
[12:16] <limi|busy> handlers[opcode] (self, args)
[12:16] <limi|busy> Module zope.tal.talinterpreter, line 723, in do_loop_tal
[12:16] <limi|busy> iterator = self.engine.setRepeat(name, expr)
[12:16] <limi|busy> Module zope.tales.tales, line 687, in setRepeat
[12:16] <limi|busy> it = self._engine.iteratorFactory(name, expr, self)
[12:16] <limi|busy> Module zope.tales.tales, line 109, in __init__
[12:16] <limi|busy> self._next = i.next()
[12:16] <limi|busy> Module canonical.rosetta.browser, line 75, in products
[12:16] <limi|busy> total = product.messageCount()
[12:16] <limi|busy> ForbiddenAttribute: ('messageCount', <Product at 0x38292d0
[12:17] <limi|busy> >
[12:17] <limi|busy> )
[12:17] <limi|busy> :)
[12:17] <daf> hmm
[12:36] <limi|busy> daf: any idea what it could be?
[12:43] <daf> a bug?
[12:50] <spiv> Gah.
[12:50] <daf> I don't understand it
[12:50] <spiv> SteveA: Around?
[12:51] <daf> spiv: I suspect not, given his timezone
[12:51] <spiv> daf: Ah, ok.  I've no idea what time it is anywhere anymore ;)
[12:51] <limi|busy> time zones are for wimps
[12:52] <daf> spiv: :)
[12:53] <daf> limi|busy: ah, I think I see what's going on
[12:53] <limi|busy> ok
[12:54] <daf> limi|busy: in lib/canonical/rosetta/browser.py
[12:54] <spiv> daf: Anyway, I *may* have found the cause of carlos's bug.
[12:55] <daf> spiv: the mystery of the missing END?
[12:55] <limi|busy> daf: do continue ;)
[12:55] <limi|busy> the suspense is killing me
[12:55] <limi|busy> ;)
[12:55] <daf> --- orig/lib/canonical/rosetta/browser.py
[12:56] <daf> +++ orig/lib/canonical/rosetta/browser.py
[12:56] <limi|busy> there's a conflict that got merged?
[12:56] <daf> @@ -58,3 +58,3 @@
[12:57] <daf>           person = IPerson(self.request.principal, None)
[12:58] <daf>           if person is not None:
[12:58] <limi|busy> daf, the manual diffing machine
[12:58] <daf>               for language in person.languages():
[12:58] <daf> -                 yield LanguageProducts(language, self.context.products)
[12:58] <limi|busy> remove that line and...
[12:59] <daf> add this one:
[12:59] <daf>                 yield LanguageProducts(language, self.context.rosettaProducts)
[01:00] <daf> well, give that a try and see if it fixes it
[01:00] <limi|busy> testing
[01:00] <daf> oh, Friday
[01:00] <limi|busy> lovely Friday
[01:02] <limi|busy> daf: same error
[01:02] <limi|busy> or; similar
[01:03] <limi|busy> Module zope.tales.tales, line 109, in __init__
[01:03] <limi|busy> self._next = i.next()
[01:03] <limi|busy> Module canonical.rosetta.browser, line 75, in products
[01:03] <limi|busy> total = product.messageCount()
[01:03] <limi|busy> ForbiddenAttribute: ('messageCount', <Product at 0x3843750>)
[01:03] <daf> hmmm
[01:11] <daf> limi|busy: I'm trying to reproduce this error locally
[01:11] <limi|busy> ok
[01:21] <spiv> daf: Yep, I definitely know why carlos's thiing isn't being committed.
[01:21] <spiv> daf: What I don't know is what the right way to fix that is :)
[01:24] <daf> spiv: another sqlobject/slos bug?
[01:44] <limi|busy> carlos does insane things to ZPT at times :] 
[01:48] <limi|busy> daf: any idea where the actual language list is coming from?
[01:49] <limi|busy> ie. which file is it in?
[01:50] <limi|busy> or does it grab it from the system?
[02:03] <limi|busy> daf: ping? :)
[02:03] <limi|busy> spiv?
[02:04] <limi|busy> :)
[02:04] <limi|busy> anyone? :] 
[02:04] <daf> limi|busy: from the database
[02:04] <daf> sorry, got distracted
[02:04] <limi|busy> daf: aha
[02:04] <limi|busy> anyway
[02:04] <limi|busy> I have a more complex question ;)
[02:05] <daf> eek!
[02:05] <limi|busy> how can I get the languages the logged-in person has?
[02:05] <limi|busy> I didn't quite understand what kind of structure carlos was using in the dashboard
[02:05] <daf> um
[02:05] <limi|busy> the "select your languages" part
[02:05] <daf> should be something like
[02:05] <daf> request/lp:person/languages
[02:06] <daf> grep around for something like that; I think it's used in at least one template already
[02:07] <limi|busy> Module zope.interface.interface, line 684, in __call__
[02:07] <limi|busy> raise TypeError("Could not adapt", obj, self)
[02:07] <limi|busy> TypeError: ('Could not adapt', <zope.app.security.principalregistry.UnauthenticatedPrincipal object at 0x29a3a50>, <InterfaceClass canonical.rosetta.interfaces.IPerson>)
[02:07] <limi|busy> nothing greppable that I can find :(
[02:08] <daf> bah, that error again
[02:11] <daf> hmm
[02:11] <daf> you know that error you had before?
[02:12] <limi|busy> oh well, I can leave it for carlos to sort it out
[02:12] <limi|busy> yes?
[02:12] <daf> what does line 65 of your browser.py say?
[02:13] <limi|busy>                 yield LanguageProducts(language, self.context.products)
[02:13] <limi|busy> change to rosettaProducts?
[02:13] <daf> what line did you change before?
[02:13] <limi|busy> 58
[02:14] <daf> aha
[02:14] <daf> ok, both lines 58 and 65 should read ".rosettaProducts()" instead of ".products"
[02:14] <limi|busy> ok
[02:15] <limi|busy> and why is it only me that has this problem? :)
[02:15] <limi|busy> :] 
[02:15] <daf> I didn't get it because I was not up-to-date, I think
[02:16] <daf> or because I wasn't looking at that page
[02:16] <limi|busy> ok :)
[02:16] <daf> or because the moon is Waning Gibbous
[02:16] <limi|busy> well, it's just the project page, it's not like it's important or anything O:)
[02:16] <daf> :)
[02:17] <limi|busy> that language list in the DB is on crack, btw
[02:17] <limi|busy> 70% of it is dead/unused languages
[02:17] <limi|busy> :] 
[02:19] <limi|busy> daf: almost:
[02:19] <limi|busy> Module zope.tales.tales, line 109, in __init__
[02:19] <limi|busy> self._next = i.next()
[02:19] <limi|busy> Module canonical.rosetta.browser, line 74, in products
[02:19] <limi|busy> for product in self._products:
[02:19] <limi|busy> TypeError: iteration over non-sequence
[02:19] <limi|busy> ;)
[02:19] <daf> wtf?
[02:19] <daf> that is *so* a sequence
[02:19] <limi|busy> haha
[02:19] <limi|busy> not _rosettaProducts?
[02:20] <daf> try slapping a list() around self.context.rosettaProducts()
[02:20] <limi|busy> ok
[02:20] <limi|busy> both lines?
[02:20] <daf> aye
[02:21] <limi|busy> typecasting all over the place ;)
[02:22] <daf> haha :)
[02:22] <limi|busy> same error
[02:22] <daf> humph
[02:25] <daf> Works For Me <tm>
[02:26] <limi|busy> Doesn't Help
[02:26] <limi|busy> ;)
[02:27] <daf> try rebuilding your database
[02:27] <daf> "make -C database/schema launchpad_test", IIRC
[02:29] <limi|busy> I did that after I updated last, but...
[02:30] <daf> and you did restart Launchpad, right?
[02:31] <limi|busy> yes
[02:31] <daf> then you *are* being singled out :)
[02:32] <limi|busy> hehe
[02:32] <limi|busy> Module zope.tales.tales, line 109, in __init__
[02:32] <limi|busy> self._next = i.next()
[02:32] <limi|busy> Module canonical.rosetta.browser, line 65, in languageProducts
[02:32] <limi|busy> yield LanguageProducts(language, list(self.context.rosettaProducts))
[02:32] <limi|busy> TypeError: iteration over non-sequenc
[02:33] <limi|busy> still no worky
[02:33] <daf> you missed out the ()
[02:33] <limi|busy> ?
[02:33] <daf> rosettaProducts()
[02:33] <limi|busy> aha
[02:34] <daf> if you add the (), you can probably get rid of the list()
[02:34] <daf> (both of them)
[02:34] <limi|busy> yes, did that ;)
[02:35] <limi|busy> daf: what's a "temporal hack", btw? is that where you get 25 hours in a day?
[02:35] <daf> :)
[02:35] <limi|busy> O:)
[02:35] <daf> :D
[02:35] <daf> I think that's Carlosspeak for "temporary hack" :)
[02:35] <limi|busy> hehe
[02:36] <daf> limi has gone mainstream :)
[02:37] <limi|busy> Module zope.app.publication.publicationtraverse, line 57, in traverseName
[02:37] <limi|busy> ob2 = adapter.publishTraverse(request, nm)
[02:37] <limi|busy> Module canonical.metazcml, line 148, in publishTraverse
[02:37] <limi|busy> traversed_to = getattr(self.context, self._getter)(name)
[02:37] <limi|busy> ForbiddenAttribute: ('product', <canonical.rosetta.domain.RosettaProject object at 0x38678f0>)
[02:37] <limi|busy> when clicking a product in GNOME project page
[02:39] <daf> oh, bloody ForbiddenAttributes
[02:42] <daf> bah, file system full >:-|
[02:43] <limi|busy> ouch
[02:43] <daf> Filesystem            Size  Used Avail Use% Mounted on
[02:43] <daf> /dev/hda2              24G   22G     0 100% /
[02:44] <daf> um, isn't there 2G missing there?
[02:46] <limi|busy> depends how it counts it
[02:46] <limi|busy> there's always block slack
[02:46] <limi|busy> if you have lots of small files, that may be a correct number
[02:46] <daf> I know, but it's annoying when you're desparately looking around for free space
[02:47] <limi|busy> get rid of some mp3s :] 
[02:48] <daf> eek!
[03:31] <justdave> the Avail and the Use% indicate userspace on the disk
[03:31] <justdave> there's a bit reserved for root
[03:33] <mdz> daf: it doesn't count space which is reserved for root
[03:33] <mdz> by default 5%
[03:33] <mdz> so 1G and change in your case
[03:40] <daf> mdz: interesting, thanks
[03:41] <daf> mdz: this is something which can be configured, right?
[03:41] <mdz> daf: yes
[03:41] <mdz> daf: tune2fs -l /dev/hda2 to view it
[03:41] <mdz> tune2fs -m <percentage> /dev/hda2 to change it
[03:41] <daf> groovy
[03:42] <daf> can this be changed on a mounted filesystem?
[03:42] <mdz> it's probably not dangerous to do so, but it wouldn't take effect until the filesystem was remounted
[03:43] <daf> hmm, df is reporting the change immediately
[04:14] !dmwaters:*! hi all! I'm going to wake everyone up a bit.:) I need to switch out one main rotation server for another. basically, replacing an old box with a new one.:) this won't take long. 1800 users affected.
[04:21] <mdz> that seems plausible
[04:21] <mdz> I wouldn't expect it to be enforced yet, though, but I suppose it's possible
[04:27] <daf> we shall see :)
[06:43] <spiv> SteveA: I'm off to bed now, so just a quick note that BrowserPublication defines two different beforeTraversal methods!
[07:29] !lilo:*! So, it occurs to me to wonder what the maximum practical latency between participants in a peer-directed project might be: http://www.reuters.com/newsArticle.jhtml?type=scienceNews&storyID=6133976&src=eDialog/GetContent&section=news
[09:16] <SteveA> thanks!
[09:16] <SteveA> I'll fix that
[11:10] <carlos> morning
[11:32] <SteveA> morning
[11:32] <SteveA> spiv found the database error
[11:32] <SteveA> I'd introduced a bug when I merged in the auth changes
[11:32] <SteveA> there are two beforeTraversal methods defined in BrowserPublication
[11:40] <carlos> SteveA: then, it's already fixed?
[11:57] <SteveA> I don't believe anything is checked in yet
[11:57] <SteveA> but, I also just read andrew's note about a bug in sqlobject joins
[12:54] <carlos> SteveA: I'm having a problem with this page https://rosetta.warthogs.hbd.com/rosetta/prefs
[12:55] <carlos> SteveA: if I select only a entry from "Available languages", the request gives me something like: availablelanguages: itemSelected
[12:56] <carlos> but If I select more than one, I get something like: availablelanguages: u'item1', u'item2', u'item3' 
[12:57] <carlos> and when I try to iterate over all values, it does not work as it should
[12:57] <carlos> because in the first case, it itereates over all letters instead of just retrieve the value
[01:09] <SteveA> ok, that sounds like what I'd expect it to do
[01:09] <SteveA> when there is more than one, what kind of object is it?
[01:10] <SteveA> you can also change the code in the page template to say availablelanguages:list rather than just availablelanguages
[01:10] <SteveA> like:
[01:10] <SteveA>   <select name="availablelanguages:list">
[01:12] <SteveA> yeah, try making it a list:
[01:12] <SteveA>             <select id="prefs-available-languages" name="availablelanguages" size="10" style="width: 20em;" multiple="multiple" ondblclick="javascript:addSelectedKeywords('prefs-available-languages','prefs-selected-languages');return false;">
[01:12] <SteveA> change that to contain name="availablelanguages:list"
[01:12] <carlos> ok
[01:12] <SteveA> oh, wait...
[01:12] <SteveA> you want "selectedLanguages" not "availableLangauges" dont' you?
[01:13] <carlos> I want both
[01:13] <SteveA> well, all in lower
[01:13] <carlos> yes
[01:13] <SteveA> I don't know how what I suggested would interact with the fancy javascript
[01:13] <SteveA> so, better to handle this in your form-processing method
[01:13] <carlos> the add submit gets the available, the remove submit gets the selected
[01:14] <SteveA> test the type of availablelanguages
[01:14] <carlos> well, in fact, I don't know why, but the javascript is not working anymore here
[01:14] <SteveA> isinstance(availablelanguages, list)
[01:14] <carlos> but that's another problem
[01:15] <carlos> SteveA: is there any way to do the javascript magic without submit it?
[01:15] <carlos> or just ignoring it is enough?
[01:15] <SteveA> I don't know exactly what you mean
[01:15] <carlos> with the limi's code, we have three submit buttons
[01:15] <SteveA> let's solve your original problem first
[01:15] <carlos> one to save and two for add/remove
[01:15] <carlos> ok
[01:16] <SteveA> can you try to use isinstance(availablelanguages, list) to see if it is a string or a list?
[01:18] <carlos> SteveA: ok, it works
[01:19] <SteveA> great
[01:20] <SteveA> now, on stopping buttons from submitting
[01:20] <SteveA> you need to ensure the javascipt returns false
[01:20] <SteveA> that should stop them from hitting the server
[01:20] <SteveA> but, it looks like it does that already
[01:20] <carlos> and it's fixed now
[01:20] <carlos> if isinstance(self.request.form['availablelanguages'] , list):
[01:20] <carlos>                     newLanguages = self.request.form['availablelanguages'] 
[01:20] <carlos>                 else:
[01:20] <carlos>                     newLanguages = [ self.request.form['availablelanguages']  ] 
[01:20] <carlos>                 for englishName in newLanguages:
[01:21] <SteveA> okay
[01:21] <carlos> SteveA: hmm, I think I was wrong the add/remove button should submit always because if the languages are not selected the request does not have the list of items...
[01:21] <carlos> limi: hey
[01:22] <carlos> limi: I'm broking your templates :-P
[01:22] <limi> hehe
[01:22] <carlos> but then, I don't understand the utility of the javascript...
[01:22] <carlos> limi: if the submit buttons work, the javascript has any utility?
[01:23] <carlos> I mean, Is it useful?
[01:23] <limi> what do you mean?
[01:24] <carlos> limi: in my local machine, the javascript code has not effect anymore and I just changed the template so the list of selected languages is filled with user's preferences
[01:24] <carlos>  /s/just/only/
[01:25] <carlos> from the template, from browser.py I changed lot of things
[01:25] <limi> you probably changed the variable names, right?
[01:27] <SteveA> I must go out and buy some optician stuff.  probably get some lunch too.  back later.
[01:28] <carlos> limi: only the browser.py ones, not the javascript ones or the html objects ones
[01:28] <carlos> SteveA: later
[01:29] <carlos> limi: my changes:
[01:29] <carlos>  <div metal:fill-slot="main"
[01:29] <carlos> -     tal:define="languages view/languages">
[01:29] <carlos> +     tal:define="languages view/languages; selectedLanguages view/selectedLanguages" >
[01:29] <carlos> -    <form action="translator" method="post">
[01:29] <carlos> +    <form action="prefs" method="post">
[01:29] <carlos> -                      <option>Dummy</option>
[01:29] <carlos> +
[01:29] <carlos> +                      <option tal:repeat="language selectedLanguages"
[01:29] <carlos> +                             tal:content="language/englishName"
[01:29] <carlos> +                             tal:attributes="name language/code" />
[01:29] <carlos> nothing more
[01:30] <limi> should work then
[01:30] <carlos> I know :-)
[01:30] <carlos> It's not yet at rocketfuel
[01:30] <limi> ok
[01:30] <carlos> do you want it?
[01:30] <limi> yes, mail it to me?
[01:30] <limi> limi at plone.org
[01:30] <carlos> ok
[01:36] <carlos> sent
[01:39] <carlos> limi: also, I think we don't need the Save button
[01:40] <limi> well, it depends
[01:40] <carlos> because the only way to save the new list is every time we push the add/delete one
[01:40] <limi> yes, but there might be more preferences later
[01:40] <carlos> seems like the View object is created every time after the submit
[01:40] <SteveA> the view object is created on every request
[01:40] <limi> not sure I follow you
[01:41] <SteveA> you cannot cache data in the view object between requests
[01:41] <limi> the page shouldn't reload
[01:41] <carlos> limi: When you click on the add button
[01:41] <limi> yes
[01:41] <carlos> I create a list with the additions
[01:41] <limi> and reload the page?
[01:41] <carlos> but if you click again in any other button that list does not exists anymore
[01:42] <limi> ?
[01:42] <carlos> limi: new object, new variables
[01:42] <limi> you are only concerned with the list on the right
[01:42] <SteveA> when I click the "add to my languages" button, there is no request back to the server.
[01:42] <limi> save that to the user prefs
[01:42] <limi> SteveA: exactly
[01:42] <SteveA> the javascript has a "return false;" in it
[01:43] <limi> I don't want to rely on XmlHttpRequest (not just yet, at least)
[01:43] <carlos> limi: ok, that's fine for me, but with my changes, I don't know why, the submit is done
[01:43] <limi> carlos: just take the list on the right and save that to the user prefs
[01:43] <limi> carlos: then that needs to be fixed ;)
[01:44] <SteveA> you can tell what button is pressed in your form handling method
[01:44] <carlos> limi: ok, if you could tell me what did I broke...
[01:44] <carlos> :-)
[01:44] <limi> hehe
[01:44] <carlos> SteveA: I know
[01:44] <SteveA> so, the form handler should do nothing (but maybe emit a warning) unless "save" is pressed
[01:44] <carlos> SteveA: then the submit is always done?
[01:44] <carlos> then, the problem is that I added code to handle all buttons
[01:44] <SteveA> can you ask that question in another way?
[01:45] <SteveA> only the save button should submit the form to the server
[01:45] <SteveA> the other buttons might, if javascript is turned off
[01:45] <SteveA> unless limi has done more magic to make them appear only when javascript is working
[01:45] <carlos> SteveA: with javascript on and the current configuration, the view should never get a request from add/remove?
[01:45] <SteveA> yes
[01:46] <SteveA> the server should get no request from add/remove
[01:46] <limi> correct
[01:46] <SteveA> "no no no no absolutely not", to quote "Bad News"
[01:46] <carlos> SteveA: I got those requests, and I have javascript enabled, because without my changes the javascript works
[01:46] <limi> you just save the list on the right
[01:46] <SteveA> playing a bastardized version of "Bohemian Rhapsody"
[01:47] <carlos> ok, the problem is that I was handling "add" submit
[01:47] <carlos> removing it makes it work again
[01:47] <carlos> but then the submit is done always
[01:47] <SteveA> ok, but it shouldn't actually hit the server
[01:47] <SteveA> check in the rendered page
[01:48] <SteveA> see if you have "return false;" at the end of the javascript in the add/remove buttons
[01:48] <SteveA> 
[01:48] <SteveA>         <div style="float: left; padding-top: 5em;">
[01:48] <SteveA>             <input type="submit" name="add" value="Add to my languages &raquo;" onclick="javascript:addSelectedKeywords('prefs-available-languages','prefs-selected-languages');return false;" />
[01:48] <SteveA> see, at the end of the onclick attribute
[01:49] <SteveA> that "return false;" will stop the browser from treating the click as a real form submit
[01:49] <SteveA> limi: why do paragraphs change colour when my mouse goes over them?
[01:50] <limi> paragraphs?
[01:50] <limi> oh, the help text?
[01:52] <SteveA> " Add or remove languages in your language list by double clicking the entries or using the labeled buttons. Use Ctrl to select multiple elements".
[01:55] <carlos> the return false is still there but for some reason does not work...
[01:55] <carlos> btw, it's not important now, just remove the code to handle those buttons and that's it
[01:59] <carlos> limi: I don't have a way to get the list of selected languages
[01:59] <carlos> limi: they should be "selected" so the request send me that list
[02:00] <limi> you are going about this the wrong way :)
[02:00] <carlos> I'm using <div tal:content="request" />
[02:00] <carlos> to see the request
[02:00] <limi> the list on the left is always static, and a separate item
[02:00] <limi> the list on the right is the variable stored on the user
[02:00] <carlos> and every time I press the Save button I don't get that list
[02:00] <limi> don't make them one variable
[02:01] <carlos> forget the code I sent you
[02:01] <carlos> just look at this:
[02:01] <carlos> CHANNEL_CREATION_TIME: 1094212731.84 CONNECTION_TYPE: keep-alive CONTENT_LENGTH: 33 CONTENT_TYPE: application/x-www-form-urlencoded GATEWAY_INTERFACE: CGI/1.1 HTTP_ACCEPT: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING: gzip,deflate HTTP_ACCEPT_LANGUAGE: es,en-gb;q=0.7,en;q=0.3 HTTP_HOST: localhost:8085 HTTP
[02:01] <carlos> _KEEP_ALIVE: 300 HTTP_REFERER: http://localhost:8085/++skin++Debug/rosetta/prefs HTTP_USER_AGENT: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.7.2) Gecko/20040814 Epiphany/1.3.7 PATH_INFO: /++skin++Debug/rosetta/prefs REMOTE_ADDR: 127.0.0.1 REQUEST_METHOD: POST SAVE: Save SCRIPT_NAME: SERVER_NAME: frodo SERVER_PORT: 8085 SERVER_PROTOCOL: HTTP/1.1 SERVER_SOFTWARE: zope.server.http (HTTP) availablelanguages: Akan
[02:01] <carlos> I get that after add the Akan language with javascript (without the submit)
[02:02] <carlos> and the pressing the Save button
[02:02] <carlos> I only get availablelanguages: Akan, because It's still selected from the available list when I added it with javascript
[02:02] <carlos> I don't see a way to get the list of selectedlanguages
[02:05] <limi> ask SteveA when he gets back, this is request magic :)
[02:06] <limi> shouldn't be a problem if you know how (I don't ;)
[02:06] <carlos> limi: SteveA told me that the way it works is: you only get what you have selected
[02:07] <carlos> is the same with a checkbox
[02:07] <carlos> if the checkbox is not checked, you don't get it with the request object
[02:07] <limi> yes, but it should select the selected languages on submit
[02:07] <carlos> that's why I was working with the add/remove buttons
[02:08] <SteveA> I see no code that would select languages in the "my languages" select box before submitting
[02:09] <limi> ok, let me look at it
[02:12] <carlos> SteveA: X-)
[02:27] <carlos> lunch time
[02:27] <carlos> later
[03:02] <daf> somebody broke the server
[03:02] <daf> carlos: I think it was you
[03:02] <daf> carlos: syntax error in lib/canonical/browser.py, line 326
[03:08] <daf> did SteveA say when he'd be back?
[03:08] <limi> nope
[03:43] <carlos> daf: hmm, I checked it before commit
[03:43] <carlos> let me see...
[03:44] <carlos> shit
[03:45] <carlos> daf: sorry, was my fault
[03:47] <carlos> daf: merge request to fix it sent
[03:50] <daf> thanks
[03:57] <carlos> daf: could we add all pending things to bugzilla so we can track its status and pick the "free" ones when we are free to pick another task?
[03:59] <carlos> hmm I thought our bugzilla is at https://bugzilla.warthogs.hbd.com/ but seems like it's not there, which one is the correct URL?
[04:01] <daf> http://bugzilla.warthogs.hbd.com/bugzilla?
[04:02] <carlos> daf: yes
[04:02] <carlos> thanks
[04:02] <daf> doo itashimashite
[04:02] <carlos> daf: :-?
[04:03] <daf> carlos: de nada
[04:04] <carlos> :-P
[04:04] <carlos> ok
[04:07] <daf> SteveA: hi
[04:07] <carlos> SteveA: Did you saw the talk I had with limi about the request object?
[04:07] <daf> SteveA: do you have time to help me with this problem I'm having?
[04:18] <SteveA> carlos: should I read the irc logs for when I was at lunch?
[04:18] <SteveA> daf: what's the problem?
[04:19] <daf> in a nutshell:
[04:19] <daf> NotFoundError: (<RosettaProject at 0xb414896c>, 'title')
[04:19] <carlos> SteveA: no, it was just before you leave. As soon as you end helping daf I will explain again the problem, ok?
[04:20] <SteveA> ok
[04:20] <SteveA> daf: that doesn't tell me much
[04:20] <daf> SteveA: I'm miffed because RosettaProject implements IRosettaProject which is derived from doap.IProject which has a title attribute
[04:20] <daf> SteveA: and, in sql.zcml, the IRosettaProject interface is allowed for RosettaProject
[04:21] <daf> the error ocurrs on the TAL expression 'context/product/project/title'
[04:22] <daf> in pdb:
[04:22] <daf> (Pdb) self.context
[04:22] <daf> <RosettaPOTemplate at 0xb4204b2c>
[04:22] <daf> (Pdb) self.context.product
[04:22] <daf> <RosettaProduct at 0xb41fb58c>
[04:22] <daf> (Pdb) self.context.product.project
[04:22] <daf> <RosettaProject at 0xb41aeecc>
[04:22] <daf> (Pdb) self.context.product.project.title
[04:22] <daf> *** ForbiddenAttribute: ('title', <RosettaProject at 0xb41aeecc>)
[04:22] <SteveA> what box are you working on?
[04:22] <SteveA> your laptop?
[04:22] <daf> yes
[04:23] <SteveA> can you give me a login there, and we can use screen for some pair-programming debugging?
[04:23] <daf> sure
[04:23] <daf> it's been a while since I've done this
[04:25] <SteveA> keep notes to put up on a wiki page perhaps
[04:25] <daf> good idea
[04:25] <SteveA> this will be even better when we can use voip and screen together
[04:28] <daf> :)
[04:33] <carlos> https://rosetta.warthogs.hbd.com/++skin++Debug/rosetta/projects/gnome/evolution/
[04:33] <carlos> SteveA: I think that error is related to that bug
[04:35] <SteveA> I think you're right
[04:36] <SteveA> want to talk about requests while daf gets ready?
[04:36] <carlos> ok
[04:36] <carlos> It's about the page to select interested languages
[04:36] <carlos> Limi creates a list with javascript
[04:36] <carlos> when you click on add/remove
[04:37] <carlos> and in theory, when you click on "Save", I should get that list
[04:37] <SteveA> ok
[04:37] <limi> I probably need to do a select all on that click
[04:37] <SteveA> yes
[04:37] <SteveA> I expect so
[04:37] <SteveA> otherwise, nothing will be sent
[04:37] <carlos> that's what I thought :-P
[04:37] <SteveA> otherwise, when you add items to the select box, also add a hidden form field
[04:37] <SteveA> but that sounds complex
[04:38] <SteveA> when you consider removal too
[04:38] <SteveA> don't even know if it would work :)
[04:38] <limi> we are using it in production with the select all :)
[04:38] <limi> so I should be able to locate that
[04:39] <SteveA> so, carlos, limi will fix it with javascript
[04:39] <SteveA> to test for now, you can manually select all the items before submitting
[04:39] <limi> +1
[04:39] <limi> :)
[04:39] <carlos> ok
[04:39] <carlos> limi: and is there any way to get the language code instead of the language name?
[04:39] <SteveA> carlos: maybe add a note to the UI saying "XXX select all items before submitting"
[04:40] <carlos> SteveA: ok
[04:40] <limi> it has the lang code now, afaik?
[04:40] <carlos> limi: no, the submit send the language name
[04:40] <limi> ok
[04:41] <carlos> limi: I just merged into rocketfuel the project-index.pt updated so it does not shows anything about a language
[04:44] <daf> SteveA: ssh stevea@earthsea.homedns.org
[04:51] <SteveA> hmm
[04:51] <SteveA> debug1: Connecting to earthsea.homedns.org [80.69.60.252]  port 22.
[04:52] <daf> hmm
[04:56] <SteveA> I can't get any response telnetting to port 22 either
[04:56] <daf> probably a problem with the router
[04:57] <SteveA> let's see if I can connect to your launchpad
[04:57] <SteveA> run it on 8085, and I'll try to connect
[04:58] <SteveA> can I run a portscan on you?
[04:59] <SteveA> will your isp think I'm cracking?
[05:02] <daf> no, they're sane
[05:02] <daf> hm, I tried opening port 2222 also
[05:02] <daf> but that doesn't seem to work either
[05:02] <daf> perhaps I'll just set up an ssh tunnel
[05:05] <carlos> limi: the preferences page is implemented but does some funny things until the DB commit is fixed
[05:06] <daf> SteveA: try "ssh stevea@muse.19inch.net -p 2222"
[05:07] <SteveA> ok, need password
[05:07] <daf> /msg'd
[05:08] <daf> now: screen -x daf/
[05:08] <daf> (I think)
[05:08] <SteveA> Must run suid root for multiuser support.
[05:08] <daf> hrm
[05:09] <daf> try again
[05:10] <carlos> wow, I didn't know that screen's feature
[05:11] <SteveA> 3 minute workrave time
[05:17] <SteveA> ok, let's debug
[05:17] <SteveA> how about we do gossip and screen
[05:17] <SteveA> ?
[05:20] <daf> sure
[05:22] <daf> http://muse.19inch.net/~daf/misc/multiuser-screen.html
[05:25] <SteveA> still there?
[05:27] <daf> yes
[05:28] <daf> the screen session has two windows
[05:28] <SteveA> so, we can talk on gossip
[05:28] <daf> one for running launchpad in
[05:28] <daf> and the other for modifying code in
[05:28] <SteveA> I have my terminal arranged so I can see our talk in gossip, and the screen session
[05:28] <SteveA> mainly, I want to get into the debugger at the point the error fails
[05:28] <SteveA> so, PM debug the permissions problem
[05:29] <daf> I have an explicit "import pdb; pdb.set_trace()" in the code at the moment
[05:29] <daf> we can debug from where that runs
[05:29] <daf> (in browser.py)
[05:29] <daf> or we can debug from the point whre it was failing of its own accord
[05:30] <SteveA> let's use the post-mortem debugger for now
[05:30] <SteveA> I want you to see how I'd debug one of these permissions problems
[05:30] <daf> well, both suggestions apply to the PMD
[05:30] <daf> oh, right
[05:31] <daf> ok, I'll disable the explicit debugger invocation
[05:58] !lilo:*! Hi all.  We need translator assistance in translating an English-language email for speakers of Spanish in the Dominican Republic....please message me if you can help
[07:11] <daf> limi: the color scheme change seem to only happen for some pages
[07:12] <daf> limi: also, I noticed you discussing the "change-colour-on-hover" behaviour of some text with Steve -- did you come to a conclusion about it?
[07:15] <limi> it's on the help text class - from Plone
[07:15] <limi> it was essentially added since some hard-of-sight people didn't like grayed-out text for the help
[07:15] <limi> easily removed if we don't like it
[07:15] <limi> one line of CSS ;)
[07:16] <limi> the color change should happen everywhere, make sure your cache is fresh
[07:16] <limi> shift-reload where it looks like the old version
[07:16] <limi> anyway, still waiting for the designs from the agency
[07:17] <limi> was just tired of it looking like Plone :)
[07:17] <daf> :)
[07:17] <daf> which agency is this?
[07:17] <limi> the logo people
[07:17] <daf> (I find the black-on-dark-blue a little difficult to read)
[07:17] <daf> oh dear
[08:24] <daf> hurrah!
[08:24] <daf> DatabaseException: unindexable object
[08:25] <daf> I didn't think I'd be happy to see that again...
[08:26] <daf> spiv: around?
[08:28] <daf> lalo: "fixed DB regression introduced by SteveA when integrating authentication." -- was that yours?
[08:32] <SteveA> that was me
[08:33] <SteveA> what's up?
[08:34] <SteveA> are you glad you got an "unindexable object" error?
[08:34] <daf> SteveA: did you forget to mirror?
[08:34] <daf> SteveA: no patches were merged
[08:34] <daf> SteveA: yes, I'm glad
[08:35] <daf> because that's what I was working on a few days ago before I got sidetracked by other things
[08:35] <SteveA> oh, yes... I forgot that my mirror hook isn't there
[08:37] <daf> I'd really like to get this error fixed
[08:37] <daf> because I don't think there's much else in the way of getting database submission merged to rocketfuel
[08:38] <daf> perhaps spiv's at lunch
[08:42] <SteveA> I just submitted a merge
[08:42] <SteveA> that should fix the database error I introduced
[08:42] <daf> which one?
[08:43] <SteveA> there were two beforeTraversal methods
[08:43] <SteveA> they should have been merged into one
[08:44] <SteveA> so, the transaction wasn't being started correctly, and the connection pool wasn't being cleared
[08:44] <daf> oh, right
[08:44] <SteveA> nono nononono nononono nono
[08:44] <SteveA> there's no limi
[08:44] <limi> O:)
[08:45] <SteveA> chris morris interviewed the performers of that song (2 unlimited) about the semantic content of the lyrics
[08:45] <SteveA> "so, do you think there should be limits on anything at all?"
[08:46] <daf> :D
[08:46] <daf> chris morris... the name rings a bell, faintly
[08:46] <daf> was the the guy behind Brass Eye?
[08:47] <SteveA> yes
[08:47] <SteveA> '"No, no, no no no no, no no no" - don't you think it's a bit negative?'
[08:54] <SteveA> daf: technically, the man in front of brass eye
[09:00] <SteveA> brass eye is a crude anatomical reference
[09:57] !lilo:*! Hi all. Just a reminder for those who wish to attend the official Gentoo meeting in Manchester UK tomorrow---if you're interested and you can make it there, please visit #gentoo-uk. Kudos to everyone involved for all the time they've put in to put this happen, and we know it will be an excellent event.
[10:44] <spiv> daf: Yep, am now.
[11:51] <daf> spiv: I've tried escaping the '%'s in the query
[11:51] <daf> spiv: but I'm still getting the same error
[11:53] <spiv> daf: Hmm.  Can you find out what the query string is?  (and what's the final part of the traceback?)
[11:58] <daf> sure
[11:58] <daf> 'Opening %%d contact will open %%d new window as well.\r\nDo you really want to display this contact?' is the string in question
[11:58] <daf> any easy way to get hold of the query?
[11:59] <daf> or shall I just turn postgres statement loggin on?