00:05:37 -!- atsampso1 has changed nick to atsampson. 00:12:38 -!- Judofyr has quit. 00:24:31 -!- Tritonio_ has quit (Remote closed the connection). 00:44:34 -!- Tritonio_ has joined. 00:48:37 -!- jix has quit ("This computer has gone to sleep"). 00:53:35 -!- carl has joined. 01:08:38 -!- tola_ has quit. 01:13:19 -!- tola_ has joined. 01:22:45 -!- carl has quit (Read error: 110 (Connection timed out)). 01:32:14 -!- tola_ has quit. 02:10:04 -!- ehird_ has quit ("This computer has gone to sleep"). 02:10:04 -!- ehird has quit. 02:44:05 -!- Overand_ has joined. 02:45:17 -!- Overand has quit (Read error: 104 (Connection reset by peer)). 02:45:24 -!- Overand_ has changed nick to Overand. 03:14:57 -!- adu has joined. 03:19:17 -!- GreaseMonkey has joined. 03:29:15 -!- adu has left (?). 04:30:45 bed-time 04:49:08 * pikhq is curious: how many people here went to their high school prom? 04:52:28 i didn't. 04:53:00 * pikhq is going to his senior prom. w00ts. 04:53:15 (and went to his junior prom) 05:06:03 LOOOOSER 05:06:16 GregorR: No, a loser goes to prom without a date. 05:06:29 I had a date the first time, and I have a girlfriend now. 05:18:32 I'm back 05:27:22 I went to my senior prom. I was glad I went at least once, I guess. 05:36:16 Congrats: you're ahead of the average computer geek. 05:37:54 * pikhq notes that this year, prom ought to be cheaper, by merit of *owning* a tux. . . 05:38:52 I went with a friend, but I did have a date (and she was pretty cute, too.) 05:40:56 overall, I'd say it was a fun experience, but not really my style. I'm not big on parties. 05:54:52 * Sgeo went to his high school prom 05:55:00 Without a date :( 05:55:40 I did ask a girl if she would go to the prom with me. She said something about how she wasn't sure if she was going :( 05:55:45 She did end up going though 05:56:38 ouch, yeah that's something like what happened with the first girl I asked. 05:56:52 but, nothing ventured, nothing gained 05:57:16 I kept wondering if I should keep waiting for her to get back to me 06:06:01 The girl I asked this year was apparently almost ready to ask *me*. XD 06:50:11 -!- Sgeo has quit ("Ex-Chat"). 06:56:27 welcome to #esoteric-i-had-more-sex-in-high-school-than-you! 06:57:25 lament: Some people don't have a "alright, I'll date, wait a bit fuck, break up, repeat" attitude with relationships. 06:58:08 pikhq: some people commit suicide due to unrequited love 06:58:18 I, however, agree with lament in the sense that this is bordering on becoming a pissing contest. As they say on somethingawful, "MY GIRLFRIEND" 06:58:57 RodgerTheGreat: It had been done with for almost an hour when he brought it back up. :p 06:59:04 if you have a happy relationship, good for you. Not everyone needs to hear about it. 06:59:16 pikhq: That's what she said. 06:59:27 GregorR: Grrr. 06:59:31 * GregorR takes a bow. 06:59:42 Now you just reminded me of my Japanese teacher saying that in Japanese. 07:00:05 Needless to say, nobody was expecting it. 07:00:51 RodgerTheGreat: BTW, it's not so much a pissing contest as it is a dick-measuring contest. :p 07:01:27 an inability to interpret straightforward metaphor and common figures of speech is not a virtue 07:02:03 pikhq: that's what she said. 07:02:12 lament: ... in bed. 07:02:29 Anyways, this has now degenerated into a series of cliches. 07:02:31 ... in the type system 07:02:38 Hmm. 07:02:46 A type system based on common cliches? 07:03:44 cliches are memetic macros, serving to obviate active thought. 07:03:48 discuss. 07:04:01 Kanojou ha sou itta. 07:04:06 (that's what she said.) 07:04:41 palpable irony 07:04:42 RodgerTheGreat: TAKE OFF EVERY ZIG. MOVE ZIG. 07:04:43 Anyways, yes, that much is obvious. 07:04:59 PLEASE TAKE OFF EVERY ZIG ... IN BED 07:05:08 In fact, arguably, it is exactly the same in purpose, if not in form, as extensive psuedointellectualism. 07:05:22 (as most commonly seen in Basketweaving Monthly. ;p) 07:05:45 what's interesting, though, is what seems to be an inherent tendency toward cliched behavior and thought patterns 07:06:19 if this is the case, what drives the impetus for novel behavior, and what can we draw from this as a whole? 07:06:20 It's almost a herd mentality. 07:06:59 pikhq: I would argue that it *is* a herd mentality. Humans are significantly more instinctual creatures than we like to think. 07:07:24 The impetus for novel behavior is, surely, a moderately rare, and therefore not terribly succesful, evolutionary strategy. 07:07:47 Sure, we see the rare genius: eccentric and brilliant. 07:07:52 How many of them breed? 07:08:26 (answer: not as many as those who follow the herding instincts of most of homo) 07:08:43 Is meme-forging a trait that exists in all humans, and if so does this tendency come in many weights? Is there a genetic predisposition, a shared neurological background? 07:08:56 geniuses aren't a race, though. Genius is not genetic. 07:09:00 Or perhaps it's culturally based? 07:09:04 so it doesn't matter if they breed or not 07:09:05 lament: It could be a rare genetic mutation. 07:09:16 their children are normal. 07:09:31 Or it could be a damned rare application of persperation. 07:09:45 Is it even important that these individuals reproduce? Perhaps the ideas they generate, memetic children so to speak, represent as great a degree of success as biological reproduction? 07:09:46 I don't think "genius" is well-defined enough that it can be associated with any particular genetic factor, upbringing, etc, etc. 07:10:01 Which would indicate that the lack of novel behavior is more of a cultural detail. 07:10:12 "exceptionally talented people" is a pretty well-defined group 07:10:24 A tendency that requires a specific environment to blossom? 07:10:35 RodgerTheGreat: Perhaps. 07:10:37 you tend to notice when somebody's exceptionally talented (so they become world-class at some endeavour) 07:14:31 well, good night everyone 07:14:45 -!- RodgerTheGreat has quit. 07:51:49 -!- oklopol has joined. 07:54:26 http://pastebin.com/m5c392293 <<< rational class with just multiplication implemented in oklotalk-- 07:54:46 where oklotalk-- is the name for oklotalk with this retarded syntax 07:55:20 if anyone is at all interested, i would, naturally, love to explain 07:56:04 multiplies 4/9 by 3/2 and simplifies to 2/3 07:57:01 i'm surprised i'm actually capable of keeping on a project for over a day when i have a deadline 07:57:14 but i do like the results 07:57:19 now kebab -> 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:59:16 -!- oklopol has quit (Read error: 113 (No route to host)). 09:02:53 -!- oklopol has joined. 10:02:20 http://www.vjn.fi/pb/p441122612.txt pretty much complete 10:02:39 although i'm sure gcd fails on negatives, since i don't even know what it should return :P 10:02:48 to make the numbers work that is 10:03:16 perhaps there is a simple way, haven't given any thought to it, because this is just a small example of making new types in oklotalk 10:04:03 why is everyone so quiet now that THERE IS SOMETHING INTERESTING GOING ON FOR ONCE! :D 10:04:15 i know, i know, no one cares 10:04:24 i should eat something 10:04:31 the fucking kebab place was closed :< 10:13:02 Maybe you should then use a normal kebab place instead of a... uh, procreation-oriented one. 10:14:31 BUG ... SO ... STUPID ... 10:14:36 CAN'T ... BREATHE ... 10:14:44 well fucking kebab was really en euphemism for hot gay love. 10:15:07 Let's say you have a byte, arranged something like this: aaaaabbb, and you wanted to get just the 'a' part, multiplied by 4. 10:15:18 -!- ais523 has joined. 10:15:20 yarr 10:15:28 so you fibble a few rotations 10:15:34 If you're an idiot, like Gregor is, you would simply shift it right by 1, leaving some random-arsed part of the 'b' part still in tact BECAUSE YOU'D BE A DUMBFUCK 10:15:37 or do an andance 10:15:44 :D 10:15:53 haha lol, let's all point at GregorR and laugh 10:15:55 So, uh, JSMIPS works much better now >_> 10:16:13 * oklopol would never make such a dumb mistake 10:16:19 And it is beyond shocking how much actually worked with that bug in place. 10:16:35 btw. spent 3 hours yesterday just to do a add->try_add fix. 10:16:46 i mean, changed the variable add to try_add. 10:17:03 In what? 10:17:07 my oklotalk interp 10:17:10 Ah 10:17:17 And couldn't quite find every last instance? :P 10:17:22 these adds copy around function namespaces 10:17:28 (Shouldn't smart compilers be able to tell you these things?!) 10:17:58 and in almost every case, add works, but in some corner cases, it overwrites some variables with old ones, when you create an inner function in another function 10:17:58 -!- GreaseMonkey has quit ("nighty"). 10:18:17 i kinda assumed after sk worked, scoping worked... but noooo 10:18:36 sk doesn't really test dynamic scoping though, i had separate tests for it 10:18:52 oklotalk has both <3 10:19:26 hehe, pressed on another channel's name by accident, for a second i though saying that got me kicked :P 10:19:41 "both? GET THE FUCK OUTTA HERE, SICKO" 10:19:48 but i guess it's not that weird 10:20:00 uhhh i need to pee, god i'm talkative today 10:20:01 -> 10:33:27 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 10:35:19 -!- oklopol has joined. 10:36:57 -!- oklofok has joined. 10:40:36 GregorR: what was the bug? 10:51:22 ais523: he told already 10:51:33 -!- Judofyr has joined. 10:51:42 oklofok: I only caught the second half of the explanation 10:51:56 GregorR: Let's say you have a byte, arranged something like this: aaaaabbb, and you wanted to get just the 'a' part, multiplied by 4. 10:52:03 sorry, i didn't see you join 10:52:10 this is what you missed 10:55:35 -!- oklopol has quit (Read error: 110 (Connection timed out)). 12:06:01 '.1$#248'~'#0$#252' 12:06:15 (translation of that operation into INTERCAL, hopefully correct) 12:22:56 -!- oklopol has joined. 12:23:24 -!- oklofok has quit (Read error: 113 (No route to host)). 12:55:29 -!- ais523 has quit (Read error: 110 (Connection timed out)). 13:19:39 -!- ais523 has joined. 14:19:33 -!- Iskr_ has joined. 14:20:54 -!- Iskr has quit (Nick collision from services.). 14:21:02 -!- Iskr_ has changed nick to Iskr. 14:38:54 -!- Tritonio_ has quit (Remote closed the connection). 15:13:14 -!- vixey` has joined. 15:25:08 GregorR: 'Nice'. 16:10:16 -!- ehird_ has joined. 16:39:14 doot to doot 16:39:57 hmmmmmmmmmmmm Hi ehird 16:42:36 welcome to #esoteric-i-had-more-sex-in-high-school-than-you! 16:42:53 you can't join 16:42:54 :( 16:45:09 pfft i had more than lament 16:46:35 was this during study time? 16:47:25 study time? 16:47:58 -!- RodgerTheGreat has joined. 16:51:24 -!- vixey` has quit ("Leaving"). 16:51:58 -!- vixey has joined. 17:25:46 ais523: I had an idea for an operator like and/or 17:25:48 'but' 17:25:59 ehird_: there's a BUT in TriINTERCAL 17:26:13 search the logs for its definition (I discussed it recently), or look at the C-INTERCAL manual 17:26:23 ais523: i'm talking about a logical operator though 17:26:24 (it exists in CLC-INTERCAL too, but its docs say 'see the C-INTERCAL manual') 17:26:26 i guess: 17:26:27 ehird_: it is 17:26:32 TRUE but TRUE = FALSE 17:26:33 it can be used like AND or OR 17:26:38 FALSE but TRUE = TRUE 17:26:41 TRUE but FALSE = FALSE 17:26:44 but it works on ternary logic levels 17:26:45 FALSE but FALSE = FALSE 17:26:56 ehird_: you've just defined not-reverse-implies 17:27:10 ais523: well, that's too wordy. I call it 'but' 17:27:15 ehird_: how is that not xor? 17:27:25 RodgerTheGreat: TRUE xor FALSE = TRUE 17:27:26 er, wait 17:27:28 TRUE but FALSE = FALSE 17:27:32 yeah, I missed one 17:27:37 hmm 17:27:41 SHOULD 'true but false' be false? 17:27:45 it seems so 17:28:03 ehird_: just use the INTERCAL definition 17:28:11 ais523: naww, i want a binary definition 17:28:25 ehird_: stop being so attached to binary! 17:28:36 ternary is the NUMBER SYSTEM of the FUTURE 17:28:41 bah 17:28:46 i want 17:28:48 'if not x but y' 17:28:52 to do the intuitive 17:29:34 *Main> not test `but` test1 17:29:34 False 17:29:35 darn 17:30:31 but :: Bool -> Bool -> Bool 17:30:31 True `but` True = True 17:30:31 True `but` False = False 17:30:31 False `but` True = False 17:30:31 False `but` False = False 17:30:49 and 17:30:50 ehird_: `but` is just `and` in the not a but b situation 17:30:59 yes, that is true 17:31:00 i guess 17:31:01 :( 17:31:06 there's no new operators under the sun 17:31:16 sure there ae 17:31:16 just ones that don't have common names 17:31:17 are 17:31:20 ehird_: crz was pretty weird 17:31:29 (the only logical operation available in Malbolge) 17:31:34 there's 32 of them 17:31:38 there are exactly 16 binary logical operators 17:31:40 anyway, the problem with but is it's not purely a logical operator, it has expectancy integrated 17:31:51 and expectancy doesn't occur in programming languages 17:32:06 vixey: 2^4 17:32:39 RodgerTheGreat: 2^4 == 6 in C 17:33:00 that's because in C, a carat has nothing to do with powering 17:33:16 RodgerTheGreat: i'm sure ais523 didn't know that :D 17:33:27 xor is, conveniently, binary addition without carries 17:33:36 no, xor is subtract-without-borrow 17:33:41 add-without-carry is sharkfin 17:33:46 it's just that they happen to be the same in base 2 17:33:50 ... 17:33:54 :O 17:34:04 ooh, wait a second.. 17:34:23 oklopol: what was your 'natural language OR' again? 17:34:25 NMOR or something 17:34:37 what 17:34:37 it was 'exclusive maybe or' or something lik ethat 17:34:48 oklopol: you said it a while back 17:34:48 i'm not sure what you are referring to 17:34:54 I conclude that C's ^ is actually sharkfin, because it uses the same character as INTERCAL's sharkfin 17:35:02 but C only works in binary, so it's hard to tell 17:35:03 hmm 17:35:05 did i now 17:35:10 I guess that makes as much sense as anything 17:35:10 you said that natural language's "OR" was not the OR in programming languages 17:35:12 which is obvious 17:35:17 you said it was NMOR, or something like that 17:35:25 which was "Exclusive maybe or", or something like that 17:35:55 i don't know what you mean, sorry :D 17:36:18 what's "a while back"? 17:36:26 like 17:36:28 a few months 17:36:54 i was thinking i'd implement a natural language or in oklotalk, though, for instance (4 or 7) + 2 == 6 ==> true 17:37:17 this needs to be done in a dirty fashion, though, because oklotalk is a dirty language. 17:37:28 meaning it doesn't work 100% 17:38:00 once i do state lists, this should be possible, but that's not for this implementatino 17:38:04 implementation 17:38:06 oklopol: oh that's easy 17:38:09 that's like amb 17:38:18 ehird_: show it to me in a language 17:38:27 x = amb(4,7); if (x+2 == 6) { print("yay"); } else { amb(); } 17:38:35 'yay' will be printed 17:38:38 the definition of or 17:38:53 oklopol: well, its isomorphic to 'amb' 17:38:53 http://www.randomhacks.net/articles/2005/10/11/amb-operator 17:38:55 DO .1 <- #4 MAYBE DON'T .1 <- #7 DO .2 <- #2 DO (1000) NEXT DO ABSTAIN '.3~.3'~#1 FROM (1) (1) DO GO BACK DO GO AHEAD 17:38:57 there is an implementation 17:38:58 its ruby 17:39:00 but its very clear 17:39:02 see, it's possible in INTERCAL too 17:39:11 oklopol: it uses callcc, though, so make sure you understand that ;) 17:39:17 ais523: is that using the continuation lib? 17:39:22 ehird_: no 17:39:27 it's using MAYBE/GO BACK/GO AHEAD 17:39:32 Backtracking INTERCAL 17:39:35 oklopol: but yeah, http://www.randomhacks.net/articles/2005/10/11/amb-operator. it includes a simple explanation of it and a simple implementation 17:39:40 ehird_: i know all this, naturally, that doesn't necessarily make implementing or trivial 17:39:48 oklopol: you know amb? 17:39:48 well 17:39:52 you can implement or kind of well 17:39:55 if you can overload == 17:39:57 and + 17:40:05 just make the + etc provide a temp object 17:40:06 well that doesn't sound too convenient 17:40:08 then == to morph itself correctly 17:40:09 using amb 17:40:13 oklopol: but really, look at amb 17:40:18 eh 17:40:22 the amb part is trivial 17:40:40 the problem is about generic operator type checking, at least in oklotalk 17:41:08 amb((char*)x, (int*)y)+1 17:41:16 but anyway, i still don't know what you mean by NMOR 17:41:20 ais523: I made amb in C once 17:41:26 ehird_: bet it couldn't handle that 17:41:27 ehird_: why should i look at amb, it's a fairly simple operator 17:41:27 It used a continuation lib using stack smashing 17:41:32 *function 17:41:32 and a macro TRY(x) 17:41:36 TRY(x) is like return x; 17:41:38 but you can backtrack to it 17:41:48 FAIL; backtracks to the latest TRY(x) and resumes from there 17:42:02 ais523: it could handle mostly anything 17:42:04 it was something like this 17:42:11 oh 17:42:14 the C implementation was quite interesting, i gotta admit 17:42:14 -!- Judofyr has quit. 17:42:14 ais523: but you needed to specify the argc 17:42:22 since c cannot do varargs without knowing that 17:42:30 (amb x y z) 17:42:31 ehird_: you still can't change the type of the return value 17:42:40 ais523: well, no :) 17:42:42 which is needed for that expression to work 17:43:15 typedef int amb_t; amb_t amb(size_t argc, ...) {va_list ap; amb_t x; va_start(ap, argc); while (argc--) {x = va_arg(ap, amb_t); TRY(x);} FAIL;} 17:43:34 the end FAIL will mean that we exhausted the args, but maybe things can get better if some other thing changes 17:43:41 mostly it'll just terminate the program since there's no previous backtracks 17:43:46 anyway, here's an amb usage example in c 17:44:08 ehird_: that's really bad C, because you didn't use va_end 17:44:10 Scheme is a better place to describe AMB :/ 17:44:23 int x = amb(3, 1, 2, 3); int y = amb(3, 4, 5, 6); if (x*y == 8) {printf("%i %i\n", x, y);} else {amb(0);} 17:44:29 ais523: just add it before the FAIL 17:44:30 vixey: that's the charm, of course 17:44:30 not hard 17:44:31 :) 17:44:36 ais523: i just typed that out now, anyway 17:44:49 vixey: But you need two callcc's in Scheme to do it 17:44:52 It's a little ugly 17:44:53 ehird_: no it is hard, because you don't call va_end before TRY returns 17:44:59 lol 17:45:02 wtf 17:45:09 ais523: but that's alright, because we have to return there 17:45:12 ais523: think about it like a coroutine 17:45:14 you -are- mad ehird 17:45:17 it is still running, just blocked 17:45:18 ehird_: you have to call va_end before you return 17:45:21 or the stack may be wrong 17:45:23 ais523: TRY() is not return 17:45:29 ais523: TRY() ACTS like return 17:45:32 ehird_: but it can act like return 17:45:34 it in fact does some stack magic 17:45:39 ais523: it is implemented totally differently 17:45:43 http://rosettacode.org/wiki/Amb 17:45:43 and if you return while the stack is wrong, you /will/ end up jumping to a random location 17:46:06 vixey: I talked to marshmallows when he made that page. 17:46:09 however, va_end is a NOP in most C implementations, which is why you never noticed 17:46:17 ais523: Sigh... http://homepage.mac.com/sigfpe/Computing/continuations.html 17:46:23 Read the implementation (it's old-style C though) 17:46:33 vixey: That AMB is horrific, and he agreed. 17:46:40 ehird_: then you can get away with it, because you're using varargs not stdarg 17:46:47 ais523: No 17:46:55 the C is only old-style in that it casts malloc 17:46:57 and some other stuff 17:47:55 ehird_: that definition of TRY may fail if va_end hasn't been called 17:48:06 ais523: did you look at the actual code that it calls? 17:48:13 ehird_: yes 17:48:14 yes 17:48:15 yes 17:48:22 ok 17:48:23 ok 17:48:23 ok 17:48:24 :) 17:48:24 fine 17:48:26 i agree then 17:48:26 :p 17:48:30 but anyway 17:48:33 Haskell's amb is really nice 17:48:35 it's [] in the list monad ;) 17:48:39 well 17:48:39 it's id 17:48:44 foo <- [1,2,3] 17:48:45 saving the context does not alter the stack, so va_end is still necessary! 17:48:48 and [] 17:49:04 and what's more, the list it generates is the bag-of 17:49:08 to get just one, you use 'head' 17:49:15 so 'head' is the list monad's run :) 17:49:22 wonder if i can manage amb without continuations in oklotalk... 17:49:25 ais523: and here's the [] monad's >>= 17:49:33 xs >>= f = concatMap f xs 17:49:36 return x = [x] 17:49:40 (>>=) = flip concatMap -- !! 17:49:43 yep 17:49:52 return = (:[]) 17:49:56 it's a really elegant way to use amb 17:50:02 upside down robot ninja ! 17:50:08 vixey: Pointless Haskell considered harmful in most cases. 17:50:17 upside down robot ninja > "harmful" 17:50:24 amb in prolog is nice 17:50:26 (from the wiki:) 17:50:26 amb(E, [E|_]). 17:50:26 amb(E, [_|ES]) :- amb(E, ES). 17:50:33 amb = member in Prolog yeah 17:50:36 but then prolog implementations practically have 'amb' built in 17:50:37 ehird_: every single operation in Prolog is amb, more or less 17:50:41 ais523: exactly 17:50:57 nah 17:51:00 I disagree 17:52:14 bah 17:52:16 well, apart from cut, which is really anti-Prolog 17:52:26 cut is very Prolog 17:52:28 :P 17:52:35 when doing a Prolog interp in Prolog, you have to use weird things like nonlocal cuts 17:52:56 vixey: yes, it's a useful part of the language, but it goes horribly against the theoretical foundations it's built on 17:53:45 ehird_: amb in Cyclexa: ('abc')^ is amb('a', 'b', 'c') 17:54:00 Prolog's one of those cases where the theory is more interesting than the application. 17:54:19 did you just math is interesting?! 17:54:36 just say * 17:54:52 cut == !? 17:54:55 I definitely agree 17:54:57 oklopol: yes 17:55:00 !/0 is cut 17:55:05 Huh? 17:55:30 * vixey pets EgoBot 17:55:43 * oklopol spoons EgoBot 17:56:33 implementing Prolog with cut using streams is very natural 17:57:02 It's hard to do it with explicit choice point stack though :[ 17:57:30 vixey: why is that? 17:57:39 Backtracking INTERCAL uses at least one choice point stack 17:57:46 more if you have multiple threads 17:58:03 and stack elements are refcounted so they can belong to more than one thread, allowing you to backtrack past a fork 17:58:25 (= w { 17:58:27 (-> (@ n [$any [1 2 3]]) n) 17:58:29 (-> (@ n 0) 4)}) 17:58:31 (+ (w 2) (w 0)) 17:58:33 ==> 6 17:58:33 -!- wildhalcyon has quit (Read error: 104 (Connection reset by peer)). 17:58:39 oklotalk does have something of an amb, for pattern matching 17:58:42 just because I don't know what , does 17:58:48 in terms of choice points 17:58:56 well, not amb 17:58:58 vixey: it's a NOP 17:59:07 a, b means run a, then run b 17:59:08 but i mean... whazzitcalled that declarativeness 17:59:14 if a backtracks then b is never run 17:59:30 if b backtracks then it can backtrack into a, because it was run earlier 17:59:31 say you have, 17:59:47 ( member(X,[a,b,c]) , member(Y,[x,y,z]) ) 18:00:08 then member sets X=a and sets two choicepoints 18:00:18 then the other member sets Y=x and sets two more choicepoints 18:00:21 I don't see the problem 18:00:25 if you solve the LHS then the RHS, backtrack, RHS, backtrack, RHS, backtrack 18:00:34 next you should redo member(X,[a,b,c]) 18:00:52 but once you do, how do you know to solve member(Y,[x,y,z]) next? 18:00:59 -!- wildhalcyon has joined. 18:01:01 it was popped off the stack 18:01:08 vixey: that's correct 18:01:25 you put it back on the stack starting from the start, because the next thing that runs after member(X... is member(Y... 18:01:30 because it follows it after the comma 18:01:50 so the choice point stack also holds the entire rest of the program? 18:01:50 imagine (member(X, http://en.wikipedia.org/wiki/Special:Search?go=Go&search=a,b,c],[d,e,f],[g,h,i), member(Y,X)) 18:01:56 haha 18:01:59 -!- oerjan has joined. 18:02:09 vixey: well, reconstruct what I said 18:02:15 the choicepoint stack holds continuations 18:02:32 which do hold the entire rest of the program conceptually, but that can normally be optimised 18:02:46 oh right 18:03:20 * vixey tries to write this out in code 18:03:26 e.g. in INTERCAL you can deduce the rest of the program from the IP and the NEXT stack 18:10:06 ais523: and the variables? 18:10:20 SimonRC: they're stored in the continuation too 18:10:28 but don't apply to deducing what the rest of the program is 18:10:28 ok 18:10:59 what about conditional jumps? 18:11:12 unless I misconstrue your meaning 18:14:37 SimonRC: the route through the rest of the program varies, of course, but all the information needed to be able to work out the place in the program where execution would have proceeded, and should proceed after a choicepoint returns, is available in the IP and NEXT stack 18:15:01 ah, ok 18:15:04 that makes sense 18:45:51 -!- jix has joined. 18:51:54 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1""). 18:56:41 -!- jix has quit (Nick collision from services.). 18:56:53 -!- jix has joined. 19:19:39 -!- Judofyr has joined. 19:35:05 -!- Sgeo has joined. 19:50:37 -!- oerjan has quit ("leaving"). 20:21:42 -!- AnMaster has quit (No route to host). 20:46:45 So what's going on? 20:49:53 five things 20:51:47 yes? 20:56:31 -!- ehird_ has changed nick to cboat. 20:56:39 -!- cboat has changed nick to ehird. 21:00:11 -!- oerjan has joined. 21:01:18 wildhalcyon: well, I think that TechDawg's "Discarded" is art. 21:01:20 Some disagree 21:01:30 -!- tola_ has joined. 21:01:45 wildhalcyon: BTW, http://www.youtube.com/watch?v=cW44BpXpjYw 21:01:54 line rider is lovely 21:03:15 in fact, several of TD's things are art 21:03:45 http://www.youtube.com/watch?v=rn8ULJGboOE&feature=related is hilarious 21:04:05 "hillarious"? 21:04:19 great, certainly, but n ot"hillarious" 21:06:41 -!- Tritonio_ has joined. 21:07:03 I do enjoy linerider 21:08:00 Its a great form of art, too. I agree SimonRC 21:08:38 -!- Quendus has quit ("Reconnecting"). 21:08:49 -!- Quendus has joined. 21:09:18 but the smb 1-1 level ehird posted was better 21:10:09 SimonRC: I found it funny 21:11:06 odd 21:11:12 but not that odd 21:15:48 This stuff is giving me a headache 21:15:58 hm? 21:16:27 I've been reading about "pure" object-oriented programming 21:16:35 ok 21:16:56 what is that? 21:17:00 A lot of academic papers and things 21:17:06 my favorite text on object orientation is AMOP 21:17:13 do you have a link? 21:17:25 Art of the Metaobject Protocol 21:18:31 I think that might have been one of the ones I read yesterday, I'll have to double-check 21:18:58 * SimonRC drags out his usual text on what OO is: http://www.paulgraham.com/reesoo.html 21:19:07 SimonRC: you just quoted paul graham 21:19:42 It list 9 things that make up OO, and points out that no-one agrees which are the essence of OO 21:19:46 ehird: yes, and? 21:19:46 loool 21:20:03 paul graham is a blabbering moron with nothing worthwhile to say who is wrong about just about everything he talks about 21:20:04 actually, that is Jonathan Rees, not PG 21:20:14 i wish i could be less harsh, but experience gives me no choice 21:20:23 is he really that bad? 21:20:34 SimonRC: IMO, yes. 21:20:39 A Plan for Spam wasn't all that bad, though. 21:20:40 I guess I'm glad I don't know who Paul Graham is 21:20:50 http://www.dreamsongs.com/ObjectsHaveFailedNarrative.html 21:21:12 wildhalcyon: I disagree. He is a good person to read if you disagree with him. 21:21:15 maybe 21:21:16 wildhalcyon: He wrote a couple very bad books about Lisp and some very seductive essays 21:21:29 wildhalcyon: He also wrote Roots of Lisp which -is- very good and worth reading though 21:21:44 vixey: "seductive"? 21:21:47 Well, I've read up on lisp a bit. 21:22:01 SimonRC, haven't you heard about the XXX-oriented paradigm? 21:22:04 on lisp is rubbish 21:22:12 you should burn it or delete 21:22:29 wildhalcyon: "XXX-oriented"? 21:22:33 aiming for high penetration, i assume 21:22:42 *groan* 21:23:14 that was pretty bad 21:23:25 Thank you, thank you. 21:23:40 SimonRC - there was an esolang proposed once in which operations were sex acts 21:23:42 -!- ais523 has joined. 21:23:52 You know how folks are in this channel 21:24:09 ooh, didn't encounter that one 21:25:14 :D 21:25:32 god it's fun debuggin' with vista 21:26:00 whole computer crashes for 10 minutes when it infloops 21:26:01 it is? 21:26:05 are you a masochist? 21:26:37 well si don't like waiting. 21:26:40 *i 21:26:45 so no, it's not actually that fun 21:27:57 huh, an app can crash Vista? 21:27:59 how? 21:28:54 Existance? 21:29:10 App says, "I exist, therefore I can crash Vista" 21:29:21 SimonRC: I saw a 'review of Windows XP' that was a disguised version of a Vista review 21:29:38 it was talking about how downgrading to XP added pre-emptive multithreading to your computer 21:29:52 Sum ergo Vistam, er... 21:31:08 SimonRC: dunno, but both my J interp and python interp do that quite often 21:31:19 gaaah 21:31:25 it should not be possible damnit 21:31:49 ais523: someone pasted it here 21:31:49 ?!? 21:31:54 I want J interpreters! 21:31:57 SimonRC: indeed it shouldn't 21:32:04 lots of people seem to have written ones and not released them 21:32:07 j602 21:32:14 ... 21:32:18 you wrote that? 21:32:22 oh no. 21:32:36 oh I see 21:32:36 i'm new to J. 21:32:47 when you said "my J interp" you meant the one I'm using :P 21:32:48 sorry.... 21:32:58 well, it doesn't seem too hard, J isn't all that extendable 21:33:00 hm frago perhaps 21:33:14 vixey: i realized one might think i meant i'd coded them 21:33:36 but didn't fix 21:33:44 cuz i'm evil 21:34:19 Sum, ergo Vistam frangere possum 21:35:16 i still have no idea what the use of boxing is in J 21:35:26 perhaps one of you explain that 21:35:58 changes the way things compose and operate 21:36:26 also they are useful as tuples 21:36:27 s/downgrading/upgrading/ 21:37:35 ais523: i recall pasting that 21:37:48 oerjan: I wasn't online at the time 21:38:04 so it's just a happy coincidence 21:38:23 i vaguely recalled it was oerjan 21:38:34 but thought oerjan isn't really the pasting type 21:38:42 no you didn't! I do the vague recalling here! 21:38:47 :-----------) 21:39:34 before you know it, i'm also talking haskell gibberish and making pun out of nowhere. 21:39:38 *puns 21:40:42 as long as you don't vaguely recall talking gibberish about haskell puns 21:41:57 i don't seem to 21:42:08 or... perhaps i do 21:42:13 my memory is a bit vague here. 21:42:28 GAAH 21:42:41 -!- ais523 has set topic: http://bespin.org/~nef/logs/esoteric/ --> .pr POINT .pr STRING p=".pr POINT .pr STRING p=?;print(p[:22]+REPR 34+p+REPR 34+p[24:])";print(p[:22]+REPR 34+p+REPR 34+p[24:]). 21:42:58 -!- ais523 has set topic: http://bespin.org/~nef/logs/esoteric/ --> .pr UPPER .pr STRING p=".pr UPPER .pr STRING p=?;print(p[:22]+REPR 34+p+REPR 34+p[24:])";print(p[:22]+REPR 34+p+REPR 34+p[24:]). 21:43:46 ?_? 21:43:59 oerjan: I'm making the topic portalbe 21:44:03 s/albe/able/ 21:44:17 Of course, it requires your interp to be case-sensitive 21:44:44 hahahahaha 21:44:45 WOW 21:45:20 sorry, I accidentally wrote the wrong stropping style first time 21:45:23 is this still ALGOL? 21:45:27 oerjan: yes 21:45:43 * SimonRC wonders in what ways PG's thing on bosses is BS. 21:46:26 "Lots more people could start startups if they wanted to. In fact, our business model depends on it. If the pool of founders was limited to a few rare geniuses, Y Combinator wouldn't work." <-- Proof by business model requirements. 21:46:30 :-) 21:48:21 hmm... how many languages actually have extendable pattern matching? 21:48:28 i don't seem to recall any 21:48:40 haskell? 21:48:53 oklopol: Perl clames to be able to, but that's done by putting a preprocessor on regexen 21:49:15 i didn't even know perl had pattern matching 21:49:19 then again, i don't really know it 21:49:19 can you define extendable pattern matching? 21:49:26 oklotalk has it 21:49:29 .... 21:49:40 my rational numbers can be pattern matched on (/ d n) 21:49:42 I still don't have an oklotalk interpreter and user manuel 21:49:43 :P 21:49:46 :D 21:49:56 and I am waiting 21:49:59 i should have oklotalk-- by wednesday 21:50:05 cool 21:50:09 well 21:50:25 should be --oklotalk-- or something, because it's both a subset *and* a different syntax. 21:50:30 but at least it's something... 21:50:36 haskell has had discussions on adding generalized "views" but they haven't made it into ghc at least 21:50:53 this must be my first project in years where i've actually been on one project for over 2 days 21:51:00 s/discussions/research papers/, i think actually 21:51:04 i've heard about view, ya 21:51:15 well I can easily do this in a Lisp or Prolog but I think you mean something more general 21:51:26 for me, adding extendable pattern matching was a 15 minute scribble, but i guess you can think about it for years too :P 21:51:34 whatever suits the language designers 21:51:49 you still haven't defined it :/ 21:51:52 (okay, oklotalk does it fairly dirty) 21:51:56 defined? 21:51:57 so I'm just guessing I know what you mean 21:52:00 oh 21:52:10 i can show my rational number class again 21:52:21 and explain where you can see extended pattern matching 21:52:55 http://www.vjn.fi/pb/p441122612.txt 21:53:11 <-- addition with another rat --> 21:53:11 (-> [$+ (/ dd dn)] 21:53:11 (= g (gcd dn n)) 21:53:11 (rat (+ (* d (/ dn g)) (* dd (/ n g))) (/ (* dn n) g))) 21:53:33 addition, we match on the pattern [$+ (/ dd dn)], so addition by something that can be split by / into dd and dn 21:53:46 a rational number can be split this way, defined in the same class... 21:53:53 <-- pattern match on division --> 21:53:53 (-> [pb $/] [d n]) 21:53:54 here 21:54:11 })}) <-- I like this language already --> 21:54:14 pb means pattern match both, there are a few match tag kinda things like this 21:54:32 vixey: this is not actually the real syntax, although i'm beginning to like it as much as the original :P 21:54:44 this is much prettier. 21:54:51 but... not very concise 21:55:21 i guess i could make a hybrid of the old and the new 21:55:27 revolutionize everything 21:55:35 does sound like something i would do 21:56:02 I was thinking about making a new language 21:56:09 it's kind of rubbish though 21:56:14 it seemed good earlier :/ 21:56:33 actually, i'll change the whole tag system now, so stuff will prolly stop working for 6 hours now. 21:56:37 I made a prototype anyway and it really needs lazyness 21:56:38 *- other now 21:56:46 (which I have no idea how to implement) 21:56:48 vixey: SHOW IT 21:57:01 lazyness is fairly simple 21:57:09 you simply don't evaluate stuff until you have to 21:57:26 instead of evaluating the ast, you just pass it one 21:57:27 *on 21:57:52 not that i've ever done anything with lazyness, perhaps i should 21:57:56 layztalk 21:57:59 *lazytalk 21:58:19 http://www.codu.org/jsmips/test.html // can anybody say JSMIPS FIBONACCI? 21:58:22 That's right! 21:58:37 And JEBUS it's slow X-D 21:59:05 did you write that manually? 21:59:17 or was it that compileration you did some months ago 21:59:21 http://rafb.net/p/8dTURb60.txt 21:59:22 http://www.codu.org/jsmips/test.c 21:59:31 yarr 21:59:32 it was 22:00:06 Not sure what you mean by "that compileration you did some months ago" :P 22:00:43 length([])=0. 22:00:43 length([_|xs])=1+length(xs). %% not sure about this (how could this generate lists of a given length?) 22:00:50 vixey: what do you mean? 22:00:51 yes it can I tested it 22:00:57 you would be able to go 22:01:03 3=length(x) 22:01:08 thought so 22:01:09 and it would result in () 22:01:14 aha 22:01:15 why? 22:01:18 but also binding x to [g1,g2,g3] 22:01:26 shouldn't it result in each and every list of length 3? 22:01:32 yes g for gensym 22:01:38 they are new variables 22:01:47 okay 22:01:49 what's the prob 22:01:57 well you can't write permutation([x|xs])=insert(x,permutation(xs)). 22:02:03 GregorR: indeed, i don't always speak human. 22:02:17 you can't? 22:02:18 you have to write permutation(insert(x,xs))=[x|permutation(xs))]. 22:02:26 which is much less natural, and that's because of strictness 22:02:53 (I tested both in my interp, the one I -wanted- to write loops but the other works) 22:03:17 -!- Sgeo_ has joined. 22:03:22 what's wrong with the first one? 22:03:39 it doesn't terminate 22:03:53 well should it? 22:03:53 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 22:04:00 I would rather it did :P 22:04:24 the plan is that lazyness finds an evaluation order that terminates if one exists 22:04:37 so it would be very nice to have that property in a logic lang 22:04:41 sure 22:04:45 I don't know if it would translate across though 22:06:41 hehe, that rational number example is fun to run, 4000 lines of output 22:07:41 -!- Sgeo_ has quit (Read error: 104 (Connection reset by peer)). 22:07:48 -!- Sgeo has joined. 22:07:56 ehird did you see it? 22:09:29 GregorR: wait, MIPS under Javascript 22:09:39 Yup 22:10:43 nice 22:10:51 is MIPS a simple architecture? 22:12:33 Extremely. 22:12:38 MIPS I has about 60 operations. 22:12:55 nicer than x86 22:13:13 you probably already told me, but how do you do the compilation? 22:13:18 "rep strtostr" and all that 22:13:29 oklopol: with a normale compiler I think 22:13:40 then he has a translating program 22:13:53 oklopol: GCC 22:14:10 http://www.codu.org/jsmips/patches/ 22:14:12 Target mips-jsmips 22:14:37 And make sure you use CFLAGS="-g -O0" when compiling newlib ... something in the -O2 version borks :( 22:16:01 GregorR: slow? hardly 22:16:15 runs in about 4 seconds in total over here 22:16:20 it freezes a tiny bit at the start 22:16:24 then runs without lag 22:16:28 The freeze at the start is loading the ELF. 22:16:33 yeah 22:16:36 but 22:16:36 fast 22:16:39 The 4 seconds is much slower than a real MIPS X-P 22:16:55 GregorR: If I write a c program will you test it on jsmips? 22:16:56 :D 22:17:01 I want to try ridiculous things 22:17:03 Like mucking with memory 22:17:20 Mucking with memory is perhaps the /least/ ridiculous thing you could try. 22:17:26 ehird: use that C continuation program 22:17:29 ais523: OH YES 22:17:34 ais523: I will do that! 22:17:45 It'll just require a little modding 22:17:46 Make your own cross-compiler and try it yourself :P 22:17:48 amb on MIPS? lol 22:17:53 GregorR: I'll have a crazy program for you, stat :D 22:18:10 can the thing to set/longjmp? 22:18:14 ais523: oh gods not the one that memcopys functions about is it? 22:18:24 SimonRC: memcpy's the stack actually 22:18:26 SimonRC: not functions, just the call stack 22:18:27 -!- Iskr has quit ("Leaving"). 22:18:43 vixey: I haven't tested it, but it's in the standard library - in the grand scheme of things it's not that complicated, so it ought to work. 22:18:46 once you've done that, try a multithreaded C-INTERCAL program 22:18:52 GregorR: This will be fun 22:18:57 or one that uses the external calls system 22:19:10 cool 22:19:21 If I published a binary cross compiler for x86, would you people compile your own stuff? :P 22:19:29 * oklopol starts tackling quicksort in oklotalk 22:19:52 * ais523 has qemu-mips over here 22:19:58 GregorR: For OS X? Sure. 22:19:59 ais523: GIVE ME THE ROM 22:20:00 but presumably that isn't identical to JS-mips 22:20:02 ais523: DO IT 22:20:04 ais523: I NEED THE ROM 22:20:05 :P 22:20:24 GregorR: you mean from the qemu sourcecode? 22:20:35 I thought qemu-mips needed an external ROM? 22:20:46 GregorR: no idea, I've never tried to run it 22:20:52 X-P 22:20:58 I did - wanted Windows NT 3 on MIPS. 22:21:05 But alas, no ROM, no fun. 22:21:47 almost done evil.c :D 22:24:20 GregorR: seems that qemu-system-mips can only run Linux on a simulated Malta board 22:24:30 s/x/x,/ 22:27:02 GregorR: Almost done with the prog 22:28:19 GregorR: okay 22:28:59 GregorR: http://rafb.net/p/tpuvWN89.html 22:29:03 compile with 'gcc foo.c -o foo' 22:29:06 * ais523 has the evil idea of implementing Brainfuck using a single one-byte auto variable to hold all stack elements and using stack-smashing 22:29:07 i.e. nothing special 22:29:15 GregorR: the expected output is at the end 22:29:26 if you put it on your site, i want to seeee it :D 22:29:39 ais523: take a look at my link: it implements a generator using the continuations 22:30:08 ehird: yes, I looked at it before you said that 22:30:10 TRY() is yield, and generator() ... FAIL is an implicit loop through the items 22:30:38 are "generators" not just streams? 22:30:48 vixey: yes 22:30:49 it's python terminology right? 22:30:54 no 22:31:06 never heard it outside of there 22:31:09 Generators first appeared in CLU (1975)[1] and are now available in Python[2], C#, and JavaScript[3]. (In CLU and C#, generators are called iterators.) Generators are also a prominent feature in the string manipulation language Icon. 22:31:15 but the most common usage is in python yes 22:32:36 incidentally, MAYBE COME FROM is a trivial way to do a generator in INTERCAL 22:32:46 lol 22:32:50 what does MAYBE COME FROM do? 22:33:03 COMEs FROM a line, but after backtracking don't come from that line 22:33:20 o_____O 22:33:36 so exactly like the TRY in ehird's program, except in the calling not the called function 22:33:38 do people write real programs with INTERCAL? 22:33:45 vixey: INTERCAL is an esolang.. 22:33:47 depends on what you mean by 'real program' 22:33:55 like webservers .. and stuf.. 22:34:04 there's an INTERCAL CGI script running somewhere 22:34:12 vixey: INTERCAL is an esolang.. 22:34:18 This is #esoteric. 22:34:22 and a CLC-INTERCAL version of a highly simplified wget 22:34:25 why does that change anything ehird? 22:34:26 You know. Like Brainfuck 22:34:36 vixey: Would you ask if people made webservers with brainfuck? 22:34:53 ehird: do people make webservers with brainfuck? 22:35:27 ais523: :) 22:35:33 PLEASE DO ASK 22:35:47 PLEASE CREATE (1450) ASK 22:36:01 PLEASE NEXT FROM [22:35] 22:36:05 PLEASE CREATE (1650) ASK 22:36:11 DO RESUME #1 22:36:16 haha 22:36:30 sorry I realised that the CREATE statement had to come /before/ ehird's message 22:36:31 -!- AnMaster has joined. 22:37:19 what you mean the compiler doesn't look for future CREATE commands? i sense a feature missing ;) 22:37:44 oerjan: I thought of doing it like that, and decided the case where it didn't was more interesting 22:38:00 after all, there are a range of ways to work around the problem in your own software 22:38:18 and once I implement computed CREATE, it'll be possible to do things like DO CREATE .1 ABC DO ABC as a computed NEXT 22:38:36 you'd lose all that if CREATE happened at compile-time 22:39:08 oh i didn't mean for it _always_ to happen at compile-time. perish the thought! 22:39:54 ehird did you see my lang though :( 22:39:58 so what's you're plan? 22:40:05 allow some commands to work retroactively? 22:40:14 DO CREATE (1850) ASK RETROACTIVELY #50 22:40:19 i have a plan? 22:40:34 oerjan: I didn't realise you did, but I assumed you had something or other in mind 22:41:05 (RETROACTIVELY would be basically impossible to implement in INTERCAL by the way; I think it might be able to solve the halting problem with the semantics I have in mind and therefore be truly impossible) 22:42:08 nothing wrong with that 22:42:40 heh 22:42:45 you could have it try to solve the halting problem and crash if it's too hard 22:42:46 oklopol: but I can't implement any theoretically impossible commands in C-INTERCAL 22:43:00 vixey: that would be INTERCAL's style, I agree 22:43:09 but it would still be basically impossible in a compiled language 22:43:12 you can implement the non impossible parts of them 22:43:15 and make rest crash 22:43:22 every language has programs that cannot run through 22:43:22 maybe I'll suggest it to CLC-INTERCAL's maintainer 22:43:39 oklopol not true :P 22:43:44 every tc language 22:45:47 oklopol: even oerjan's crazy HQ9+ extension? 22:46:08 :D 22:46:13 it's not entirely clear whether that was TC, because any given program designed to be TC only had a 1 in 256 chance of working 22:46:17 and errored the rest of the time 22:46:28 like the random-bug in INTERCAL, but much worse 22:46:37 the language now specifies how to make it tc? 22:46:51 oklopol: it had an X command 22:47:00 specified as "Makes the language Turing-complete". 22:47:04 but the perl extension was just one wait to do it 22:47:08 right? 22:47:24 meaning you could do it so that it's always tc 22:47:24 right 22:47:35 i consider the extension a parametrizable language 22:47:45 because it's clear the language's semantics aren't complete as such 22:48:09 it's just a framework for another language to fill (be tc given X) 22:48:14 dunno 22:48:15 I was going to suggest a language whose semantics were expandable at runtime, but CLC-INTERAL already does that (and C-INTERCAL to a much lesser extent) 22:48:21 qsort might work soon 22:48:22 exciting 22:57:54 http://elliotthird.org/mirror/c-intercal/ick-0.28/pit/sort.i <--- see if you can figure out how the flow control in this works, it took me ages to write 23:23:15 * Sgeo sees what looks like a mistake in http://qntm.org/?frontier 23:23:20 "We appear to have gravity in here because the screw drive in the ship skeleton is accelerating upwards and pulling the ship up with it at nine point eight one metres per second per second." 23:23:25 But they should be at a point above Jupiter where they feel equivelent gravity.. or am I missing something here 23:23:29 does escape velocity being the same not mean that the gravity they feel is the same? 23:24:56 well i haven't read the article but they might be falling freely towards jupiter, rotating it or something 23:25:08 in which case no gravity is perceived 23:25:25 (not an article, it's fiction) 23:25:27 but fuck, another problem with scoping :D 23:25:38 it's a piece of text, so i call it an article 23:27:25 They started out in the basement, and jumped to equivelent gravitational potential energy somewhere above Jupiter, conserving momentum 23:39:35 -!- oerjan has quit ("Good night"). 23:49:06 escape velocity is proportional of the root of the intergral of gravitational potential out to infinity 23:49:25 um, gravitational *field* 23:49:46 there is no formula that directly relates escape velocity and gravitational field 23:51:14 and, as oklopol pointed out, they might not be at a constant height 23:51:24 and up might not be directly away from Jupiter 23:51:25 etc 23:52:21 if you really wanted to nitpick, you could point out that they are ignoring special relativity too 23:52:56 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 23:53:46 -!- oklopol has joined.