00:00:59 doid has quit (Read error: 110 (Connection timed out)) 00:54:23 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 01:36:13 kmacleod, rss issues list? 01:51:53 tansaku2 has quit (Read error: 110 (Connection timed out)) 03:16:17 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 03:40:21 AaronSw has changed the topic to: the device talks to you, is solar powered, and teaches you how to use it to link to the Web. 04:46:58 Bensw|sarasota (nobody@un.impressive.net) has joined #swhack 04:47:45 Bensw|flordia (nobody@un.impressive.net) has joined #swhack 04:47:46 Bensw|sarasota has quit (Remote closed the connection) 04:47:58 hello 04:48:19 hey 04:48:24 why are you in florida? 04:49:10 vacation.. and also to see my granparents 04:49:43 hmm is aaron up? 04:49:51 hi 04:50:07 how're things? 04:50:25 ok 04:51:00 * sbp waves 04:56:06 hello 04:56:06 Bensw|flordia has quit (Remote closed the connection) 04:56:29 * jeremiah points aaron and sbp to doid.com 04:56:31 he wrote about us 04:56:46 yep, I read it :-) 04:58:46 AaronSw: working on that networking code, there's a few funny things I have to deal with, like when you make a server with the xmlrpc thing it won't let you pass the object used as the server arguments (I don't think) which makes it a pain to set the ID of the servers 04:59:22 i don't follow 04:59:56 n/m, I'll explain it more in depth if I can't figure it out soon 05:00:01 Heh: "Damn. Lost all my trading profits." 05:00:08 trading profits? 05:00:13 doid... 05:00:16 oh 05:00:59 jer, it's pretty simple: you create a server class that takes the args, converts serverid into a proxy object and then passes it to my code, then you convert the objects it returns into servids and return it 05:01:10 that's the idea, anyway 05:02:19 hmm 05:03:11 what do you mean 'converts serverid into a proxy object' 05:03:50 well you have to make two objects, right? one to take outgoing stuff and one to do ingoing stuff. 05:03:55 the proxy is the outgoing stuff 05:04:20 hmm 05:04:23 so that instead of dealing with other Nodes, it deals with proxies which relay things to other servers 05:04:24 oh, proxys, gotcha 05:04:40 wait, one second, I'm gonna reread what you wrote 05:04:51 Node -> [proxy, proxy, proxy ...] <----> [server, server, server, ...] -> Node 05:04:57 logster, pointer 05:05:03 See http://blogspace.com/swhack/chatlogs/2002-02-17#T05-04-57 05:05:04 logster, pointer? 05:05:04 See http://blogspace.com/swhack/chatlogs/2002-02-17#T05-05-04 05:05:04 pff 05:05:11 oh, so we can use multiple protocols, not just xmlrpc 05:05:19 gotcha 05:05:25 that'd be good too 05:05:36 ok 05:14:37 is there some special plex protocol of text here? I don't see hwy we need all these server objects and ids and stuff, or maybe I'm very, very confused 05:15:21 hmm 05:15:25 one sec 05:35:19 Gotta run 05:35:23 well how were you going to do it, jer? 05:35:25 c'ya sbp 05:41:47 I was going to just let xmlrpc handle it, but then i realized 05:41:51 that would bind us to python 05:41:58 i didn't realize ALL that node returns is objects 05:42:02 Node the class, that is 05:42:06 so now it's simpler 05:42:32 it only returns objects? hmm. 05:42:37 most of the time it does 05:43:32 mind if I make the __repr__ method public? 05:43:44 what for? 05:43:55 you can just do `object` in python 05:44:16 wait, is __repr__ a special python method? 05:44:19 sorry, didn't know about that 05:44:23 I'm a bit tired right now too 05:44:30 yeah. __foo__ is always a special python method 05:44:45 ok 05:44:48 good to know 06:12:06 AaronSw: only functions they'll really need to access are getPred, getSucc, getClosestFinger and join, right? 06:12:11 s/functions/methods of Node 06:12:39 probably 06:12:42 ok 06:13:19 wait, join shouldn't be public 06:13:21 I don't think... 06:13:38 yeah. 06:18:21 is the finger table supposed to hold the ip and port for the nodes? 06:18:36 the finger table holds node objects 06:18:52 the objects should have ip and port values 06:19:04 what does the id do then 06:19:22 chord uses the id to work 06:20:00 so if I'm getting a node representation like back from a server, how do i connect to that node? 06:20:36 this node representation is returned from chord? 06:20:53 well, that's what we have now for `object` 06:21:12 for the Node object 06:21:36 right 06:21:49 but chord only has that object because you've given that to it 06:22:08 so give it your proxy object, which is a dummy and has i[ and port properties 06:22:30 hmm 06:22:46 so format should be 06:22:47 ? 06:23:03 why are you messing with repr at all? 06:23:17 * jeremiah shoots aaron in the head 06:23:24 * AaronSw shoots jeremiah 06:23:24 I thought you told me too... 06:23:26 you have a node object. use node.port and node.ip 06:23:34 but the goddamn node doesn't have those set 06:23:36 :) 06:23:39 sorry 06:23:41 well then set them! 06:23:44 hmm 06:23:58 wait, why do you need to know its ip and port? 06:24:02 you shouldn't have to 06:24:04 well we are on a network 06:24:23 yeah, you're supposed to be hiding that fact 06:24:32 xmlrpc needs to know it though 06:24:42 only for its own objects 06:24:54 right 06:25:00 but it will be calling a lot on a Node object 06:25:01 like this: 06:25:03 I'm a node 06:25:21 I do aaronsw.getPred() 06:25:29 it goes through the aaronsw node proxy 06:25:42 and asks the aaronsw node for it's predecessor 06:25:59 aaronsw returns it, but doesn't have the ip attached, it just gives back 06:26:05 how should the proxy figure out the id? 06:26:14 ah, i see. 06:26:23 or will the node that aaronsw returns really just be a proxy anyways 06:26:58 ok, so you [do something creative] so that the xmlrpc code changes a node object into a (host, port) tuple. 06:27:13 creative things include: changing the xml-rpc serialization code 06:27:26 writing dummy functions to handle each function 06:27:43 hmm 06:28:06 right now, is there anywhere in any of your code that stores ips and ports? 06:28:13 I don't know if we clarified that 06:28:16 no. and it shouldn't. 06:28:19 ok 06:28:20 good 06:29:03 do you want to store these values on the computer at all, or should it just ask the plex for them? 06:29:13 like a triple query 06:29:26 that'd be circular. your code needs to store them 06:29:38 ok 06:29:49 it'd be circular in the beginning, not once we have several nodes running 06:30:02 yeah... but for now... 06:30:06 ok 06:31:09 in the end, I think we should keep most of that in the plex, then when a node starts up, it takes a list of all the old ips and ports from the last time it was running (or if it's the first time, a list of bootstrap ones of nodes that are almost always on) and runs through them to connect 06:31:25 but I figure you thought that anyways 06:31:44 yeah, that would be cool. 06:31:59 but it still should cache host,ip 06:32:03 yeah 06:32:07 gonna make a bsddb for that 06:32:18 because, afterall, what is bsddb good for 06:32:27 i don't think it's worth it 06:32:49 well, we're going to want to keep it between starts 06:32:54 oh, i see 06:32:58 for bootstraping to the plex the next time 06:33:04 then once we're connected we can flush it 06:33:09 might want to just pickle things 06:33:16 hmm, ok 06:55:20 wow, that's pretty cool that you can create your own numbers in python (with the __add__ , __sub__ stuff) 06:55:29 Yeah, it's lots of fun. 06:55:33 have you ever used it? 06:55:46 some of it... don't think i used number stuff 06:55:50 ok 06:56:06 how do you usually test to see if a file exists? I'm sure there must be some easy way to do it and I'm not coming across it 06:56:32 in py? it's like os.isfile or something 06:57:23 thanks 07:10:39 * jeremiah is back (gone 32:06:22) 07:10:41 * jeremiah is away: I'm busy 07:12:16 tansaku2 has quit (Read error: 110 (Connection timed out)) 08:33:56 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 10:52:29 tansaku2 has quit (Read error: 110 (Connection timed out)) 11:36:30 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 12:53:06 tansaku2 has quit (Read error: 110 (Connection timed out)) 13:26:32 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 14:20:10 BenSw|sarasota (nobody@un.impressive.net) has joined #swhack 14:20:42 hello 14:24:28 hey 14:26:30 what's up BenSw|sarasota? 14:27:23 nothing much 14:27:38 heh it seems that aarons up 14:30:49 welll gotta go bye everyone 14:31:17 later 14:31:18 BenSw|sarasota has quit (Remote closed the connection) 14:40:11 tansaku2 has quit (Read error: 110 (Connection timed out)) 15:52:34 @ http://www.eff.org/IP/P2P/Napster/20010309_p2p_faq.html 15:52:46 A: http://www.eff.org/IP/P2P/Napster/20010309_p2p_faq.html from AaronSw 15:52:54 A:|IAAL: P2P Legality FAQ 15:52:55 titled item A 15:53:50 A::Auto-update may increase copyright liability, and developers can be liable for only distributing code (and not even running it yourself). 15:53:51 commented item A 15:54:41 A::My question to Fred: What protections do minors have? 15:54:43 commented item A 15:56:02 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 16:14:35 * kmacleod is beginning to dislike either Gnome terminal or a newer version of ircii. one of them is preventing me from seeing any history scrolled off the screen 16:18:05 ick 16:33:15 tansaku2 has quit (Read error: 110 (Connection timed out)) 16:35:55 aargh! Zope is throwing BASE HREFs in my pages. 16:36:11 does it think i'm some sort of incompetent idiot that doesn't know how to link? 16:46:36 Marc Stiegler: "For a guy doing bidirectional typed links, the E language should be the dream machine for development; your project is, after all, an excellent example of the kind of application for which E is being developed..." 17:57:16 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 18:12:21 * AaronSw is out for lunch 19:11:19 tansaku2 has quit (Read error: 110 (Connection timed out)) 19:39:37 hello 19:39:39 * jeremiah is back (gone 12:28:58) 20:08:29 Google wouldn't index the #swhack stuff, so I sent a mail to www-archive 20:08:41 http://lists.w3.org/Archives/Public/www-archive/2002Feb/0026 20:10:07 .google device talks solar powered teaches link Web 20:10:08 device talks solar powered teaches link Web: http://www.skyhunter.com/marcs/finalexam.html 20:10:25 .http://www.skyhunter.com/marcs/finalexam.html 20:10:26 Error 404 Not found Error 404 Not found The host name in the URL you have requested does not match any virtual server currently running. This may be because you entered the host name incorrectly, or because the necessary server alias has not been set up. Powered by Zeus Technology 20:11:06 * sbp remembers the article anyway 20:11:23 ah: http://web.archive.org/web/20020206214301/http://www.skyhunter.com/marcs/finalexam.html 20:33:59 tansaku2 (~sam@h134-046.tokyu-net.catv.ne.jp) has joined #swhack 20:37:28 hello 20:37:32 hey jeremiah 20:37:47 sbp, huh? "Google wouldn't index the #swhack stuff"? 20:38:03 it hadn't indexed anyo of the chatlogs since last december 20:38:14 hm, i blame jillzilla 20:38:17 ;-) 20:38:22 :-) 20:38:30 funny subject 20:46:52 it's a quote form you 20:46:55 ugh: from 20:47:03 Ah, heh. 20:47:22 and it refers to the Googlebot, when it decides to index the post... 20:56:21 wmf (wesf@cs242733-11.austin.rr.com) has joined #swhack 20:56:26 @ http://regexps.com/src/docs.d/hackerlab/html/on-hacking.html 20:56:36 B: http://regexps.com/src/docs.d/hackerlab/html/on-hacking.html from wmf 21:15:18 cool domain 21:15:58 B:|Hackerlab at regexps.com: On Hacking 21:15:59 titled item B 22:32:36 ping - Aaron? 22:32:41 I just wrote a little program that can convert Plex Nodes and Stores into Eep Articles and lists, and vice versa 22:32:44 pong 22:32:47 cool! 22:32:52 but there's a weird bug with PlexRDF 22:33:01 here's what I'm doing to debug it:- 22:33:09 for triple in [rdf.node(), rdf.node('blargh:'), rdf.node()]: 22:33:09 if hasattr(triple, 'ruid'): print str(triple)+' '+triple.ruid 22:33:09 else: print str(triple) 22:33:28 now, usually, I get this (incorrect) print out:- 22:33:33 1cgChwAnQ4e6 22:33:33 22:33:33 1cgChwAnQ4e6 22:33:41 but occasionally I get the correct version:- 22:33:48 r8YEpfnrPLg4 22:33:48 22:33:49 7FhhdE8zFHxb 22:33:56 hmm. 22:34:15 I can't believe that the forces of randomnivity are coming up with so many conflicting RUIDs :-) 22:34:33 Hmm. 22:34:36 otherwise, the transition from Eep to Plex and vice versa is remarkably smooth 22:34:42 I can round trip documents and stores 22:34:49 (recursively, too) 22:35:18 the funny thing is, the nodes are different... but the RUIDs are the same 22:36:49 wow, this is even weirder:- 22:36:50 Eep => Plex: 22:36:50 _:ruidETUdOVGp8iN3 <#canBeUsedWith> _:ruidETUdOVGp8iN3 . 22:36:50 _:ruidETUdOVGp8iN3 <#label> "Plex" . 22:36:50 _:ruidkfLoc7RYjeZU <#label> "Eep" . 22:37:04 hmm. 22:37:12 that's an example of what you get when you do NTriples => Eep => Plex => NTriples 22:37:19 original:- 22:37:19 _:Plex <#canBeUsedWith> _:Eep . 22:37:19 _:Plex <#label> "Plex" . 22:37:19 _:Eep <#label> "Eep" . 22:37:29 so there, the bNodes conflict, and they don't conflict! 22:37:36 are you doing quantum computing, or something? 22:37:50 Let me try it on my copy. 22:37:54 O.K. 22:38:07 perhaps I should download the latest version 22:38:22 [although I only downloaded it recently] 22:38:23 # don't want to give away my secret rng 22:38:32 perhaps i should upload the latest version 22:38:38 good idea 22:39:08 * sbp finds the tarball: http://cvs.plexdev.org/viewcvs/viewcvs.cgi/plex/plex/plexrdf/plexrdf.tar.gz?tarball=1 22:40:03 I thought: there's no way that I'm going to port all of Eep to PlexRDF, and there's no way that you're going to port PlexRDF to Eep. So the best thing to do is create a bride, and then we're both happy: we can work with the APIs that are most natural to us 22:40:15 s/bride/bridge/ 22:40:30 i never get that problem 22:40:41 I should download the latest version 22:40:49 can you check it in? 22:40:57 wmf has left #swhack 22:41:08 ugh. Didn't notice he was here 22:43:34 * sbp goes through the CVS tree 22:44:12 3 months? wow 22:44:33 hold on, about to commit 22:44:55 cool 22:44:59 ok 22:45:33 just rdfapi and rdfapi-tests? 22:45:43 yeah, those are the only things that seemed relevant 22:46:01 oh, wait 22:46:22 ok, another checkin of ruid and bases 22:47:50 bases isn't showing up 22:47:51 on the eep<->plexrdf bridge thing: this is not a long-term solution 22:48:08 bases has been moved to utils/ 22:48:12 ah 22:50:10 ok, the only thing uncomitted is the crypto stuff 22:50:53 Hmm... import plexrdf.rdfapi as rdf doesn't work anymore 22:51:07 huh? 22:51:22 why not? 22:51:22 ah, I've got to get utils... ugh 22:53:03 Hmm... 22:53:04 raise InputError, value 22:53:04 Must be a u'literal' 'uri' or Node(): data:,World%20Wide%20Web%20Consortium%20%28W3C%29 22:53:11 but it is a URI 22:54:49 I think it's a problem in PlexRDF again 22:55:00 File "eeplex.py", line 57, in test 22:55:01 u"World Wide Web Consortium (W3C)") 22:55:01 File "plexrdf/rdfapi.py", line 114, in triple 22:55:01 result = Triple(self, s, p, o) 22:55:01 File "plexrdf/rdfapi.py", line 84, in __init__ 22:55:01 self.object = node(o) 22:55:02 File "plexrdf/rdfapi.py", line 66, in node 22:55:04 raise InputError, value 22:58:04 funny: I dunno what's wrong with it. It should convert the u'' string into a URI (as it did), and that should be a '' string 23:01:58 hmm 23:02:09 do the rdfapi-tests work? 23:02:25 nop 23:02:29 s/nop/nope/ 23:02:35 raise InputError, value 23:02:35 Must be a u'literal' 'uri' or Node(): data:,World%20Wide%20Web%20Consortium%20%28W3C%29 23:10:08 oh: it didn't convert it out of unicode: 23:11:07 ah 23:11:51 but I don't know why :-) 23:12:20 * AaronSw commits fix 23:12:41 ah: return str('data:,' + urllib.quote(value)) 23:14:20 argh: AttributeError: Store instance has no attribute 'tripleList' 23:15:20 ooh! you fixed __repr__. Even better 23:16:13 File "plexrdf/ntriples.py", line 81, in serialize 23:16:13 for t in store.tripleList: 23:16:13 AttributeError: Store instance has no attribute 'tripleList' 23:17:05 hm 23:17:05 fixed on my local copy (you need to fix it your end too) 23:17:11 how do i fix it? 23:17:13 but (ugh) it still repeats the nodes 23:17:18 fix: for t in store: 23:17:38 maybe your rng is bum 23:17:56 pardon? 23:18:57 rng = random number generator 23:19:32 well, 'tis Python 2.2 23:19:41 $ python -V 23:19:41 Python 2.2 23:19:48 same here 23:19:58 and RUID uses "time" anyway 23:20:09 oh, maybe your clock is bad. 23:21:04 $ u timenow; echo ''; u timenow 23:21:04 20020217-232118 23:21:04 20020217-232119 23:21:13 seems alright 23:22:00 try running ruid three times in a row 23:23:39 ah, you're right:- 23:24:07 CJG6lRcGgzvJ 23:24:07 CJG6lRcGgzvJ 23:24:07 CJG6lRcGgzvJ 23:24:18 heh 23:24:33 NSRUID 23:25:44 "Note that even though the time is always returned as a floating point number, not all systems provide time with a better precision than 1 second." - \Python22\Doc\lib\module-time.html 23:28:24 it still should use a random number 23:29:21 Hmm... Well, I do: ''.join([string.lowercase[random.randrange(0, 25)] for x in xrange(8)]) 23:29:51 and it works. I'm not sure why RUID is borked - it uses the same module 23:30:15 that is weird 23:30:43 oh. you're seeding it with the same thing each time. Pff! 23:30:59 i'm seeding it with time 23:31:08 yes, but my time is borked 23:31:16 ah. 23:35:51 I could just add random.randrange(0, 5000) onto it or something 23:36:13 sorry, i'm not feeling well enough to fix this now 23:36:30 in RUID: s = random.randrange(0, 100) 23:36:30 eek, you're feeling ill? 23:36:44 i guess i should remove the seeding 23:36:49 yeah, i've been feeling sorta sick all day 23:36:54 no worries 23:36:56 [ooh, that fixed it] 23:37:05 perhaps you're overworked 23:38:51 maybe... 23:39:44 wow, it still collided!:- 23:39:45 _:ruidiVSB70vNj5ZW . 23:39:45 ?ruidiVSB70vNj5ZW . 23:39:53 hmm 23:39:57 I think that was a fluke though: it has a 1 in 100 chance of failing 23:40:09 sbp, just remove the seed lines 23:40:48 nah, that didn't work 23:41:17 why? works on my machine 23:41:29 just changing it to 100 isn't any better 23:41:33 it's worse 23:42:04 I now have:- 23:42:05 [[[ 23:42:06 s1 = random.randrange(0, 100) 23:42:06 for i in range(20): s1 *= time() 23:42:06 s2 = random.randrange(0, 100) 23:42:06 for i in range(20): s2 *= time() 23:42:07 r.seed(s1+s2) 23:42:09 ]]] 23:42:37 which works, but it's not perfect 23:43:04 just remove the seed code 23:43:11 gotta run: dinner 23:43:25 O.K. 23:43:37 I did remove the seed code, and it didn't work. I'll continue hacking it 23:47:58 here we go:- 23:47:58 chars = string.lowercase+string.uppercase+string.digits 23:47:59 return ''.join([chars[random.randrange(0, 61)] 23:47:59 for x in xrange(10)]) 23:48:27 gives 10^62 variations. That should do 23:51:27 er... 62^10, rather 23:51:47 heh. Just a bit different. But still 839,299,365,868,340,224 23:55:56 N.B. It didn't work when I removed the seed code because it still relies upon the date