/srv/irclogs.ubuntu.com/2010/01/04/#ubuntuone.txt

=== jamesh changed the topic of #ubuntuone to: Have a question? Ask jamesh | https://one.ubuntu.com | https://launchpad.net/ubuntuone | Please honk if you want a music store
repeteHi all08:42
repeteCan anyone tell me how to force the syncing of  file?08:42
repeteNautilus says it is synced, but I don't see it in the web UI08:43
aquariushey repete.08:45
aquariusyou can't actually *force* a file08:45
repeteaquarius, hey, dude :-)08:45
aquariuswhen you say "nautilus says it's synced", what exactly do you mean there? that it has the emblem, or that you got a notification?08:46
repeteaquarius, well there's two thing there... 1) Yes, nautilus has the green check mark icon next to the file, and 2) I got a notification that "1 file finished syncing", but that doesn't tell me which file08:47
repeteaquarius, I added a directory, then two folders underneath, then added a file to each of those two folders08:47
aquariusthe check marks are, as I understand it, not reliable at the moment (rtgz has written a patch for that, but I don't think it's released yet)08:47
aquariusdo the logs show anything that looks like a failure?08:48
repeteaquarius, not afaict08:49
repeteaquarius, there is a notice that one of the files synced08:50
repetebut nothing about the second08:50
aquariusstrange.08:50
aquariusI...don't know, then, which is not very helpful, I know :(08:51
repeteaquarius, well, when I say "force" what I mean is create the conditions under which U1 decides the file has changed and must be synced again08:51
repeteaquarius, any idea there?08:51
aquariuswhen that happens to me (which it hasn't for a while, which is nice) I copy the file :)08:52
repeteI already tried touch08:52
rtgzwho what where when?08:52
repetecreate a copy and rename it?08:52
jameshrepete: I take it you tried reloading the web UI?08:53
repetejamesh, yes...08:53
* rtgz waits 8 minutes until ubuntulog sends the log to the irclogs...08:53
* repete tries again08:53
jameshIIRC, change notification isn't fully implemented for the web UI08:53
repeteShould I be looking at syncdaemon.log?08:54
repeteyea, reloading the page doesn't work. :-/08:55
aquariusrtgz, repete's got a file which isn't being synced to the web (and the emblem lies about it, which I think you've fixed but isn't released yet?)08:55
jameshwell, if you have another computer with the UbuntuOne client installed and configured, that would be a better indication that things are synchronising properly08:55
repetejamesh, unfortunately don't have that08:55
rtgzrepete, u1sdtool --info $full_path_to_file - is there server-hash? and what is the filename?08:55
repetertgz, that gives me a traceback :-/08:57
rtgzaquarius, the emblems for regular files once dobey reviews the branch, then files are no longer utime()d and they are happy.08:57
rtgzrepete, huh? Then it means that syncdaemon did not get to that file, i.e. 1) inotify dir handles limit reached, 2) syncdaemon crashed and does not want to recover08:58
rtgzrepete, KeyError with the filename as the argument?08:58
repetertgz, exactly08:58
rtgzrepete, what is the file name, does it contain some accented characters?08:58
repetertgz, no, but it contains underscores08:58
rtgzrepete, underscores... and no colons, ":" ?08:58
repetethough the other file that did sync also contains underscores08:59
repeteno, none of those08:59
rtgzin Ubuntu One dir: find -type d | wc -l09:00
rtgzjust to check how many directories you've got09:00
rtgzrepete, ^09:00
repetertgz, 909:01
rtgzrepete, not interesting. Okay,  let me read the logs, so that I don't ask duplicating questions..09:01
rtgzah, not much to read :)09:03
aquariusrtgz, yeah, we'd only just started when you rocked up :)09:03
rtgzso, my first guess is to 1. save the logs from ~/.cache/ubuntuone/logs to some safe location. 2. u1sdtool -q, 3. u1sdtool -w, 4. Connect via applet, 5. Check that file is being uploaded09:04
repetertgz, will do that, but how do I do #5?09:05
rtgzrepete, however the logs in syncdaemon.log copied to paste.ubuntu.com might help as well to diagnose the real reason09:05
rtgzrepete, u1sdtool --info $full_path_to_file09:05
repeteah...09:05
repetethx09:05
rtgzemblems... They give a false hope now :(09:07
rtgzrepete, btw, u1sdtool -w will timeout with DBus error, this is "OK" for now09:09
repetertgz, oh right.  Ok. :-)09:09
repetertgz, is that in the form of a traceback?09:09
rtgzrepete, checking...09:10
repetertgz, yea `u1sdtool --info ${full-path-to-file}` returns the same KeyError trackback09:11
rtgzrepete, re: traceback: "Oops, an error ocurred: ... org.freedesktop.DBus.Error.NoReply:"09:12
rtgzrtgz, could you pleeeease share the file name with us? or privately, in order to check what might go wrong with the file name... Additionally, what locale are you using?09:13
rtgzrepete, ^09:13
rtgzrtgz, happy new year!09:13
rtgzrepete, what version of u1 client are you using? just to try reproducing such condition?09:23
repetertgz, 1.1.0+r294-0ubuntu1~ppa1~karmic09:26
repetertgz, where do you want the logs?09:29
repeteu1 share? ;-)09:29
rtgzrepete, paste.ubuntu.com might be a better idea..09:30
aquarius:)09:30
rtgzhm... U1 log sharing...09:30
repetertgz, right.  syncdaemon.log?09:30
rtgzwe need group sharing!09:30
rtgzrepete, yup09:30
rtgzhowever it looks like categories are not yet implemented for evolution backend ..09:32
rtgzsummary: restart of syncdaemon log helped. The file got uploaded. no accented characters, colons or anything that might have prevented it from uploading10:06
rtgzthe folder was initially called "untitled folder", then it was renamed to "v2.0", afterwards the file was put in v2.0 directory but it was not picked up by syncdaemon (inotify watcher not applied? )10:09
rtgzreproduced10:17
rtgzERROR: The path /home/rtg/Ubuntu One/untitled folder of this watch <Watch wd=42 mask=3064 auto_add=False proc_fun=None path=/home/rtg/Ubuntu One/untitled folder dir=True > must not be trusted anymore10:44
rtgzno, this error is not related, sorry10:45
rtgzHere's my log: http://paste.ubuntu.com/351172/10:45
repetertgz, thx for your help, btw10:55
rtgzrepete, you are welcome, since there is virtually nothing done by me :)10:55
=== jamesh changed the topic of #ubuntuone to: https://one.ubuntu.com | https://launchpad.net/ubuntuone | Please honk if you want a music store
leny_The second computer (a Karmic UNR box) that I have connected to ubuntuone is (unlike the first, a desktop Karmic) not syncing evolution contacts. In the desktop-couch-replication.log is see multiple entries like this "2010-01-04 11:35:45,803 DEBUG    static pairings are []" . Plus some starting and finishing replication messages. It appears I have a setup error but am unsure as to how to correct it. Help please?11:46
rtgzleny_, do you have access to that UNR box now?12:03
leny_rtgz speaking from it12:03
rtgzleny_, ok, lets restart couchdb from terminal so that you will get a link to login to database frontend web page and check whether there are any contacts there.12:05
rtgz/usr/lib/desktopcouch/desktopcouch-stop12:05
rtgz/usr/lib/desktopcouch/desktopcouch-service12:05
aquariusdesktopcouch-stop is a bit unreliable...12:06
rtgz(regular user, not root). after you launch desktopcouch-service, you will be given a link to html page. Open it in the browser and it should redirect you to futon (couchdb web frontend) running on localhost12:06
rtgzaquarius, erm... if it does not stop, then we will sigmurder it12:06
aquariushttp://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation/Troubleshooting describes the right way to do that :)12:07
rtgzleny_, yes, in case desktopcouch-stop is finished but ps auxw| grep desktop-couchdb still shows up, then kill it12:07
rtgzaquarius, hm, docs!12:08
aquariusrtgz, yes indeed. I wasn't sure if you knew about the DC docs12:08
aquariushttp://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation is being built up as I get more and more time12:08
rtgzaquarius, killall beam.smp... erm... Casual user might not have anything else running by erlang, right...12:09
aquariusrtgz, yeah. It's a bit dodgy, but I figure that if you're running any other erlang programs as your user account then, well, you'll know enough to look at that command and think: hm, I won't do that.12:10
aquariusdesktopcouch-stop not working properly is most annoying. That needs fixing, which I shall discuss with thisfred and cardinalfang when they arrive ;)12:10
leny_rtgz, had to kill the service. Now restarted and I am at the http://localhost:44173/_utils/ web page.12:12
rtgzleny_, ok, now browse to contacts db12:14
rtgzand see whether there are any contacts12:15
leny_rtgz, I'm there. it's showing no entries12:15
rtgzok.12:16
rtgznow shut down evolution completely12:16
rtgzevolution --force-shutdown12:16
rtgzand start evolution from terminal12:16
* rtgz discovered that ASUS has also started their cloud file storage... 12:17
rtgzleny_, ^ (not about ASUS, but before that :) )12:19
leny_rtgz, done.  I've discovered I was one "Design Documents" before on the browse page. I'm now on "All Documents" and it's showing the one locally entered record I have (to see if it would go up)12:20
rtgzleny_, so, is anything created in local evolution instance shows up in couchdb?12:33
leny_Yup, but nothing goes between couchdb and ubuntuone in either direction.  Though my other machine is fine. The failing machine is the second added to ubuntuone.  I have prior to coming on irc done the restart described in http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation/Troubleshooting12:45
leny_Further I see the empty static pairings message unlike the log in Bug #47180512:47
ubottuLaunchpad bug 471805 in desktopcouch "Evolution contacts don't sync to Ubuntu One" [Undecided,Incomplete] https://launchpad.net/bugs/47180512:47
rtgzleny_, management db, are there any records?12:49
leny_rtgz, Yes a _design/get_records_and_type and a hex stamped record with a self_identity field in it.12:51
* leny_ honks for a music store13:03
aquariusleny_, working on it :P13:03
jblountleny_: :)13:03
leny_rtgz, Don't know if it's related but the evolution terminal window has several copies of this message in the startup "** (evolution:3934): CRITICAL **: atk_object_set_name: assertion `name != NULL' failed"13:11
rtgzleny_, no, that's accessibiliti toolkit errors13:11
rtgz*accessibility13:12
leny_rtgz, Thanks, thought I better mention it just in case13:12
rtgzleny_, so... when you start the evolution, you see the local entry in CouchDB addressbook, but that entry is not visible online, right?13:13
rtgzand you are able to create local entries, but they are not replicated13:13
aquariusleny_, you don't have an entry in desktopcouch to pair it with Ubuntu One. The applet is meant to put that in, and it must have failed before. If you restart the applet, it should be added; try killing the applet (killall ubuntuone-client-applet) and then restarting it (Applications > Internet > Ubuntu One)13:15
aquariusand then look in your desktopcouch management database again; there should then be a new record, relating to Ubuntu One.13:15
rtgzaquarius, you mean the record_type .../paired_server ?13:17
aquariusrtgz, yep. The applet, when it starts up, looks to see if desktopcouch is paired with U1, and if it isn't, the applet adds a pairing record for U113:18
aquariusrtgz, but from the sound of it, leny_'s desktopcouch was being weird, so the applet may have tried and failed to add the pairing record13:18
leny_aquarius / rtgz, now have 4 records in management db. Inclusing design and what looks like the pairing details for ubuntuone . Waiting 10 minutes for a sync13:25
aquariushaha! excellent.13:25
rtgzleny_, awesome. Ok, aquarius, is there any bug report describing such "unable to add record to db, and nobody cares, so act happily" condition?13:29
aquariusrtgz, there isn't, at the moment, so adding one would be good. (Part of the reason is that it's not clear what to actually do in that situation; telling the user isn't useful, since they don't know how to fix it, nor should they)13:30
aquariusunless CardinalFang knows differently and there already is a bug report13:31
rtgz"There appear to be a problem with Ubuntu One server pairing sequence. You might want to [try this task again] or gather required info using [apport]"13:32
leny_rtgz, aquarius, Sync HAS taken place, records now in Evolution. Many thanks13:32
rtgzbut applet sitting there showing "me is connected!" when a part of the system is broken is... misleading... Much like the emblems :)... dobey dobey dobey :)13:33
aquariusrtgz, ah, but you can't try the task again, since you can't manually trigger the add-a-pairing-record sequence, and if it hasn't worked then clearly there's a bug somewhere else preventing it (like, desktopcouch was unresponsive). Fixing *that* bug should stop the problem13:34
leny_A footnote: As well as doing the killall mentioned I killed this as well  /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon13:38
rtgzaquarius, why can't I trigger the "PAIR NOW!" sequence?13:41
aquariusrtgz, because you shouldn't ever, ever have to manually trigger it, therefore manual triggering isn't exposed13:41
aquariusrtgz, if you want to, you can run desktopcouch-pair, in the desktopcouch-tools package, to manually add an Ubuntu One pairing record13:41
aquarius(or to pair with a LAN desktopcouch)13:42
rtgzbtw, is there a dedicated dc irc room?13:45
rtgzI've got some questions regarding record updates...13:45
thisfredrtgz, there is, but more people are here13:46
thisfredrtgz: #desktopcouch currently has me, and __lucio__ who are both here as well\13:47
thisfredand this channel is fine for discussing all things d-c13:47
statikhi thisfred, hows life?13:50
thisfredhey statik, pretty good, actually13:52
thisfredhow are you?13:52
CardinalFangrtgz, the application should treat it like any other IO error.  What does it do if the disk is read-only?  Something like that for problems with desktopcouch.13:52
statikthisfred, i'm happy and more dangerous than ever13:53
thisfreda powerful combination ;)13:53
statikthisfred, could you look at https://answers.launchpad.net/ubuntuone-servers/+question/96145 and tell me if I need to be worried?13:53
thisfredon it13:54
urbanapeaquarius: had a really crazy set of revelations about the manifest stuff for Bindwood last week.13:56
thisfredstatik: hmm, I think we'll need more infor for that one. I don't know a lot about the web ui side of things. It may be an underlying couchdb problem, but I'll need to look at the logs.13:56
aquariusurbanape, oh? do tell? (HNY btw!)13:56
thisfredstatik: in the meantime, teknico might have an idea13:57
aquariusthisfred, there is currently a problem with notes and couch; rodrigo_1 and, I think, CardinalFang are looking at it13:57
thisfredaquarius: aha, way ahead of me13:57
* rtgz is holding a big banner /[Say no HTML for Tomboy Notes today!]\14:00
urbanapeaquarius: I wrote it up as a rambling conversation with myself. I'll send it along.14:01
statikurbanape, you write rambling conversations with yourself too? i feel better knowing i'm not alone ;)14:02
urbanapestatik: well, it started as a straightforward "let's get out what we have left to do" and then I started questioning that, and it turned into a bunch of Q: and A: paragraphs.14:04
urbanapemaybe I'll send it to the internal list.14:04
urbanapeanyway, the main upshot is that the manifest isn't necessary *except* to support the web ui.14:04
urbanapeso long as we add a bit of hackery to the records' schema14:05
=== rodrigo_1 is now known as rodrigo_
rodrigo_hey statik14:17
statikhola rodrigo_, did you have a fun holiday?14:18
rodrigo_statik: yeah, lots of fun :-)14:18
rodrigo_statik: when you have time, could you re-review https://code.edge.launchpad.net/~rodrigo-moya/libubuntuone/bring-music-store-live/+merge/16426 please?14:18
rodrigo_statik: and you? or you did not take vacation?14:19
statikrodrigo_, I did! it was great. wrote a jabber bot and a weird django file downloading experimental thing, and read lots of books and ate so much delicious food14:20
rodrigo_statik: oh, more productive than me then, just ate delicious food :)14:20
statikrodrigo_, I still get u1-marshal.h not being created14:21
statiki'm on revno 814:21
statiki made a totally clean branch, ran ./autogen.sh and didn't see errors, then ran make14:21
rodrigo_statik: and you have glib-genmarshal installed, right?14:22
statikyep, when i cd into libubuntuone and run make u1-marshal.h that works fine, and then the compile completes successfully14:22
urbanapethisfred: are you a guru on the _changes feed?14:22
rodrigo_statik: weird, it works for me on a clean branch without hassle14:23
rodrigo_statik: the rules in the Makefile.am seem to be ok14:23
aquariusthisfred, CardinalFang, urbanape: some desktopcouch things have come up over the break, which I'd like to lay out for you if you're all available at some point today14:23
urbanapeI'm up for it14:24
thisfredurbanape: somewhere between guru and clueless, I'd say14:24
urbanapewe're switching to MySQL?14:24
aquariusurbanape, nah, just csv files14:24
thisfredaquarius: sounds good14:24
urbanapew00t!14:24
thisfredaquarius: ZODB ? :)14:24
* aquarius shoots thisfred. In the face14:24
statikbelieve it or not MySQL has a csv engine14:24
rtgzaquarius, raw random access block devices14:24
rtgzthe real black box...14:24
thisfredaquarius: tsss, the ZODB is awesome. And quite similar to couchdb in some respects14:25
urbanapethisfred: I had been asking CardinalFang over the break, and he was pretty sure it didn't exist, but I thought I'd ask you: do you know if you can get field-level granularity in the _changes feed to see which fields have changed in a given revision?14:25
thisfredit's just the 12 million zope layers on top that vary in usability14:25
aquariusrtgz, you implement oauth as a kernel module and I'm all over it ;)14:25
thisfredurbanape: I too am pretty sure you can't14:25
thisfredurbanape: but let me triple check14:25
aquariusurbanape, nope, you can't.14:26
statikrodrigo_, i just approved the branch. when do we get packages for this uploaded to ubuntu?14:26
urbanapethis book: http://books.couchdb.org/relax/reference/change-notifications talks about the style=all_docs option to "get more revision and conflict information in the changes array for each result row."14:26
aquariusthe couch people are Unkeen on the idea of telling you what's changed. you're supposed to hit the document. annoying but true.14:26
rodrigo_statik: as soon as I get this and another branch merged14:26
urbanapewhat additional info does that give you? Nothing that I've been able to tell...14:26
rtgzaquarius, and filesharing via DRBD..14:26
urbanapeaquarius: but using documents as the change message is pretty lousy.14:26
rodrigo_statik: you have superpowers to merge the branches in tarmac, right?14:27
urbanapeaquarius: did you read my ramble?14:27
aquariusurbanape, I did. I am mulling it over to be sure that I understand it14:28
urbanapeso, alternately, we could make Bindwood always stamp the bookmark's current location on any document that it sends back to Couch (which is somewhat counter to the idea that we're only observing granular changes locally)14:29
statikrodrigo_: i'm running tarmac on libubuntuone now14:29
urbanapeand always update every field when we bring in a changed bookmark from Couch.14:29
rodrigo_statik: could you then please merge https://code.edge.launchpad.net/~rodrigo-moya/libubuntuone/bring-music-store-live/+merge/16426 and https://code.edge.launchpad.net/~rodrigo-moya/libubuntuone/python-bindings/+merge/16543 ?14:29
rodrigo_statik: cool, thanks14:29
urbanapeI don't mind my .application_annotations.field_changes notion, but I wish there were a better place for that annotation to go (like on the revision itself, somehow)14:30
rodrigo_statik: btw, in one of the few productive moments I had while on vacation, I was thinking if it would make sense to merge libubuntuone into ubuntuone-client?14:30
rodrigo_dobey: what do you think?14:31
thisfredwoohoo, nostalgy for TB3 is out. This will make email catch up about a gazillion times faster and less frustrating14:33
rodrigo_TB3?14:34
rodrigo_ah thunderbird?14:34
thisfredthunderbird, sry14:34
rodrigo_then, nostalgy? :D14:34
urbanapesent it all to the list. thisfred and CardinalFang: I'd appreciate your thoughts as well.14:34
thisfredurbanape: will look at it as soon as I get there14:34
urbanapedanke14:35
urbanapestatik: yeah, I find I actually get a lot more written when I pretend it's a conversation. I get some structure out of it, and I can explore all the aspects of what I'm talking about.14:36
urbanape(or think I'm talking about)14:37
statikhey aquarius, rodrigo_: are you guys available for a phone chat about the music store in 1 hour and 22 minutes?14:38
aquariusyep14:39
dobeyrodrigo_: i think my brain is frozen :)14:40
jcastrojblount: when you're around I'll need the graphic for the forum badge.14:42
rodrigo_statik: yeah14:42
rodrigo_dobey: too much snow? :D14:43
dobeyrodrigo_: about 2 hours of sleep last night, thanks to having to take the early flight14:43
urbanapedobey: early flight? where you at?14:44
dobeyurbanape: burlington.ma.us14:44
urbanapegonna get your ski on?14:45
urbanapeah, I was thinking of burlington, vt14:45
dobeynot really anywhere to ski here... and i hate snow anyway14:45
rodrigo_dobey only skies on sand :D14:48
statiki always pictured dobey as more of a wingsuit man http://en.wikipedia.org/wiki/Wingsuit_flying14:49
dobeyif i were going to ski, it would probably be on water14:49
dobeyliquid water14:49
rtgzweb guis: http://yui.yahooapis.com/2.8.0r4/build/connection/connection-min.js is loaded by /notes/new from https ui. Causes firefox to drop "Secure" status for the page14:51
aquariusrodrigo_, I have updated https://blueprints.edge.launchpad.net/ubuntu/+spec/lucid-ubuntu-one-musicstore so do please correct me if I've missed anything :)14:51
rodrigo_ok14:52
dobeyi think hotels use a different metric for "speed" with regards to internet14:53
rodrigo_statik: ah, found the u1-marshal.h problem on another clean branch, will submit a fix with the debian package one14:55
statikrodrigo_, great! are you including the debian/ dir with the branch? i've seen that discouraged generally, but i've also seen people recently on planet ubuntu saying thats a frustrating rule to have14:56
rodrigo_statik: hmm, I usually don't include the debian/ dir int he code branch, so I guess I'll do it on a separate package branch then?14:57
statikthe general practice seems to be doing a release tarball without the debian/ dir, yeah14:57
statiki'm not 100% sure how to bootstrap the packaging branch to work with the UDD branches, james westby would know for sure14:58
dobeydistribution-specific things in tarballs is generally frowned upon upstream14:58
CardinalFangDesktop+ MEETING BEGINS.  Say 'me' to claim a slice of the stand-up meeting, then take your turn by saying DONE/TODO/BLOCKED.15:00
dobeyrodrigo_: not sure about merging libubuntuone15:00
rodrigo_statik: well, I wouldn't include the debian/ dir in the tarball, just in the source branch15:00
rodrigo_dobey: well, the nautilus plugin would use the contacts-picker widget, that's why I thought about it15:01
rodrigo_dobey: and also, we could include other stuff, I guess15:01
rodrigo_dobey: for packaging, it would be on a separate package though15:01
dobeydebian dir in code branches is a pain to maintain15:02
rodrigo_statik: https://code.edge.launchpad.net/~rodrigo-moya/libubuntuone/fix-marshal-generation/+merge/1678315:04
rodrigo_statik: can you try it please?15:04
statikrodrigo_, this is a good page to read https://wiki.ubuntu.com/DistributedDevelopment/15:04
statikyep, I'll try it now15:04
rodrigo_statik: ok, reading15:05
rtgzbtw, is there any info on what is causing the global outage of note sync for all u1 users?15:05
rodrigo_rtgz: yes, a problem with _rev AFAIK15:06
dobeyrodrigo_: packaging is irrelevant if we merge them. library would be separate binary packages anyway15:07
rodrigo_dobey: yeah15:07
rtgzany ETA? Cause this is a substantial part of life that UbuntuOne is aimed to backup15:07
statikrodrigo_, it works! i approved the merge, if you set the commit message i'll run tarmac15:07
rodrigo_statik: done15:08
rodrigo_dobey: well, the thing is I'm about to start packaging libubuntuone, so either I do it on a separate package branch, or merge it with u1-client and add needed stuff to u1-client's packaging branch15:09
rodrigo_dobey: that would make it easier, since we won't have to run over the approval process for new packages15:10
rodrigo_dobey: so, what do you think, shall I merge it?15:10
dobeyCardinalFang: you need to be more proactive about that i think :)15:10
CardinalFangI guess so.15:11
CardinalFangFear, Fire, Foes, Awake!15:11
CardinalFang...maybe that only works for Hobbits.15:12
rodrigo_me :D15:12
CardinalFangme15:12
rtgzme?15:13
CardinalFangAre we still having these?  Desktop+ MEETING BEGINS.  Say 'me' to claim a slice of the stand-up meeting, then take your turn by saying DONE/TODO/BLOCKED.15:13
aquariusme15:13
dobeynot me, upstream connection is too slow to type with :(15:14
rtgzdobey, internets is slow today here as well :(15:14
rtgzthe whole world is checking their emails, downloads updates and visits their social networking sites15:14
dobeymaybe me15:15
urbanapeme15:15
dobeyrodrigo_: i think it should probably stay separate. would arther it be separate, than decide to move it back out later. :)15:16
rodrigo_dobey: well, nautilus plugin is the main user of the library15:16
rodrigo_s/is/will be15:16
dobeyrodrigo_: music store15:17
dobeyrodrigo_: and ideally third party apps :)15:18
rodrigo_dobey: right, but part of u1 still15:18
rodrigo_dobey: I really don't see a reason to have it separate really15:18
dobeyyes but it's a separate projects15:18
dobeywell we might add more to it later15:18
rodrigo_given that we have, in u1-client, several subprojects15:18
rodrigo_dobey: but all related to u1 :D15:18
dobeywell all of gnome-foo is related to gnome...15:19
rodrigo_so, do we start the standup?15:19
dobeyplease15:19
dobeybefore i can't type again15:19
dobeyrodrigo_: go :)15:20
rodrigo_• DONE: Vacation. Mail/music store catching up. Merge 2 libubuntuone branches. Started work on debian package for libubuntuone. Fixed marshalers generation code15:20
rodrigo_• TODO: Conflict resolver tool in pair tool. Look at becoming a MOTU (https://wiki.ubuntu.com/UbuntuDevelopers). Make sandy's snowy test suite work with our server (http://git.gnome.org/cgit/snowy/tree/api/tests.py). Discuss with jdo and aquarius about oauth token per app, not per machine? Look at Canola. Add envvar to override music store default location15:20
rodrigo_• BLOCKED: no15:20
rodrigo_CardinalFang: go15:20
dobeyChipaca is going through immigration right now i suspect :)15:21
CardinalFangDONE: Gregorian new year.15:21
CardinalFangTODO: Help educating Tomboy to write with revisions to desktopcouch.  Finally make boss happy and put work ideas in bugs and blueprints.15:21
CardinalFangBLOCKED: Nein.15:21
CardinalFangrtgz, if you have something to say...15:21
rtgzDONE: Some nautilus module debugging, corrected weak ref notify to be removed on module shutdown, waiting for merge. Standalone note sync script for GNote/Tomboy to local CouchDB sync.15:21
rtgzTODO: Get a real job, update diagnose client with something,15:21
rtgzBLOCKED: Sick15:21
rtgzaquarius, to infinity and beyond!15:21
aquarius⚀ DONE: submitted initial fake music store and music store for review; worked out file delivery API; specced file delivery; consumed the European mince pie mountain15:21
aquarius⚁ TODO: package rhythmbox plugin; work out why decorators don't work on HttpResponseRedirects; allow OAuth to web UI; make music store views better; make workitems of outstanding todo items; make tomboy first-sync experience nicer15:21
aquarius⚂ BLOCKED:15:21
aquariusdobey, you're up15:21
dobey☺ DONE: Reviews, Fixed #485824, Fixed #499850, Bug triage, Moved logging config to a separate generated conf file15:23
dobey☹ TODO: More new UI code, Lean training,15:23
dobey☹ BLCK: None.15:23
dobeyurbanape, jblount: somebody pick up the phone :)15:24
urbanapeDONE: Made some great (on paper) progress on Bindwood, ready to be implemented.15:24
urbanapeTODO: get 'er done15:24
urbanapeBLOCK: None15:24
urbanapejblount: europe15:24
dobeybrb15:27
dobeyhrmm, i need to find me some food15:34
* rtgz found that one line merges tend to get better review approval than multi-line :)15:35
dobeyone line changes tend to be easier to review15:35
aquarius- UBUNTUONE_SERVER_URL = "https://one.ubuntu.com"15:38
aquarius+ UBUNTUONE_SERVER_URL = "http://yepishev.name"15:38
aquarius:-)15:38
CardinalFangNot easier to accept, aquarius .15:38
* aquarius grins15:38
CardinalFangJust review.15:38
rtgz_aquarius, I have been thinking about registering that domain for 3 years... I guess I know what I'll do with it now :)15:42
* aquarius grins15:42
rtgz__very_ personal cloud15:42
dobeyi had a cloud once, then it evaporated15:43
rtgz_web ui people, please please please implement file searching...15:46
* rtgz_ emitted too much "please please please" feature request today, shutting down15:47
dobeyfilename searching, or file contents search?15:48
rtgz_dobey, file name for now, content search is something that will make u1 web ui really stand out.15:51
* rtgz_ tested ASUS WebStorage15:51
* rtgz_ did not like the UI, it is scaaary15:51
dobeywell, it's a privacy issue unfortunately15:52
dobeyis launchpad really slow right now?15:58
rtgz_and now the final q for the web guys (no please please please) - why are the links pointing 1) to _new window, 2) the URL does not contain the filename so that when new tab IS opened, the original filename becames visible only on download16:00
aquariusstatik, rodrigo_?16:02
rodrigo_aquarius: ready16:03
statikrtgz_, I don't know why they are pointing to _new, thats annoying. The URL doesn't have the filename because of addressing, but we could stick the filename in and just ignore it in the download server, that would be more userfriendly. Should probably also add the filename in a tooltip.16:04
jblountrtgz_: I think they point to _new because those links were opening the file (instead of downloading it). This is a bug.16:07
jblountOh, and sorry I missed the standup. I mis-judged how long my run would take me after taking two weeks off :(16:09
jblountDONE: Holiday, Email triage16:09
jblountTODO: Public file links!16:09
jblountBLOCKED: Nope16:09
thisfredurbanape: I'm having trouble understanding the email, which likely means I'll have to read it more thoroughly, but I still wonder if there isn't a simpler, stupider solution to the problem. As an analogy, over the holidays, I worked on a pet project that deals with audio files, and I kept searching for a way to fingerprint just the audio content of a file, mostly so I could see if it was the same file when it was moved, and/or w16:11
thisfredhen its id3 tags were modified.16:11
thisfredurbanape: in the end, it turns out that this is almost impossibly hard16:12
rtgz_statik, _new != _blank, re- filename appended to the download hash - agree16:12
thisfredand instead, I gave up on the first part, and just use the full path to the file as an id everywhere16:12
thisfredwhich gave me everything else I needed16:12
thisfredand it turns out *I* at least, don't move my mp3s around all that much16:13
rtgz_re: music store - ogg/mp3/mp3-only/ogg-only/DRM ?16:14
thisfredrtgz_: I think mp3 no DRM16:14
thisfredurbanape: I wonder if there is some way to do the same for the bookmarks: using the "path" as (part of) the couchdb id16:15
rtgz_htere was an earlier discussion about syncdaemon not picking up the files when they are put into dirs. I managed to reproduce that, anybody interested?16:18
rtgz_with TRACE log level16:19
urbanapethisfred: but moving a bookmark (changing its path) doesn't change *the bookmark*16:23
urbanapethey're orthagonal aspects. Its location is metadata, not the data itself.16:24
urbanapeI'm not at all surprised that it's hard to read. It was mostly just a stream of consciousness kind of thing.16:24
urbanapebut I wanted to get some feedback from other Couch-y types.16:25
dobeyrtgz_: i don't think record labels generally release music as flac/ogg/etc... mp3 is the standard16:25
thisfredurbanape: Of course in an ideal world, content and metadata of this kind would be cleanly separated, but to couchdb, it's all data16:26
dobeyman it is cold in here16:26
urbanapethisfred: sure, which is why I am proposing this kind of hackishness.16:28
thisfredurbanape: also, in any other database system, they will tell you not to use semantically meaningful ids16:28
urbanapethe ids I'm proposing aren't semantically meaningful16:28
thisfredurbanape: rereading16:28
thisfredurbanape: yeah I know, I'm saying, in couchdb, it seems to be fine to use such ids16:28
urbanapeI'm suggesting that instead of using Couch's generated ids, and annotating the record with a locally produced uuid, we just use the uuid as the id and be done with it.16:28
urbanapethisfred: ah16:28
urbanapeyes, it does turn some traditional db conventions on their ears16:29
thisfrednote that it may not be the solution you're looking for at all, but I'm saying that challenging almost all your assumptions sometimes gets you a very simple 99% (i.e. good enough) solution in couchdb16:30
thisfredof course that's not a mode one can work in all the time16:32
urbanapeokay, so partly, I'm also looking for affirmation that this might not necessarily be "hackish" but could, in fact, be a conventional way of doing things in the CouchDB world.16:33
urbanapesince we have to rely on the document being the message, and all.16:33
thisfredurbanape: On second reading I'm thinking that yes, it may be the couchish way16:34
thisfredI'm not worried about the upgrade that much, if we can generate the manifest for a new user, we can do it for existing users too, right?16:35
thisfredurbanape: yeah, I think this is a good idea. Possibly even having 1 manifest per folder. In couchdb splitting things up into multiple documents makes them less fragile often16:36
thisfredhmm, I'm not sure I'm getting it yet16:38
thisfredwhat is the manifest?16:38
thisfredurbanape:  Is it not a couchdb document in your vision?16:39
thisfredI would make it one, but rather than have manifest, have a bookmark and a folder record type16:39
thisfredfolder record types, have just one field: contents, which is a list of ids (of folders and bookmarks)16:40
thisfredor have I now unsolved the actual problem?16:40
urbanapethisfred: so, the manifest as originally envisioned is a single JSON doc that represents the entire bookmarks tree, but only in terms of the structure.16:40
urbanapea tree of uuid nodes16:40
thisfredah ok, so I got that right16:40
thisfredhaving multiple folder documents instead, and the tree structure implicit, makes the chance of conflicts smaller16:41
urbanapeI can see that, I guess.16:42
thisfredI'm just thinking out loud, so by no means I'm saying this is the one solution to rule them all and in darkness bind them16:42
urbanapethe problem I uncovered (I think) is that for Bindwood clients, the manifest is useless, but it seems essential for decent responsiveness on the web ui (where we don't want to seek to rev 0 and walk the entire history)16:42
urbanapesure16:42
urbanapethe upgrade or migration is just about the people who've been using it to date. "Blow away your database and start over" is a solution I'd like to avoid.16:44
thisfredurbanape: right, so writing a view that reproduces the tree should not be that hard16:44
thisfredurbanape: right, but since they have a folder structure in their firefox, we can generate the tree from that16:44
thisfredand hopefully not nuke their other clients16:44
urbanapeI think my prediliction had been towards fewer document types in the database: records (bookmarks and folders) and ancillary material (manifests and design views)16:44
urbanapethisfred: yes, but there will need to be a migration step. The structure can always be recreated, so long as they're doing it from the "canonical" location16:45
thisfredI agree with non-proliferation of document types16:45
urbanape(since if you currently use Bindwood, your secondary machines won't necessarily reflect your organization)16:45
urbanapethisfred: and that's where I came up with one JSON doc for the entire manifest tree.16:46
urbanapebut I'm open-minded.16:46
dobeybrb16:46
thisfredurbanape: I would think folders and bookmarks would do it, what does the manifest add that folders can't do? Or do we need a root that isn't a folder?16:46
urbanapeso, in the case of normal Bindwood clients, each maintains its own state of the last known rev it's seen.16:47
thisfredaquarius: feel free to weigh in, since you're quite good at blowing holes in my theories ;)16:47
urbanapethe web ui won't have that luxury (without resorting to HTML storage or something)16:47
urbanapeso we'll want something to short circuit the "go to rev 0 and walk the history to arrange everything as it should be"16:48
thisfredurbanape: but will the web ui need to? the web ui doesn't have the problem that it stores things in two places, couchdb will just *be* it's storage16:48
urbanapewalking all the folders is closer to that in my mind than "get this one document"16:48
thisfredurbanape: so it won't  need to track changes at all16:48
urbanapethisfred: that's true16:48
urbanapewe want our web uis to be responsive and "real time" though, don't we?16:49
thisfredand it may be possible to write a single smart view that gives you the tree16:49
urbanapeI imagined the web ui would also be tracking _changes after it built up the initial view16:49
urbanapebut that would be nicer, too.16:49
thisfredyou mean constant ajax updates? Could work, but it could also just ask the database for the view again16:50
urbanapehm. okay, but moving from the manifest to each folder record maintaining a list of its children still means multiple records getting updated if a bookmark is moved from, say, one folder to another.16:50
urbanaperather than just the bookmark and the manifest being updated.16:50
thisfredurbanape: yes, you'd be updating the two folder documents16:50
thisfredwait, why would you need to update both?16:51
urbanapebecause both of their children lists would change16:51
thisfreddo you have links going both ways?16:51
thisfredno I mean in your scenario16:51
urbanapewant to move this to voice?16:51
thisfredif you move the document from one folder to another, that would only mean an update to the manifest or not?16:52
thisfredurbanape: sure, but in that case I definitely want aquarius in too :)16:52
urbanapein my proposed scenario, moving any bookmark anywhere entails updating two documents: the bookmark itself with its new location (parent uuid and index) and the manifest16:53
aquariushang on, just got off a phone call16:53
thisfredhmm, I would keep the location information in one place only16:53
aquariusgive me five mins to review the scrollback and get tea16:53
thisfredright16:53
thisfredawesome16:53
urbanapethe manifest remains a static document representing the current canonical structure. It would be updated after every add, delete, and move (but not on an internal bookmark change (title, uri, &c))16:53
thisfredright16:53
thisfredso a bookmark document itself would not know from location16:54
thisfredor need to16:54
urbanapewhat you proposed would also update two documents: the old parent and the new parent16:54
thisfredright16:54
urbanapebut not the bookmark itself16:54
thisfredand that's fine16:54
urbanapeyeah.16:54
urbanapeand in the case of simply reordering a folder, only one document16:54
thisfredupdating two documents is nothing. I'm just saying with the manifest it could be one16:54
urbanapeSee, this is what I missed working this out alone.16:55
thisfredbut the benefits of having it be multiple documents outweighs the efficency of updating just one IMO16:55
urbanapeI'm glad I came to my epiphany before I got too much written with JSON diffing libraries, though. Lord what a pain.16:55
urbanapeI'm liking this approach.16:55
urbanapeand we still wouldn't need the manifest, even for the web ui.16:56
thisfredok, good, then there's a chance aquarius won't say bollocks16:56
dobeybbiab, lunch and mobility16:56
urbanapeokay, so, since documents are the change medium16:56
urbanapea bookmark move is represented by (at most) two folder revisions in the _changes feed16:57
urbanapea delete and a create16:57
urbanapeI wonder if we'll want to encapsulate that somehow in a higher-level language.16:57
urbanapethat the client can interpret16:57
thisfredurbanape: actually, two updates (if the folders already exist)16:58
urbanaperight, but only one update if the move was internal to the folder (changing the order of bookmarks)16:58
urbanapeat most, it will ever be two folder updates.16:59
thisfredpseudocode: folder1.contents.remove(docid); folder2.contents.insert_at(position, docid)16:59
thisfredyep16:59
urbanapeyes, but we need to recognize that we're not just deleting docid from folder117:00
urbanapewe're moving it.17:00
urbanapemaybe17:00
thisfredwell, the docid stays the same17:00
urbanapemaybe it doesn't matter that we'd recreate it from scratch with the same docid.17:00
thisfredso we can deduce it, if need be17:00
thisfredif the docids are uuids17:00
urbanapethe order of those events probably matters.17:00
urbanapeoh, duh17:00
urbanapeso the client needs to recognize a move17:01
urbanapeand then it can make the local gesture.17:01
thisfrednot really, because the document isn't modified17:01
thisfred(re order)17:01
thisfredso the worst could happen is: temporarily, it's in two folders, or in none17:01
urbanapeyeah, but there's no semantic way in Firefox to have a bookmark be multi-present17:02
urbanapeand there's already a move API.17:02
rtgznautilus smb sharing tab is called "Share". In case file is shared using Ubuntu One it is not clear how to "unshare" the folder..17:02
urbanapewe need to have a way of saying: "If this rev represents the order of the children changing or if this and the next (or previous) represent a bookmark moving from one folder to another: make the move gesture locally"17:02
rtgzhey, how to unshare the folder from ubuntuone nautilus plugin ?17:03
thisfredurbanape: ah right17:03
thisfredso we need to translate _changes to firefox actions.17:03
urbanapethisfred: which would be easy, if we had that language in a revision annotation17:03
urbanapeyeah17:03
urbanapewhich made me wonder about the field-level granularity in _changes17:03
thisfredsimplest is to do the delete and add17:04
thisfredin that order17:04
thisfredand not worry about using move, unless this breaks firefox in some way17:04
urbanapethe only thing it might break (and upset some power users) is that it might mess up internal accounting for last visited or number of visits, or something.17:05
thisfredurbanape: right. If it does, we should store that information in couchdb as well17:06
thisfred(or perhaps we should do so regardless)17:06
urbanapeyeah, we've not been keep track of it today.17:06
urbanapeto date, rather17:07
urbanapedoes batch updating happen in one revision?17:08
urbanapeor one per item in the batch?17:08
thisfredurbanape: I think in a singe rev17:08
urbanapethen that's the best way!17:09
urbanapebatch PUT the two folders with their newly computed children17:09
urbanapeand make the client recognize two folders changing in one revision as a move.17:09
thisfredurbanape: eh, I mean, a single db sequence number update17:10
thisfredbut that's what you mean to I think17:10
thisfredtoo17:10
urbanapeyeah, but isn't that what you get in the _changes feed?17:10
thisfredright17:10
urbanapesequence updates17:10
urbanapeyeah17:10
urbanapesorry, yeah, in one sequence17:10
thisfredyep, should be able to make that work17:10
urbanapeso, what do you think of my .application_annotations.field_changes idea/17:11
urbanape?17:11
urbanapeso that clients can see which exact fields were updated and dispatch accordingly?17:11
* aquarius catches up, sorta17:14
thisfredI would hesitate adding this. It's hard to get right, and adds a lot of complexity that I'm not sure we absolutely need17:15
urbanapeso, if location is no longer a part of the bookmark record, we could just walk the record on an update and impose everything we find.17:15
thisfredif the documents are more granular, as described above, it would not buy you much anymore for one thing: a change to a folder would always be a change to its contents field17:15
urbanapeor its title17:16
thisfredright17:16
aquariusI have a few thoughts, which you may have already covered17:16
urbanapeyeah, and we can test to see whether it's different17:16
urbanape"has the title changed? No, next."17:16
aquariuswhat happens if you move a bookmark from one folder to another?17:16
aquarius( rtgz: sorry, I know you've asked a load of questions and I haven't responded)17:16
urbanapeaquarius: two documents get updated: the old parent (its children field) and the new parent (its children field)17:16
thisfredpseudocode: folder1.contents.remove(docid); folder2.contents.insert_at(position, docid)17:16
thisfredaquarius: ^^17:17
urbanapeaquarius: we'd do it in one batch PUT17:17
urbanapeand so would show up as a single sequence in _changes.17:17
aquariusand to reconstruct the structure you *have* to walk the folder tree starting from the root?17:17
thisfredaquarius: which can be done from a single view, I'm pretty sure17:17
urbanapeyes, but each folder would always maintain its current set of children.17:17
aquariusthisfred, o rly?17:17
thisfredsure,17:18
thisfredjust output ehh17:18
thisfred(order, id)17:19
aquariushow do you know which folder a document is in?17:19
thisfredfor key folder17:19
thisfredid being the id of the child17:19
urbanapeaquarius: given this approach, why would you need to?17:19
thisfred(id, order) is better for sorting17:19
urbanapeeverything internal to Firefox is addressable by our map of uuid to internal id17:20
aquariusurbanape, you update current-parent-folder and new-parent-folder. how do you know which document current-parent-folder is?17:20
urbanapeENOPARSE17:20
urbanapethisfred: I do think it would be easier to execute this maneuver with a bit of language, though.17:21
aquariusI move a bookmark from folder1 to folder2. You need to update folder1.children to remove bookmark, and update folder2.children to add bookmark, yes? How do you know the couch docid for folder1?17:21
urbanapeit's the _id of folder117:21
aquariusah, couchdoc._id == mozilla.internal_uuid ?17:22
urbanapeyes17:22
thisfredI don't :), since you're introducing a whole new thing, storing "actions" which will need to be processed, removed, and replicated back and forth17:22
aquariusI missed that :)17:22
urbanapethisfred: consider moving a bookmark from front to back: old_f.children = [ a, b, c, d, e, f ] new_f.children = [ f, a, b, c, d, e ]17:23
thisfredurbanape: in the same folder?17:23
urbanapethe index of every child changed, but to do that, all we need to do is make one statement: new_f.move(f, 0)17:23
urbanapeyeah17:23
thisfredok, so does firefox internally use indexes?17:24
urbanapeit's hard to infer that programatically17:24
urbanapeyes17:24
aquariusbecause you don't actually store the indexes explicitly on the document; they're just inherent in the order of the children mergeablelist17:24
aquariusexcept that mergeablelists have an _order17:24
thisfredwell we can wrap that in a little bit of code surely17:24
urbanapeaquarius: but Firefox uses an index when you tell it to move something or insert something somewhere17:24
thisfredaquarius: aha17:24
thisfredurbanape: yeah, we can just use the order in the list as the index17:25
urbanapewhat I'm saying is17:25
aquariusyeah, but your problem is that you don't get change notifications from firefox if a node's index changes as a result of some other change?17:25
thisfredwe have to deduce the old order17:25
aquariuswhy not, when any bookmark changes, just re-serialise its whole containing folder?17:25
thisfredI would vote for that17:25
urbanapenow we're back full circle17:25
urbanapethat's what the manifest was for17:25
urbanapeand did17:25
urbanape(and does)17:26
thisfredurbanape: but the folder documents do that too right?17:26
thisfredjust more atomically17:26
aquarius'cept having it all in one document is an invitation to conflict17:26
urbanapeno, so the current state of things is that bookmarks know their location17:26
aquariusand having it in lots of separate documents makes conflicts less likely17:26
urbanapeand the client exploits that knowledge when moving them in response to revisions17:26
urbanape("aha, this bookmark's new parent and index is x and 0, so I'll make that gesture now. all tidy!")17:27
urbanapeand we'd also update the manifest, which Bindwood would ignore, but something else (like the web UI) could make immediate sense of17:27
rtgzaquarius, no problem, I have a GNote with all my questions and feature requests :)17:27
urbanape"Ah, thank goodness, I don't have to walk the entire history from rev 0!"17:27
thisfredurbanape: I don't think we need to worry about the web ui17:27
urbanapeI agree, now.17:27
thisfredok17:28
thisfredso does that maybe eliminate the need for the manifest entirely?17:28
urbanapemy point with my last "consider moving a bookmark" comment was:17:28
aquariusand bindwood doesn't need the manifest because it already knows what {the current, a recent} state of play is, because it's already got the bookmarks tree; the web ui hasn't?17:28
urbanapewe need to be smart enough to recognize that in an 8-child folder, we don't need to make 8 moves to update each child's index, if we're just moving the last one to the first position17:28
thisfredif the above works, we could also just store parent ids on everything, and have the folders be near empty documents17:28
thisfredah and the index17:29
thisfredand no17:29
urbanapeaquarius: this new folder approach raises some new questions that I thorugh were dealt with when the bookmarks knew their position.17:29
thisfredfolders with a contents field have my vote I think17:29
aquariuswe do need to update them all, though, because either we're using MergeableLists (which have explicit indexes), or we're not (and then you fall prey to the problem that MergeableLists were designed to solve)17:29
urbanapeaquarius: no, you don't17:29
urbanapeso, consider:17:29
urbanapecan we all get on the phone for a sec? my wrists are starting to hurt a bit.17:30
* thisfred fires up skype17:30
urbanapephone/skype/whatnot17:30
aquariusgo for it17:30
urbanapethisfred: I'm urbanape on skype17:31
thisfredI'm gettring wires and pulseaudio soryed17:31
thisfredsorted17:31
urbanapewoohoo17:31
urbanapeI totally get that the .application_annotations.field_changes is untenable.17:50
CardinalFangYeah.  :\17:57
urbanapethe idea that it was per-revision had escaped the others, and aquarius reminded me that not all revisions might be replicated between hosts, so lots of semantics could be lost.17:57
urbanapein any case, we've just hashed out an even simpler solution.17:58
CardinalFangI'm interested in it17:58
urbanapecut out even more cruft.18:02
urbanapeNo need for a manifest at all now.18:02
aquariusurbanape, thisfred: modified tree traversal (or, how to store hierarchy in a DB of records): http://articles.sitepoint.com/article/hierarchical-data-database/218:02
urbanapefolders will be present as records with two fields: title and children, children being an ordered list of child _ids.18:02
urbanapeclient will compute differences in children lists between two revs18:03
thisfredaquarius: urbanape yeah, I don't think there's anything better than for (order = 0; i < len(this.contents); order++) emit((this._id, order) , this.contents[order])18:12
dobeyhi again18:12
dobeyyay speed18:12
thisfreddobey: stay away from that stuff dobey18:12
dobey*this* is high speed internet18:12
thisfredah ok18:12
dobeyhopped over to the office18:13
dobeynow if i just had a working mouse18:14
dobeyguess i should have swapped batteries before flight18:15
dobeyany other branches i need to land before i start getting into coding?18:19
dobeyyes there are18:23
thisfredurbanape: there is one alternative to the folders + bookmarks solution: storing the full path (as a list) and order in each bookmark. This way the folders are completely implied.20:26
thisfredbut this will mean pain when moving folders around. nm20:27
CardinalFangRecompute them.  Easy peasy.20:27
CardinalFangWell, not easy on races.  I keep forgetting there's no atomicity.20:28
CardinalFang(Given my last employer, I shouldn't forget.)20:29
* rtgz offline for openwrt reflash. goodbye cruel world!20:39
thisfredCardinalFang: well, it's not superhard, but it's messier. Maybe that's the couch way though, and there's never the need to compute a tree or a subtree20:43
thisfredCardinalFang: you have bulk updates which are semi-atomic in a very quaint sort of way20:44
urbanapethisfred: yeah, thought of that.20:45
thisfredIn this case a bulk update with all_or_nothing=True would probably work20:45
urbanapeplus, you still need to keep the order (index) somewhere.20:45
thisfredurbanape: ah yes, for the folders20:45
thisfredreally never mind then :)20:45
urbanapeI'll stick with what we hashed out.20:45
urbanapeI think it's very, very elegant.20:45
urbanapeI only feel silly for not having figured it out myself over break.20:46
thisfredI have thought a lot less about the problem, which makes it easier ;)20:47
urbanapeyeah, having all the background context made it hard to see it clearly20:54

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!