00:03:22 night 00:21:37 oklopol: 00:35:23 -!- Corun has changed nick to Coreina. 00:45:04 -!- Coreina has changed nick to Corun. 00:47:21 -!- timotiis has quit (Read error: 110 (Connection timed out)). 00:50:09 -!- CakeProphet has joined. 01:25:53 -!- sebbu2 has changed nick to sebbu. 01:32:43 -!- ihope has joined. 01:34:57 * ihope comes and sees 01:35:16 ? 01:35:21 O_O oh noes! he knows about us! 01:35:47 * ihope chases oerjan while screaming, "IT'S GOOD FOR YOU!" 01:37:05 BUT I'M ALLERGIC TO IT! 01:37:28 Oh. 01:37:34 * ihope switches vegetables 01:37:35 * ihope chases oerjan while screaming, "IT'S GOOD FOR YOU!" 01:37:40 -!- tusho_ has quit (Client Quit). 01:37:47 BUT IT'S YUCKY! 01:37:56 AND IT MOVES! 01:38:50 Eating crunchy vegetables is good for me, and it's good for you, so eat them too, something about the bunch! Three cheers for me, Captain Vegetable! Crunch, crunch, crunch! 01:39:20 * oerjan eats Captain Vegetable to end this travesty 01:39:53 Yay, Crunchy! 01:40:41 My name is Oerjan, and I like coerjan / If it's... um, poured on, gimme some coerjan! 01:41:52 * oerjan wonders what the original of that was 01:43:08 My name is Andy/Eddie, (and) I like candy/spaghetti / If it's handy/ready, gimme (some) candy/spaghetti! 01:43:43 Add and and some to taste. And make sure the syllable count remains the same, and all. 01:48:51 just don't get Huck involved in this 01:57:21 -!- puzzlet_ has changed nick to puzzlet. 02:32:18 I think I'm allergic to my damn shoes. 02:32:23 That's pair #4 02:32:28 I'm so tired of shoes. 02:33:25 Don't wear shoes. 02:33:34 Find public places that don't say "no shoes, no service". 02:33:45 I find walking on gravel to be unpleasant without shoes. 02:34:02 clearly you need to walk upside down, since you like hats 02:35:31 You'll get used to it. 03:00:44 I find that developing hobbits-feet is handy. 03:08:32 -!- Corun has quit ("This computer has gone to sleep"). 03:12:59 -!- poiuy_qwert has joined. 03:15:14 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 04:03:23 -!- oerjan has quit ("leaving"). 04:11:22 :D 04:11:38 I grow weary of working 04:11:39 perhaps 04:11:46 I should create a robot 04:11:48 that works for me 04:12:25 Surely there's some mindless task that people still pay other people to do... that I could automate into a bot. 04:30:16 Surely. 04:30:24 * ihope ponders 04:30:29 Zamboni driving. 05:12:46 -!- pikhq has quit ("leaving"). 05:31:41 -!- poiuy_qwert has quit. 05:49:15 -!- GreaseMonkey has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:15:03 Deewiant, I got an issue, I think my V and S in STRN are correct (checked what it pushes with gdb), mycology however doesn't agree 08:15:34 BAD: "0987654321"VS isn't 1234567890 08:15:41 that would in the end push the string again 08:16:28 are you sure the mycology check is correct? 08:18:41 one can never be sure of anything 08:18:53 Deewiant, bbiab, going to swim 08:18:57 it's open source you know, just check what it checks for and check that it's right :-P 08:32:02 -!- lilja has joined. 08:46:39 -!- CakeProphet has quit (Remote closed the connection). 08:47:10 -!- CakeProphet has joined. 09:21:17 i recall getting quite strange looks when walking to the shop in the winter without shoes on 09:21:30 used to dislike shoes a lot 09:23:02 -!- Judofyr_ has joined. 09:23:28 think i went one whole summer without shoes, after which shoes actually hurt... not sure why, perhaps a psychosomatic thing 09:28:33 ah, i'd forgotten how nice the c++ template system actually was 09:28:42 it's just so convenient 09:40:22 -!- Judofyr has quit (Read error: 110 (Connection timed out)). 09:41:38 -!- Judofyr_ has left (?). 09:42:15 -!- lilja has quit (Read error: 104 (Connection reset by peer)). 09:48:55 ah, i'd forgotten how nice the c++ template system actually was 09:49:02 BLERGH 10:03:08 Deewiant, actually it was an off by one error on my side 10:04:51 Deewiant, hrrm my my mycouser STRN always fails to load, I guess this isn't the last version? 10:11:48 if there's an "r" instruction somewhere there then it's one of the versions where I forgot an "r" where a "(" should be 10:12:32 ah 10:12:38 right there was an r 10:15:24 http://www.vjn.fi/pb/p134452546.txt <<< changed phase rules a bit, you can now be in multiple states 10:15:32 always is just a boolean variable that evaluates to true 10:15:41 so the phase always: is always on 10:16:08 oklopol, huh is that for a programming language 10:16:16 yeah 10:16:56 oklopol, hello world in it please 10:16:57 that should be a fully legal program in it, except it would do nothing unless actually piped into something that knows how to do the primitive operations 10:17:10 you can't output 10:17:14 ah ok 10:17:16 well 10:17:25 it's really a language template 10:17:53 turing complete language? 10:17:57 i can choose print to be a member variable that's printed 10:18:09 the program would then be first => print "Hello world!" 10:18:28 oklopol, ok... what sort of language is this? 10:18:30 so it would once, when the program starts, set print to "Hello world!", then do nothing more 10:18:41 it's a declarative language disguised as event-based 10:18:47 ah 10:18:50 basically condition => result 10:19:05 but it's kinda OO, you're always describing an object 10:19:12 bbiab food 10:19:23 that changes its state and it's member variables 10:19:33 it's designed for making bot ai's 10:19:54 basically, that would be the thing that changes the bot's state, and queries its surroundings 10:20:23 the actual physics / graphics for a game, or things like that, would be supplied in another language 10:20:55 although you could of course make a language over Ob to give you the graphics shit too 10:21:21 but it always needs to be plugged into something eventually, as there is no preset IO functionality 10:21:47 it's kinda purely functional, although completely imperative, except, of course, entirely declarative. 10:22:39 well it's not really purely functional in any way :P 10:22:46 just got caught up in the moment or something 10:23:27 about tcness, i have a forall construct /X in the language, so it's superturing :P 10:23:47 and an exists construct, \X 10:25:28 you can do something like {/X: \Y: (length Y) > 1 && (product Y) = X} to test if all numbers are composite 10:26:04 although it doesn't actually have functions yet 10:28:55 hmm, actually i'm wrong, it already has functions 10:29:18 actually also boolean equality checks are basically calling booleans with other booleans 10:29:36 state killing: is equal to state = killing: 10:29:55 it's just englishier to drop the = 10:30:57 the language is quite flexible, implicit comments, whitespace based nesting, explicit nesting & lines separators, whitespace based operator precedence 10:31:00 all that shit 10:31:33 i haven't really made languages without whitespace based operator precedence after "inventing" it when making graphica 10:31:51 not that it's complex enough to need inventing, more like found its sexiness 10:39:57 back 10:40:12 (now adding objects without changing syntax, god i'm perverted) 10:40:21 basicaly 10:40:23 *basically 10:40:41 i was thinking objects could be created by "calling" a phase. 10:40:43 so 10:40:59 it's kinda purely functional, although completely imperative, except, of course, entirely declarative. <-- haha 10:41:03 if you have the phase "object human:" 10:41:12 "superturing"? 10:41:20 which would normally become active when the variable object is set to human 10:41:23 err 10:41:23 yeah 10:41:34 superturing, can evaluate H() 10:41:39 anyway 10:41:47 H()? 10:41:51 if you have the "object human:" phase 10:41:52 err 10:41:55 halting test 10:41:58 anyway 10:41:58 ah 10:42:00 if you have the "object human:" phase 10:42:03 yes? 10:42:06 and you do something like 10:42:15 myHuman = object human 10:42:34 it will actually start a new thread that executes the code in the object human phase 10:42:43 oh my 10:42:50 and you get an id that links to that thread 10:42:55 which is basically an object 10:43:43 wait a mo, i'll add "movement" to that guy i just defined, by using it as an object in another environment 10:44:06 oklopol, so what about thread sync? 10:44:10 like mutexes? 10:45:45 oklopol, are you got at perl regex? 10:46:00 I forgot the syntax for a negative lookbehind 10:46:24 (? thanks 10:46:39 Only fixed-width contents, though. 10:46:45 yeah I know that 10:47:18 I just wanted to find any american spelling in my source, so I grepped for ize, but "size" matches that too 10:47:39 pcregrep '(? :D 10:48:18 [^s]ize probably would've been easier; of course it's not the same since it won't match if you've got a line starting with "ize", but I hardly think that's a real issue. 10:48:38 fizzie, I could have one with size as well as normalize 10:48:41 in fact I had one 10:48:58 wait that would still match 10:49:13 Well, I guess you'd miss things like "resize", but... 10:49:22 that one would be size too 10:50:31 http://www.vjn.fi/pb/p565145255.txt 10:50:45 AnMaster: i'm working at a much higher level than thread sync 10:50:55 oklopol, ah 10:50:55 the threads cannot be just "threads". 10:50:59 i mean 10:51:01 if someone says something 10:51:11 everything that triggers @ that must be executed 10:51:56 there are many subtleties, the language is meant to be trivial to code, and very extendable; it is not meant to be feasible to implement :P 10:52:09 but it should be fast enough if used wel 10:52:11 well 10:52:19 and it's compilable, in many senses of that word 10:52:54 -!- tusho has joined. 10:52:59 for instance, many times you can leave the explicit type of X out, because the fact X.name is used makes it possible to optimize X to a human variable 10:53:31 hi ais523 10:53:34 this is because fields are not first class, and it can easily be deduced the global object will never set its name field to anything 10:53:37 (that was intentional) 10:53:41 we know 10:53:47 too slow not to 10:54:15 tusho: read my rant about ob if you have the... err.. guts? 10:54:21 oklopol: link to logs? 10:54:26 hehe 10:54:28 also 10:54:33 you should totally make fields first class. 10:54:46 http://bespin.org/~nef/logs/esoteric/ 10:54:52 why is that? 10:55:02 'cause nobody's done it before oklopol 10:55:09 oklopol, you know of applescript? 10:55:13 you can do that in oklotalk... 10:55:26 oklopol: just field nams 10:55:28 not field 10:55:28 oklopol, your language looks too much like English :( 10:55:29 s 10:55:36 AnMaster: ob does not look lik eenglish dude 10:55:45 AnMaster: they're comments 10:55:51 hm 10:55:53 ah 10:55:59 you can remove all the english, it's no 10:56:00 nop 10:56:05 oklopol, so what string marks it as a comment? 10:56:12 nothing 10:56:17 that's what marks it 10:56:19 AnMaster: invalidness is ignored I imagine 10:56:20 um 10:56:22 ah 10:56:22 like intercal 10:56:25 right 10:56:28 it's certainly esoteric 10:56:28 :) 10:56:41 also, I like how you say it's too close to english 10:56:43 " Implicit always condition for toplevel definitions. SeeFood is not a lambda, but basically a 10:56:43 string substitution, which by default uses X for what's bound. A slight difference is seen when 10:56:43 a condition variable like seeFood is negated, where an implicit "forall X" is added." 10:56:45 that's not "close" :) 10:57:13 => is for an event, : in the end is for a phase, := or = is for setting a variable 10:57:15 -!- timotiis has joined. 10:57:15 otherwise ignored 10:57:59 perhaps a language should be made where programs are sentences explaining the language in english :P 10:58:33 the implicit forall is actually quite impure when explained like that 10:59:15 actually, even as a concept it's kinda impure 10:59:34 hmm 10:59:50 actually not, i guess 11:00:01 if we forget all practicality for a moment 11:00:15 now 11:00:22 condition X => result 11:00:37 means that we try to find an X such that for that value of X condition is true 11:00:56 usually this is trivial, but condition here can be any expression, so it can be impossible just as well 11:01:01 now if we do 11:01:34 !(condition X), we should actually choose an X such that this is not true 11:01:42 and clearly this is what is often wanted 11:02:03 like, condition X && !(X\human) 11:02:39 wait, father called... 11:06:37 -!- GreaseMonkey has quit ("Remote closed the previous member app"). 11:06:40 okay, i'll continue 11:06:43 basically 11:06:50 if the implicit forall was used here 11:07:36 then this would be always false, if there were any humans, because for some X's, the latter thingie, !(X\human), would be true 11:07:51 so clearly we usually want an implicit existential quantification 11:07:58 like in functional programming 11:08:17 well in functional programming the existential quantification is just pattern matching, prolog is a better example 11:09:11 oklopol: ic ic 11:09:27 but, anyway, i'm going for intuitive in these kind of cases 11:09:42 for most situations, it should do what a stupid programmer might think it does 11:10:12 well, not because i want idiots to be able to use it, it's actually because i like compactness 11:11:39 anyway, the "/X: X\human => print X + " is in state " + X.state" line is not right 11:11:48 i'm going for "do this to all humans" 11:12:01 but the scope of /X would be the condition 11:12:29 in which case you could not actually use X on the right side, as you usually can't @ universal quantification 11:13:41 *nos* 11:13:43 *nod* 11:15:18 father called again 11:15:21 anyway 11:16:42 i'll prolly do like "/X: condition X => result" == "if for all X condition X, then result", and "/X: (condition X => result)" = "for all X for which condition X is true, evaluate result" 11:16:50 which is quite intuitive 11:17:20 basically i could just say \X: has only condition scope by default, and you could prolly guess how to extend it like that, and what it would mean 11:18:11 this only applies when you're using events as expressions in a result thingie 11:18:18 oklopol: i am reading 11:18:18 btw 11:18:20 :) 11:18:33 like, when @ condition => result, result contains a (condition => result) 11:18:37 tusho: reading what? P: 11:18:38 :P 11:18:40 my rant? 11:18:46 yea! 11:18:49 hehe :P 11:20:00 anyway it only applies there, because otherwise it's not actually defined what order shit happens in, although i'm going to add specific rules where there's an obvious order to do thing in 11:20:21 like, in case there are two conditions on field x, one of which changes x 11:20:25 hmm... 11:20:36 i guess you'd go with appearance order in that case. 11:21:07 i could perhaps make the evaluation order fully explicit. with the exception you could change it in cases where the result is the same 11:21:45 which is not all that rare, and which is quite a stupid thing to explicitly allow :P 11:22:06 "you can do this differently, if the result is the same" in a spec would be kinda retarded 11:22:14 oooooooooooooooo 11:22:32 i think i'm done, need to do some shopping 11:22:55 tusho: if you wanna know more about the actual language, i'd of course love to explain :P 11:23:08 heh 11:23:29 hmm 11:23:41 now what if you want to call a state 11:23:55 perhaps every variable should implicitly be a stack :))) 11:24:02 so you could just d 11:24:03 o 11:24:08 state 1: 11:24:13 something here 11:24:16 state 2: 11:24:33 condition => push state; state 3 11:24:36 state 3: 11:24:40 condition => pop state 11:24:49 although as always, i don't do keywords 11:24:52 so prolly < and > 11:24:59 as prefix operators 11:25:23 oklopol: maybe you should do a lang with some keywords 11:25:23 just to see 11:25:31 maybe it's awesome 11:25:32 well there's straw 11:25:36 it has a lot of them. 11:25:42 although you can't see that from the example 11:26:21 but in this language, i don't want any keywords, as the user should be able to assume everything that's ascii is either their own, or defined fully outside the language 11:26:38 because otherwise there's three separate things a lowercase string can represent 11:27:39 anyway, in oklotalk, doing A!Field yields a reference, so you *can* pass fields around 11:27:48 well 11:28:07 you can't pass !FieldName around :P 11:28:10 well actually 11:28:16 {_!FieldName} 11:29:54 pixles or pixels? what is the correct spelling 11:30:03 pixel 11:30:11 oklopol, in plural too? 11:30:15 pixels 11:30:18 thanks 11:30:31 although i use the alternative form pixulos 11:30:50 oklopol: pixelli 11:30:59 actually las pixulas 11:31:14 with a mexican accent 11:32:14 Pixies. 11:32:44 Deewiant, there? 11:33:27 Deewiant, in TOYS, should L wrap? 11:37:15 beware 5 lines of paste 11:37:15 variable stacks: 11:37:18 Variables can be used as stacks. This is done as Var< < In a statement with multiple pops, or pops and normal value retrievals, all < refer to the value under that, Var's value after the statement. Var can thus only be popped once in a statement. 11:37:31 tusho: opinion, please 11:37:36 hm wot 11:37:38 * tusho reads 11:37:41 good, good 11:37:42 * AnMaster reads too 11:37:59 yeah anyone can read, i just assume tusho has the most energy to care :P 11:38:06 well seems good 11:38:07 this is usually the case 11:38:36 i have 0 energy oklopol 11:38:37 i don't want many such side-effects in expressions that would require an explicit evaluation order 11:38:42 your stuff is interesting enough, though 11:38:44 AnMaster: what's L 11:38:53 L ('corner') works like ' except it picks up the cell to the "left" of the IP's line and does not skip over anything. (Historians may note that this works like "Get Left Hand" did in Befunge-97.) The cell to the "left" of the IP is the IP's position, plus its delta rotated -90 degrees about the Z axis (a la [) 11:38:56 yay i'm interesting :)) 11:38:58 anyway 11:39:01 Deewiant, that one 11:39:23 Deewiant, for that matter, should ' wrap? 11:39:28 depends on your view of Funge-Space I guess 11:39:50 actually i think it's fully side-effect free, unless you consider the cases where you call a function outside the Ob environment, and that one has side-effects 11:39:53 I think the principle is that the program is in a void surrounded by spaces 11:40:05 and thus if you grab something off the edge it's a space 11:40:15 because you can't really make any functions... although perhaps you should... not sure 11:40:26 and only if you actually move in the direction of an edge would you wrap 11:40:42 it's somewhat debatable since the spec isn't clear about it, but I think that's the intent 11:40:42 hrrm I think ccbi may wrap on TOYS L 11:40:46 and I'm not sure what CCBI does 11:40:59 at least i'm not going to add anything like that, or methods, before they're needed 11:41:08 since the spec isn't unambiguous about it I don't really care 11:41:52 it'd be too much work to rethink a way in which everything works properly 11:44:01 Deewiant, btw how would you do bitwise operations in Funge without using any fingerprints? 11:44:14 say, bitwise xor or bitwise and 11:44:57 x & 1 is the same as x % 2 11:45:11 yes true but what about other masks than that? 11:45:21 just iterate 11:45:24 x >> 1 is x / 2 11:45:57 so if you want x & 1101 do x % 2, then x / 4, x & 2, x / 2, x % 2 11:57:04 hmm 11:57:46 you can easily do addition recursively by toying with carries, given binary and & xor & bitshift 11:57:52 can you do it the other way around 11:58:06 with like + and * 11:58:16 A + B = (A ^ B) + (A & B) * 2 11:58:20 clearly 11:58:41 so we get (A ^ B) = A + B - (A & B) * 2, now can you do & with ^ and * or something? 12:01:10 hmm... i have an idea 12:04:10 damn, doesn't work 12:06:59 beh... 12:07:15 Deewiant, what about x xor y? 12:14:59 multiplication 12:15:08 or just if 12:15:19 it's trivial if you first cut into a list of bits 12:16:50 Deewiant, I think a C function ffi in cfunge would be quite doable 12:17:03 I have read docs on libffi and it doesn't see too hard 12:17:11 just need to figure out how to interface it with befunge 12:18:30 you befunge people are mad :P 12:18:48 oklopol, well intercal already got something even worse 12:18:53 it's C FFI is worse 12:18:58 way worse 12:19:08 while mine would be quite sane in fact 12:20:45 blergh, libffi can't currently call variable argument functions 12:25:10 i don't mean the C extension, just the fact your constantly talking about it :P 12:27:01 oklopol, hm? 12:27:08 I'm writing some specs for said fingerprint now 12:32:12 hm 12:32:15 how to handle pointers? 12:32:27 marshaling structs will be hard 12:33:41 say char** 12:52:23 char** 12:52:59 char** 12:53:28 -!- Slereah2 has joined. 12:57:02 Slereah2: do it 13:02:17 -!- Corun has joined. 13:08:21 ... 13:08:22 haha 13:08:55 does anyone want to read my draft at specs? It is likely to contain contradictions, so please point them out! 13:09:12 http://rafb.net/p/u5HsHE34.html 13:09:23 oklopol, tusho, Deewiant ^ 13:09:35 AnMaster: not a perfect time, sorry. 13:09:39 -!- timotiis has quit (Read error: 110 (Connection timed out)). 13:09:42 hm ok 13:11:25 I think I managed what is needed to handle about everthing, and if not it could call malloc amd memcpy from inside befunge to construct more advanced structures and pointers 13:15:01 -!- RedDak has joined. 13:15:08 int ID of function (from F). 13:15:13 from F? not R? 13:15:25 eh R 13:15:28 was a typo 13:15:43 oklopol, I renamed F to R 13:16:20 oklopol, issue fixed in http://rafb.net/p/sCTJCz33.html 13:17:04 thought so, as the inconsistence was present in the latter part too 13:17:05 oooooooooo 13:18:20 oklopol, what do you mean with that "oooooooooo"? 13:18:31 oh, nothing. 13:18:38 anyway, looks okay. 13:18:58 -!- olsner has joined. 13:19:03 :) 13:19:45 now I just want Deewiant, maybe ais if he gets here, and tusho to look at it 13:19:53 Deewiant, tusho: http://rafb.net/p/sCTJCz33.html 13:19:56 although befunge isn't exactly that great with, err, id's 13:20:12 oklopol, oh? REFC already does that 13:20:19 is there like a variable fingerprint? i mean, so that you'd have a unary space for storing shit 13:20:24 it's just a handle that is stored somewhere 13:20:35 refc? 13:20:39 not refc 13:20:41 REFC 13:20:46 oklopol: refcount 13:20:54 ais will get here, AnMaster 13:20:55 it's just 1pm 13:21:03 you're being mislead by the fact i was here at 11am 13:21:04 what's refcount have to do with anything? 13:21:04 :P 13:21:05 tusho, oklopol : http://catseye.tc/projects/funge98/library/REFC.html 13:21:08 instead of 4pm 13:21:11 not refcount 13:21:28 oklopol, the id list will work the same here 13:22:27 i mean, if you load a library, and load a function out of it, you have to pass around that function id in order to call it, right? 13:23:33 oklopol, yes indeed 13:23:39 you could store it in some cell 13:23:43 p/g intructions 13:23:47 instructions* 13:24:03 well yeah, but those are a bit bothersome in more than 2-ary funges 13:24:31 maybe, but FILE fingerprint does the same 13:24:32 http://web.archive.org/web/20020816190021/http://homer.span.ch/~spaw1088/funge.html#file 13:24:36 i want a n-ary funge where codespace is defined with graphica 13:24:47 huh? 13:24:52 btw. solved the problem of infinite structures i had with graphica 13:24:57 AnMaster: do you know graphica? 13:25:07 don't google 13:25:08 GRAPHICA PSOX ESCO TRDS 13:25:15 the best #esoteric memes, and one non-meme 13:25:18 :P 13:25:19 spot the non-meme! 13:25:19 oklopol, I think I heard the name before 13:25:26 well it's my graph definition language 13:25:36 Correct! The non-meme is "TRDS"! 13:25:48 tusho: do i win if i knew that? 13:25:54 yes 13:25:57 nice. 13:25:58 anyway 13:26:00 errr 13:26:15 does anyone know the problem with infinite structures in graphica? 13:26:24 oklopol, anyway there is no sane way to do this except IDs 13:27:04 basically, graphica is about creating nodes, and giving them unique id's withing the namespace given to the construction, and connecting nodes to each other by either recursion, or predefined id 13:27:14 AnMaster: i know 13:27:18 that's why i asked 13:27:23 err 13:27:30 "is there like a variable fingerprint? i mean, so that you'd have a unary space for storing shit" 13:27:46 so, the problem with infinite structures is as follows 13:27:52 let's say you have an infinite grid 13:28:25 ah 13:28:31 I see what you mean 13:28:42 no I don't think a variable fingerprint exists 13:28:55 it's trivial to define, just Grid = Node 0 0; Node X Y :: [] <-> Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1 13:29:14 so, basically, just saying create all nodes to this one, and connect to them 13:29:16 whoops 13:29:24 *Grid = Node 0 0; Node X Y :: [X Y] <-> Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1 13:29:36 :: [X Y] names the cell 13:29:45 right 13:29:50 and? 13:29:59 so when you get to [1 1] twice, you don't actually make it twice 13:30:04 now the infinite problem 13:30:06 there is not 13:30:08 in general 13:30:25 a way to know whether something will later on make a connection between, say, [0 0] and itself 13:30:41 so 13:30:43 if you mean how to represent arbitrary vectors for n-funge where n may change at runtime you would need 13:31:01 currently a *funge program using vectors at all can only be written for a specific funge 13:31:02 you'd have to generate all the infinite cells before you could enter [0 0] 13:31:05 so you'd know what it links to 13:31:11 http://forums.xkcd.com/download/file.php?id=5799 13:31:15 oklopol, eh? 13:31:43 now, the obvious solution is to detect when n-ary lists are being used as id's, as in this case, and just check what directions recursive calls can move 13:31:58 in this case, the moves are [[1 0] [-1 0] [0 1] [0 -1]] 13:32:11 these calls, that is: Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1 13:32:29 it's trivial to see there are no jumps, although this can't be done in general 13:32:30 tusho, that looks like a variant of a "main page" strip 13:32:31 ? 13:32:33 now the clever part 13:32:52 AnMaster: yes, it's from the 'make xkcd slightly worse' thread 13:32:57 the original has a flash of perl and no crash. 13:33:03 ( instead of ) 13:33:03 if there's only connections of the form ->, after some point in the recursion, you can always stop evaluation of the graph there 13:33:09 (And he doesn't hit the monitor.) 13:33:11 tusho, yes indeed, link to that thread? 13:33:19 http://forums.xkcd.com/viewtopic.php?f=2&t=22741&st=0&sk=t&sd=a 13:33:30 because in that case, you know something may later on link to [0 0], but you know [0 0] can never be added an away-from link 13:33:32 oklopol, sorry but you totally lost me quite early on and I couldn't catch up 13:33:36 :) 13:33:38 you are too smart 13:34:06 "AnMaster: if you mean how to represent arbitrary vectors for n-funge where n may change at runtime you would need " <<< i'd prolly go for a larger change in semantics 13:34:18 oklopol, oh? 13:34:28 so smart, so smart, nah, i'm just bad at explaining. 13:34:41 it would just be the number of elements followed by the values in each dimension 13:34:42 where did you drop? i can try to rephrase, this is simple stuff 13:35:00 like: null terminated string vs. a string prefixed by a length value 13:35:06 AnMaster: i get it, it's just i'd most likely have lists. 13:35:09 *Grid = Node 0 0; Node X Y :: [X Y] <-> Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1 13:35:10 there 13:35:13 oh, right 13:35:25 well there i assumed you know graphica syntax. 13:35:28 oklopol, I don't 13:35:29 smart? i doubt that. 13:35:40 i'll explain, should be simple to grasp 13:35:43 oh 13:35:44 k 13:35:50 that line was just the correction of the earlier one 13:35:53 but yeah, so 13:35:57 Grid = Node 0 0 13:36:00 this is just 13:36:16 a grid? 13:36:19 "when you create a grid, actually create the Node 0 0, and return a reference to it" 13:36:28 this is a graph definition 13:36:30 now 13:37:07 hm? 13:37:26 "Node X Y :: [X Y] <-> Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1" == "to create a node @ X, Y, create an id entry to the global node id table for it as [X Y], then create all nodes next to it, and interconnect this with all of them" 13:37:49 a bit more complex, ":: tag" just globally names the cell 13:38:12 "<-> smth" creates the node smth, and connects this to it, with a two-way connection 13:38:17 you do know what a graph is? 13:38:21 that's kinda important 13:38:21 :P 13:38:27 yes I know what a graph is 13:38:33 good, good 13:38:38 however that doesn't mean i understand it always 13:38:45 well 13:38:49 but well I think I get it now 13:38:56 okay. 13:38:58 oklopol, are you not defining a quadtree it seems? 13:39:05 quadtree? 13:39:08 what's that :) 13:39:19 http://en.wikipedia.org/wiki/Quadtree 13:39:21 ah 13:39:22 oh no. 13:39:24 actually no 13:39:32 that's very different 13:39:33 see 13:39:42 you are defining something like each cell is connected to each other 13:39:46 so not a tree 13:39:59 the thing about graphica is, the seemingly treeform structure actually becomes an arbitrary graph, because you can name cells. 13:40:33 and yeah 13:40:40 i'm doing exactly that 13:40:44 it's a 2d grid actually 13:41:04 right 13:41:14 oklopol, all of it have to be allocated right now? 13:41:21 or is it allocated as needed 13:41:30 well 13:41:32 (remember I'm a C programmer, I think low level) 13:41:38 that's exactly the infinite structure problem 13:41:43 as you can clearly see there 13:41:46 there is no size limit 13:41:52 oklopol, I would store it in some sort of hash map 13:42:02 currently, my implementation does not allow infinite structures 13:42:14 and evaluates it all right away 13:42:18 yeah, i do that too. 13:42:39 btw for an n-ary hypercube http://www.vjn.fi/oklopol/graphica.txt 13:42:55 err not -ary. 13:42:58 n-dimensional 13:42:59 because you seem to define this: 13:43:01 struct node { 13:43:01 size_t datasize; 13:43:01 void * data; 13:43:01 struct node * up; 13:43:01 struct node * left; 13:43:02 struct node * right; 13:43:04 struct node * down; 13:43:06 } 13:43:10 yes. 13:43:26 oklopol, way easier to read than "Node X Y :: [X Y] <-> Node X+1 Y <-> Node X-1 Y <-> Node X Y+1 <-> Node X Y-1" 13:43:26 that is what i do 13:43:27 :P 13:43:39 not really, if you format it correctly 13:43:47 oklopol, well for a C programmer ;P 13:43:49 but now i'm getting a deja vu we already had this discussion :P 13:43:55 we did? 13:44:00 well anyway, that C definition isn't exactly the same 13:44:05 no? 13:44:09 if you write that, the actual graph is not generated 13:44:12 that's the whole point 13:44:15 oh wait you can access by index 13:44:18 or? 13:44:30 well yes, [X Y] will contain that object 13:44:32 so you need a lookup table to find the node in fact 13:44:36 there is a global id table as i said 13:44:44 or you need to go from 0,0 downwards then sideways 13:44:51 which would be slow 13:45:05 well, in this case all id's a lists of length 2, so it will make a 2d array. 13:45:08 oklopol, anyway this is far from an optimal data structure to store funge code in 13:45:11 *id's are 13:45:16 you want a hash map 13:45:23 that allows negative indexes too 13:45:34 because -1,-1 is valid in Befunge98 13:45:38 completely valid 13:45:42 duh 13:45:49 "duh"? 13:45:51 [-1 -1] would also be generated by that 13:45:56 ah 13:45:56 well duh, why wouldn't it be 13:46:02 um 13:46:05 ok 13:46:24 anyway, you can store into a 2d grid even with negatives 13:47:15 either by reallocating, or having multiple grids all extending to different directions 13:47:30 but this is not the programmer's problem 13:47:45 anyway, that structure of yours 13:47:58 is nothing but a thingie, that takes 4 id's and connects to them 13:48:06 yes it needs more code 13:48:07 you can do that with graphica too 13:48:10 to allocate and set it yp 13:48:13 up* 13:48:17 Node A B C D <-> A <-> B <-> C <-> D 13:48:28 that's not the actual form of course 13:48:30 i''ll whoe 13:48:32 *show 13:48:35 *i'll 13:48:41 however no way I would use that type of data structure for befunge, I would use a hashmap of some sort 13:49:14 http://www.vjn.fi/pb/p446352642.txt 13:49:22 a node is something that connects to four given things 13:49:33 i'd say that's quite a lot prettier than the C thingie 13:49:36 but whatever 13:49:43 err, that type of data structure? 13:49:52 graphica has nothing to do with computers, man. 13:49:58 it's a language for defining graphs. 13:50:23 so you can't exactly talk about structures, if you're referring to physical representation 13:50:35 graphica does not define what structure should be used 13:51:32 just like Ob is just a way to add declarative, intelligent events to some preset external functionality, graphica is just a way to define arbitrary graphs for use in some other lower level program. 13:51:51 hm 13:52:19 "preset"? scratch preset. 13:52:36 well preset for the current use of the language, but just confusing there 13:53:02 -!- atsampso1 has quit (Read error: 54 (Connection reset by peer)). 13:54:00 currently, you can't have values for the nodes, partly because haven't decided on the operator for adding them :P 13:54:17 = is redirection, :: is tagging, <-, <-> and -> are connections 13:54:28 what should be "setting the value of" 13:54:59 perhaps >> could be redirection and = could set the value 13:55:07 although i'd have to change the cube 13:56:48 -!- atsampson has joined. 13:57:36 AnMaster: anyway, this is what it looks like with newlines and tabbing: http://www.vjn.fi/pb/p466261364.txt 13:57:48 i'd say that's pretty darn pretty 13:57:52 don't you think so, atsampson? 13:57:58 hm 13:58:32 oklopol: in a purely aesthetic sense, certainly 13:58:43 atsampson: see a problem with the semantics? 13:58:55 this should define a 2d grid infinite in all directions 13:59:07 what's the language? 13:59:12 graphica 13:59:21 it's mine, and the infinity part is not yet implemented 13:59:40 just realized today how it can be done easily, made the language ages ago 14:00:45 oklopol: do you have a description of it somewhere? 14:01:18 oklopol, yes where are the specs 14:01:24 i have one that's slightly outdated somewhere 14:01:27 well 14:01:45 just lacks the infinite structures really, and that's basically an implementation detail as it doesn't change the language 14:02:02 hmmhmm, just wonder *where* i have it 14:03:49 http://www.vjn.fi/pb/p123363511.txt 14:04:08 i was too lazy to write a declarative explanation of the semantics :P 14:05:58 the two-dimensional grid in those examples is much less pretty, but should be grokkable 14:06:06 yes, that's neat :) 14:07:04 do you need the [] in the tag in your short example? 14:07:10 hmm 14:07:14 probably not 14:07:26 in the node example, no i actually wouldn't 14:07:35 it should be semantically equivalent either way 14:07:54 there were no lists actually when that spec was written 14:08:30 i have them now, although functional programming without first-class functions sucks ass :P 14:08:34 so 14:09:11 http://www.vjn.fi/oklopol/graphica.txt 14:09:15 as you can see, wtf. 14:09:36 not that it's that complicated, it's just very hard to read 14:09:48 and there isn't really a way to abstract it further 14:10:18 basically the point is, err 14:10:37 you create the node [0 0 0... 0] 14:10:57 where 0 exists n times for the number of dimensions n given 14:11:36 you then do some weird redirection shit to get each node where one zero has been changed [] 14:11:39 *-[] 14:11:51 and repeat, until all elements in the list are ones 14:12:18 should extend that to an arbitrary-size arbitrary-dimentional one, shouldn't be hard raelly 14:12:21 *really 14:13:20 -!- olsner has quit (Read error: 110 (Connection timed out)). 14:14:00 actually i'm not sure it's that obvious :P 14:14:27 if anyone wants to give it an attempt, go for it 14:14:48 although i doubt anyone even gets the hypercube :) i wouldn't 14:16:20 -!- ais523 has joined. 14:16:29 ais523, hi 14:16:48 hi tusho 14:16:50 I'm pretty sure I won that time 14:16:52 agh!!!! 14:16:56 ais523++ 14:16:57 ais523: well, I've been here since 11am 14:17:00 so I wasn't paying attention 14:17:04 I did plan to get you, though 14:17:05 so what? 14:17:07 tusho: that's early for you 14:17:07 you still lost 14:17:10 yes, it is 14:17:15 i normally get on ~4pm 14:17:20 i decided not to. :) 14:17:21 ais523, tusho, Deewiant: http://rafb.net/p/sCTJCz33.html 14:17:26 ais523, please check if it makes sense 14:18:54 * AnMaster pokes ais523 14:18:56 AnMaster: I would have expected P and R to be combined 14:19:01 ais523, hm 14:19:03 maybe 14:19:04 and no need to poke me, I'm trying to read it... 14:19:15 ais523: did i mention the infinite graph problem with graphica to *you*, ever? :P 14:19:32 ais523, could be a good idea, however I'm not sure 14:19:39 oklopol: I don't think so 14:19:43 damn 14:20:06 well i'll be non-graphica when explaining, you might enjoy the concept anyway 14:20:26 AnMaster: "doesn't must end with a \0 byte."? 14:20:40 err typo 14:20:50 apart from that, seems reasonable 14:20:51 remove doesn't 14:20:57 "This one must end with a \0 byte." 14:21:37 ais523, as I can't think of a sane way to say that some other parameter or return value contains the size of that one 14:22:07 AnMaster: why not use 0gnirts like everything else in Befunge? 14:22:11 or are you moving away from that? 14:22:28 length-prefix seems like it could be hard to maintain, especially on a stack which can only be edited from the top 14:22:30 ais523, yes I am in the funge108 standard too 14:22:43 ais523, the length is stored on top after all 14:22:47 ais523: the graphica way to create a graph is to create kind of a tree, so that when you call a function F, that function chooses an id to itself, then calls some set of functions that themselves make nodes, and return their id's, then F takes these id's, and connects with them 14:22:49 IFFI uses 0gnirts 14:22:59 so you get a graph from the recursion 14:23:04 ais523, and for here, well, char* types can be used to pass other stuff than strings, like say structs 14:23:04 ais523: with me? 14:23:11 oklopol: I'm not quite sure I understand 14:23:14 that you can later marshall yourself 14:23:17 ais523, if you see what I mean 14:23:21 darn, i'll show you the simplest example 14:23:40 AnMaster: sort of, couldn't you have a separate string and char* though? Then you could do C++ as well 14:24:02 ais523, uh? 14:24:13 AnMaster: C++ has a separate string type in the standard libraries 14:24:17 ais523, how the heck would I marshall to std:string from inside C code? 14:24:25 there is no way I'm adding C++ code to cfunge 14:24:33 AnMaster: by using C++ code to link them, not in cfunge itself just in a linking module 14:24:46 just like there's INTERCALness in ecto_b98.c in IFFI 14:24:46 well I'd rather not 14:24:50 but not part of cfunge 14:24:51 hm 14:25:10 ais523: 14:25:13 you construct a std::string 14:25:15 from a char* 14:25:22 tusho: yes, you can, and vice versa 14:25:22 ais523, I plan this fingerprint to be part of the official cfunge distribution, but optional at compile time (as libffi can be hard to install on some distros) 14:25:23 so he's pretty much right 14:25:40 basically libffi is both a part of gcc installed when gcj is, and a separate library, both can 14:25:44 can't* be installed at once 14:25:59 on distros like gentoo this cause a slight issue as you may see 14:26:47 I'm not sure I understand libffi at all, IFFI uses compile-time linking like everything else has done for years 14:26:51 so optional at compile time, I'll use it if it exists (with an option to disable it anyway) 14:27:00 ais523, libffi resolves at runtime 14:27:17 AnMaster: does that require both programs to be running beforehand? 14:27:24 ais523, the L and R would basically call dlopen() and dlsym() 14:27:26 ais523, eh? 14:27:31 it is for library functions 14:27:34 ok 14:27:49 ais523: http://www.vjn.fi/pb/p213633331.txt makes a graph representing a ring 14:27:51 ais523: libffi just lets you do things like 14:27:53 first you dlopen(), then dlsym(), then use libffi to marshal the data to the ABI 14:28:01 foo = mylib("abc.so"); callfunc(foo, "hello_world", 2) 14:28:04 ais523, like "what thing goes in what register" 14:28:05 not that trivial 14:28:07 but you know 14:28:11 it's basically just dlopen/dlsym 14:28:18 tusho, yes + stuff to handle the ABI 14:28:25 so #node 0 connects to #node 1 connects to ... #node n, which is tagged as #node 0, so it becomes a ring 14:28:51 asdasdasdadsd, i want someone to understand the way to resolve infinite structures :D 14:29:13 ais523: read/got that? 14:29:24 not read it yet 14:29:27 I was reading email 14:29:28 let me read it now 14:29:41 first line has a typo s/the graph a node/a node/ 14:29:57 ais523, but yes I guess making R and P one function could make sense 14:30:11 oklopol: what there is causing edges to be made between nodes? 14:30:13 except that there would be a lot of arguments in one go to keep track of 14:30:18 ais523: -> 14:30:23 it means 14:30:34 ais523, rather 2 functions with 5 arguments each than 1 with 10 ;) 14:30:40 "-> A" connect this cell to the cell A 14:31:11 oklopol, would <-> be a double linked list then? 14:31:17 AnMaster: yes 14:31:21 well not list, could be anything of course 14:31:22 you can also do <- 14:31:38 yeah, in this case it would be a double linked list 14:31:42 *doubly 14:31:48 do you name the connections? 14:31:53 no, not currently 14:32:06 so you can't have one called up and another down? 14:32:07 or such 14:32:17 that's going to be added 14:32:18 /*@maynotreturn@*/ uint32_t ick_dounop(char*, uint32_t, uint32_t, int, unsigned long, unsigned long, unsigned long, ick_type32(*)(ick_type32), ick_type32(*)(ick_type32), ick_type32(*)(ick_type32), void(*)(ick_type32, void(*)()), void(*)(ick_type32, void(*)()), void(*)(ick_type32, void(*)()), char*); 14:32:19 or one called previous and another next, and a third down 14:32:21 but not yet possible 14:32:21 oklopol, ^ 14:32:26 -!- olsner has joined. 14:32:28 yep, that would be nice 14:32:30 because that is one useful one 14:32:37 that's a real function prototype from C-INTERCAL; as you see, I don't care how many arguments a function has if it needs them all 14:32:38 could be used to represent brainfuck 14:32:41 a loop has a down 14:32:48 and especially if i add traversing, it would be useful 14:32:48 pointing to the code of the loop 14:32:53 something like that 14:32:55 yeah 14:33:08 hmm... 14:33:09 ais523, ARGH 14:33:13 let's try parsing brainfuck :-) 14:33:20 ais523, typedef each type of function pointer before 14:33:25 that makes it a bit simpler to read 14:33:50 oklopol, for speed you'd want to collapse a [-] into a "set cell to zero" 14:33:59 AnMaster: You are talking about a compiler that has a part made of idiomatic perl written in c 14:34:03 why would he make it easier to read? Honestly. 14:34:05 and +++ to "3x +" 14:34:07 AnMaster: it was worse before, comp.lang.c suggested removing the params from void(*)() to get rid of some cells 14:34:17 ais523, heh 14:34:22 s/cells/casts/ 14:34:46 tusho, well making it easier to read would really be a strange action right? 14:34:58 tusho, so in a round-about way it could be esoteric ;P 14:35:03 AnMaster: heh 14:35:41 tusho, I believe it is justify almost any action as esoteric in a way similar to this 14:35:58 -!- ais523 has quit (Remote closed the connection). 14:36:14 -!- ais523 has joined. 14:36:31 ais523, what was the last you saw? 14:36:44 tusho, well making it easier to read would really be a strange action right? 14:36:55 tusho, so in a round-about way it could be esoteric ;P 14:36:55 AnMaster: heh 14:36:55 tusho, I believe it is justify almost any action as esoteric in a way similar to this 14:39:54 -!- Corun has quit ("This computer has gone to sleep"). 14:40:10 -!- Slereah__ has joined. 14:43:25 ais523, actually I can see reasons to not combine R and P 14:43:34 http://www.vjn.fi/pb/p532125636.txt <<< okay, i added named returns, as graphica doesn't have anything for that 14:43:44 1) not combining makes error handling easier, you know a bit more why it reversed 14:43:53 2) tracking all parameters as I said above 14:44:17 -!- pikhq has joined. 14:44:29 Nodefunctioncall Arg1 Arg2.. Argn ?? Ret1 Ret2 Ret3, although ? in the file 14:44:50 oh btw fingerprint will be CFFI 14:44:59 Ret1.. Retn now become free variables that the function call should set using !! 14:45:11 thus getting a prolog-like named return 14:45:11 AnMaster: so your fingerprint equals my handprint, but I don't think that will cause problems 14:45:39 indeed it shouldn't 14:45:47 and with funge108 it will get an url 14:46:00 but cfunge doesn't fully support loading by URI yet 14:46:17 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 14:46:20 ais523, oh btw you will need to add a library when you build the last cfunge for the ffungi 14:46:23 -lncurses 14:46:32 ah, ok 14:46:45 ais523: wait, what fingerprint 14:46:50 tusho: IFFI 14:46:51 (name) 14:46:53 ah 14:46:58 why is AnMaster calling it IFFI 14:47:01 no 14:47:01 why not CFFI 14:47:02 I'm not 14:47:04 ... 14:47:05 but the clash is on CFFI 14:47:07 duh 14:47:11 oh btw fingerprint will be CFFI 14:47:12 .... 14:47:14 ais523: but yours is IFFI 14:47:15 my fingerprint's IFFI, AnMaster's is CFFI, my handprint is CFFI 14:47:18 see 14:47:20 why is your handprint CFFI 14:47:22 that makes no sense 14:47:22 hmm 14:47:26 it should be IFFI 14:47:28 tusho: cfunge for intercal 14:47:34 it should still be IFFI, ais523 14:47:34 if it was IFFI it would have nothing to do with cfunge 14:47:51 uh IFFI is to do with cfunge. 14:47:52 which I think is wrong, it should at least share some of the letters as it's effectively the same program 14:47:54 * AnMaster gets some popcorn and watches the fight 14:48:01 AnMaster: shut up 14:48:05 tusho: no, IFFI's for Intercal-like Foreign Function Interface 14:48:11 which has nothing intrinsically to do with cfunge 14:48:12 ais523: i thought it was just for cfunge 14:48:14 OK 14:48:20 that's as it should be, handprint = interp, fingerprint = semantic 14:48:23 s/$/s/ 14:48:27 tusho, btw I got an idea, if you want TRDS in cfunge, make a patch 14:48:39 AnMaster: like I want to hack your crazy code 14:48:42 and if not, just shut up about it 14:48:43 AnMaster: but it would change every single line of your program, probably 14:48:47 nobody would want to touch that with a 10 foot pole 14:48:52 p.s. TRDS TRDS TRDS TRDS TRDS TRDS TRDS 14:48:54 ais523, yeah not saying I would accept it 14:49:05 ;Å 14:49:06 er 14:49:08 ;P* 14:50:18 okay i fixed quite a lot, the first one was total crap 14:50:19 http://www.vjn.fi/pb/p251463225.txt 14:50:23 luckily no one read it :P 14:50:27 anyway, that's a brainfuck parser 14:50:33 interesting 14:50:34 -!- Slereah2 has joined. 14:50:39 should work now, gave it a but more thought 14:50:49 (::) is the current node id 14:50:51 oklopol, where is an implementation so I can test it? 14:50:53 because i'm not naming these 14:50:56 for graphica 14:50:56 oklopol: so it's basically recursion, but making a graph as you go along 14:51:04 ais523: yes, except there's a but 14:51:06 hmm... that looks like it might compile into Prolog nicely 14:51:14 you can give id's to things 14:51:23 and connect to id's instead of calling a function 14:51:28 so you can do stuff like my ring there 14:51:29 oklopol, no implementation? 14:51:44 AnMaster: there is one, but i've added a few constructs to make this work 14:51:51 hm ok 14:52:01 (::) doesn't exist in it, ?? doesn't exist in it, and !! doesn't exist in it 14:52:04 specifically 14:52:14 ...and at the end of the day this may win in beauty, but C based implementation will win in speed... 14:52:20 as usual... 14:52:27 (no offence meant) 14:52:43 well i don't really see your point, but yeah, that is prolly the case 14:52:56 except in C, you'd prolly not parse at all, as it's just so fucking complicated :P 14:53:04 hm? 14:53:16 oklopol, brainfuck is not very complex to parse 14:53:43 you just load it into a tree, doing some on the fly optimizing (combining ++-- and such, >>>>, [-] and some more) 14:54:01 AnMaster: Interesting esolang! By the way, I wouldn't write any serious programs in it, because it's slower than C. Wow. 14:54:10 tusho, not saying that 14:54:12 :D 14:54:23 tusho, erlang is slower than C, yet erlang got other strengths 14:54:42 same for a lot of other non-esoteric languages 14:54:46 it is all about what you want to do 14:54:48 well i would say graphica is by far the easiest way to make a graph. 14:55:05 i simply don't know any notation nearly as nice for it 14:55:17 well that is it's strength then 14:55:22 oklopol: I must spec up eodermdrome some time, it has an even nicer (or at least more eso) notation 14:55:34 tell me 14:55:45 although you can't specify graphs with more than 26 nodes at a time, that should be a clue, but you can combine them to make larger graphs 14:55:54 however I'm just saying, you can't get much more faster than a good C compiler, asm if you are *really good* at it, but I couldn't write faster asm than C 14:56:10 simply because most of the time the C compiler generates quite good code 14:56:14 oklopol: just a string of letters, each letter represents a node, adjacent letters represent arcs between nodes 14:56:18 thus eodermdrome = K_5 14:57:07 ais523, wait, you mean it is like ascii art? 14:57:11 that could be a nice idea 14:58:13 +--------c 14:58:13 | ^ 14:58:13 | | 14:58:13 +->a<--->b 14:58:27 not sure how to handle crossing lines 14:58:56 also you couldn't have more than 4 connections I guess 14:59:28 ais523: can't use non-alphabetical? 14:59:29 (incidentally, that word was invented for that purpose, and not by me) 14:59:29 should be 255 14:59:29 ais523: that doesn't sound very extendable 14:59:29 err 14:59:29 256 14:59:30 oklopol: well you use it to specify bits of graphs, and build them out of that 14:59:30 can you show me a ring? 14:59:30 oklopol: abcdefga 14:59:30 can you show me a parametrizable 14:59:30 one 14:59:31 oklopol: you'd have to get input somehow, eodermdrome's a bit of a tarpit 14:59:31 and you'd build it from a small ring by making it bigger 14:59:32 for instance you could start with abcdec 14:59:32 anyway that's the basic idea of graphica too, i will have ways to do that exact thing, except i might not have that nice a notation 14:59:32 well 14:59:32 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 14:59:33 and have a rule edcbca edcbcfa 14:59:33 perhaps i could let you use eodermdrome as a kinda syntactical extension for shorthands, you'd get your name on the credits :P 14:59:33 which adds an extra element to the ring, at the 'tail' I put there to give a starting point 14:59:33 hmm 14:59:33 rings of various sizes are one way to store data 14:59:33 also, it's a rewriting lang 14:59:34 and ideally you use it to write poetry, like in Haify 14:59:34 s/Haify/Haifu/ 14:59:34 ah rewriting. 14:59:34 yeah that's nice 14:59:34 also, the initial string that's rewritten from wouldn't be user-specifiable, but instead thequickbrownfoxjumpsoverthelazydog 14:59:34 well, the graph that that turns into 14:59:40 wtf, I lagged a lot 14:59:50 AnMaster: no, it isn't like ASCII art, you can use a letter more than once and it refers to the same node each time 15:00:03 i.e. eodermdrome has 4 connections to the e, but eodermdromes would have 5 15:00:13 " ais523: can't use non-alphabetical?" and " well, the graph that that turns into" came at the same second 15:00:26 must have been some really bad lag there for a while 15:00:36 AnMaster: probably your connection went strange for a while, that happens to me every now and then too 15:00:43 what 15:00:46 i didn't see tusho say that 15:00:55 i did 15:00:56 oh 15:00:56 :p 15:00:57 oklopol, quite a bit ago 15:00:58 up there 15:04:26 actually it wasn't my connection ais523 I think 15:04:35 I think it is between freenode servers 15:04:43 or was rather 15:05:05 ais523, it isn't ctcp pong... 15:05:07 * Ping reply from ais523: 1.32 second(s) 15:05:10 I got that before 15:05:19 AnMaster: well, why can't I send you a CTCP pong when you ping me/ 15:05:24 s/\//?/ 15:05:24 -!- Slereah__ has joined. 15:05:25 no reason 15:05:33 ais523, except it contradicts the specs 15:05:37 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 15:05:39 and stop spamming tusho 15:05:43 ctcp has no specs for messages 15:05:45 it's extensible 15:05:56 yay: 15:05:57 abcdec with edcbca edcbcfa, can you show me how that actually evolves? 15:06:07 can b represent multiple nodes? 15:06:14 ! CTCP flood from tusho, automatically putting on ignore for 5 minutes 15:06:17 hehee 15:06:21 awesome 15:06:21 oklopol: the letters only matter within an expression 15:06:24 can AnMaster see this 15:06:26 tusho, ctcp ignore only 15:06:28 ais523: i know 15:06:29 aww 15:06:30 not other types of messages 15:06:35 can you show the evolution? 15:06:37 * tusho can AnMaster see this 15:06:39 did you see that AnMaster 15:06:41 and each letter only represents one node within an expressoin 15:06:42 yes I did 15:06:57 so abcdec becomes abcdefc becomes abcdefgc and so on 15:07:00 tusho, and now I removed the ignore for other types of CTCP too 15:07:03 forever 15:07:20 you need a more complicated rewrite expression to put bounds on it 15:07:27 but it shouldn't be too hard to do, say, a BCT interpreter 15:07:35 BCT? 15:07:41 bitwise cyclic tag 15:07:44 ah 15:07:47 * AnMaster googles 15:07:51 out of all the langs I know, it's probably the easiest to implement 15:07:56 [[e:Bitwise Cyclic Tag]] 15:08:01 umm... http://esolangs.org/wiki/Bitwise_Cyclic_Tag 15:08:18 ais523: iota is easy in languages with good functionality 15:08:39 tusho: this is langs with bad functionality I'm talking about, the langs in which even implementing Brainfuck's a stretch 15:09:12 ais523: but if the initial state is abcdec, then how can it even be matched with edcbca? 15:09:33 wouldn't b represent the de in c -> d -> e -> c then 15:09:50 oklopol: the first expression is a triangle with a two-element tail 15:10:06 whereas the second expression is a Y shape with one side two elements long and the other two one element long 15:10:09 s/element/edge/ 15:10:18 so they match each other 15:10:39 however I got the rewrite expressions a bit wrong, because you can't reuse letters unless they correspond to each other 15:10:46 err 15:11:02 it should be edcbca edfbfga 15:11:09 rebooting, be back soon 15:11:11 -!- ais523 has quit ("rebootin"). 15:11:25 oh, right. got it 15:12:16 simple to write, but takes a sec to actually read 15:12:36 tusho, didn't ais use BCT for that proof he won a lot of money for? 15:12:52 no 15:12:54 i don't think so 15:13:08 what was it then he implemented in said language? 15:13:13 AnMaster: why not read the paper 15:13:21 http://www.wolframscience.com/prizes/tm23/TM23Proof.pdf 15:13:24 tusho, well iirc it was BCT, but I may be wrong 15:13:31 no 15:14:00 it involves cyclic systems 15:14:01 not bct 15:14:05 ah 15:14:11 well close then 15:14:20 -!- olsner has quit (Connection timed out). 15:14:44 not really. 15:15:07 tusho, two of the words matches ;P 15:15:07 hmm 15:15:10 not sure 15:15:11 -!- ais523 has joined. 15:15:16 "The main part of the proof proceeds by showing that the initial conjecture (conjecture 0, that system 0 can emulate any cyclic tag system for an arbitrary number of steps (and a few extra conditions)) is either 15:15:16 " 15:15:19 ais523: is the cyclic tag in your tm23 proof a BCT 15:15:22 or another cyclic tag 15:15:25 maybe not BCT but a CT at least 15:15:32 ais523: that notation is awesome 15:15:39 hi tusho 15:15:43 tusho: it's just plain cyclic tag 15:15:45 well, it could be either 15:15:47 it doesn't read from source, it compiles it into a crazy representation 15:15:49 and BCT is just one particular notation for CT 15:16:03 ais523: that notation is awesome <-- what one? 15:16:06 ais523: also you link to wolframprize.org 15:16:09 that graph notation 15:16:10 that domain does not go anywhere 15:16:12 did it ever? 15:16:17 tusho: yes, it did 15:16:21 has it gone down? 15:16:24 it used to be the main URL 15:16:27 ais523: WOLFRAM ARE EVIL THEY BREAK URLS 15:16:29 AnMaster: my graph notation, I expect 15:16:33 ah 15:16:41 ais523: i do admit that's a nicer way to represent a certain graph 15:16:48 tusho: the URL works for me 15:16:50 was it ever published in that Complex Systems thing ais523? 15:16:57 -!- RedDak has quit (Read error: 104 (Connection reset by peer)). 15:16:59 tusho: no, it probably will be eventually 15:17:06 but the paper's still being worked out 15:17:06 ah, science 15:17:09 such a fast-moving world 15:17:09 :) 15:17:27 ais523: i love how they link to the mathematica version of the programs right next to your proof 15:17:29 oklopol: your lang's probably better for expressing graph operations than mine, I just wanted a tarpit graph-rewrite lang 15:17:31 like 'PLESAE IGNORE THE PERL' 15:17:38 ais523: there are no graph operations 15:17:54 it's better for representing the actual graph structures 15:18:02 tusho: well the Perl's a factor of N faster than the Mathematica, even though I tried to optimise the Mathematica to a decent speed, I just failed 15:18:07 oklopol: ah, yes 15:18:16 ais523: mathematica is based on term-rewriting 15:18:16 but 15:18:19 that pretty much says it all 15:18:23 -!- Slereah2 has joined. 15:19:12 you could do something like let you define a starting pattern, then have a syntax for doing substitutions n times 15:19:23 this would make something like a ring easy to do 15:19:54 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 15:19:59 tusho: I know it is, and tried to optimise for it 15:19:59 -!- ais523 has quit (Remote closed the connection). 15:20:07 -!- Corun has joined. 15:21:06 -!- ais523 has joined. 15:21:37 sorry about that... 15:21:43 [Wed Jul 16 2008] [15:19:08] maybe I should have simulated a linked list; I wonder if {a, {b, {c, {d}}}} is faster to modify in Mathematica than {a, b, c, d}? 15:21:43 [Wed Jul 16 2008] [15:19:26] however in the end I just went with the naive way because all my attempts to modify made things worse 15:22:43 ais523: something like "1ab1 a1b => a1cb N-3" where numbers let you have concrete handles for convenience 15:23:03 yes, that would be more practical (but less tarpitty) 15:23:06 -!- Slereah__ has joined. 15:24:25 ais523: well i'm thinking more in terms of making graph shorthands for graphica atm 15:24:33 you definitely keep yours as it is 15:24:44 why add that number thing when you can just have tails 15:24:56 oklopol: I'd gathered that, just thinking out loud 15:25:03 pure graphs with no extra information are just so goddamn sexy 15:25:21 ais523: well i guess i knew that too, and was just thinking out loud :D 15:25:24 eodermdrome's pretty simple, but I don't have much of an idea how to implement it efficiently 15:25:41 say, I think I can make that strongly-typed lazy self-rewriting language 15:25:42 because I can't think of a decent way to do graph-matching 15:25:49 it requires 'chunking' 15:25:51 but i think it's possible 15:26:11 ais523: yeah, it's a complex subject 15:27:47 ais523: links go both ways? 15:28:08 oklopol: yes, nondirected 15:28:23 although you can direct them by hand using tails and dangling cycles and other little ornaments 15:28:35 true, true, i know graphs. 15:28:49 I think probably the easiest way to program in eodermdrome is to have your data store of large structures with little things hanging off them to provide information and certain types 15:29:27 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 15:30:13 is there a sort that always uses the optimal amount of swaps? 15:30:47 oklopol: interesting, you're going for writing efficiency rather than reading efficiency, and I don't know 15:30:55 well, there is of course, but I'm not sure if there's a sane one 15:31:08 bogosort can be adapted to always use the optimal amount of swaps 15:31:35 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 15:33:04 "you're going for writing efficiency rather than reading efficiency" <<< huh? 15:33:19 oklopol: normally sorts try to do the minimum number of comparisons 15:33:28 whereas you're trying to do the minimum amount of writing to memory 15:33:35 or to wherever the data's stored 15:33:38 ah. 15:33:43 well 15:33:59 is there one that always does the optimal amount of reads? 15:34:02 oh, right, ofc not 15:34:20 for a sorted list the optimal amount is 0, so that's kinda trivially impossible 15:36:53 ais523, bogosort? 15:37:11 AnMaster: the original bogosort is to rearrange the data at random, check if it's sorted, if not repeat 15:37:26 however I was thinking of a modified version where you just try all possible permutations to see which one is sorted 15:37:32 ais523, I see, fairly unlikely to be fast 15:37:42 haha 15:37:43 bogosort can fail though 15:37:49 assuming a shite random number generator 15:37:51 what about quicksort? 15:37:55 ais523's would work 15:38:05 AnMaster: no. 15:38:05 AnMaster: it's somewhat faster than bogosort 15:38:21 incidentally, there's an article somewhere on the Internet where some mathematicians wrote a paper about optimising bogosort 15:38:22 ais523, a lot I'd imagine 15:38:36 it still ended up worse than most sane sorting algorithms though 15:38:41 ais523: well it was about a few other pessimal algos too 15:38:52 all were exponential iirc 15:39:24 there is also, of course, quantum bogosort, which will hopefully never be used as it has a large chance of destroying the universe if the many-worlds theorem turns out to be false, or the anthropic principle does 15:39:27 they plotted sorting times for the test cases, sorting lists of up to length 7 :P 15:39:32 but in theory it's the only way to do an O(n) comparison sort 15:39:35 Bogosort is on average O(n × n!) 15:39:40 ais523: anyway bogosort isn't trivial to make optimal in this fashion 15:39:42 according to http://en.wikipedia.org/wiki/Sorting_algorithm 15:39:56 worst is infinite 15:39:56 AnMaster: yep, O(n) to see if it's sorted and you need O(n!) tries on average 15:39:57 hmm 15:41:05 well i guess you could do it, but i think it'd be still much slower than bogosort, as you'd have to try the same permutations many, many times 15:41:28 and "much slower than bogosort" is not good 15:41:50 yes, especially as i think it's in the order of n^O(bogosort) 15:41:56 but not sure 15:41:58 http://en.wikipedia.org/wiki/Bead_sort <-- interesting 15:42:18 * ais523 wonders if n^(n*n!) is better or worse than 2^2^n 15:42:35 the second is the order of the 2,3 Turing machine, I calculated it a few months ago because lots of people were asking 15:42:52 http://i34.tinypic.com/15ogt4k.png <-- who likeys/not likeys this 15:42:59 (it's for the top of tusho.org, obvciously (that was intentional)) 15:43:04 ais523: much worse 15:43:14 2^(n!) is worse than that 15:43:15 tusho: I like it, but fix the vertical alignment 15:43:23 ais523: it's correct, I believe 15:43:28 oklopol: ah, of course 15:43:31 textedit did it 15:43:31 :) 15:43:33 tusho: it looks off-centre 15:43:41 as in the section sign dips too low relative to your name 15:43:48 ais523: it's meant to, I think 15:43:50 probably because the word "tusho" has no decenders 15:43:53 exactly 15:43:55 s/decenders/descenders/ 15:43:56 so that's correct 15:44:05 tusho: looking right is usually better than being right in graphic design 15:44:07 besides, it looks kinda nice this way 15:44:16 ais523: i'm not going for graphic design 15:44:21 it's only a graphic because most people don't have the font. 15:44:24 (non-OS X users) 15:44:33 i'm more interested in -typographically- nice 15:45:36 ais523: which I think it achieves :p 15:45:45 anyway, I kinda like it like this 15:48:10 ais523: the graph rewriting is at least trivial to implement, and i think it's not *that* slow, usually 15:48:12 the gist is 15:48:24 if you have a small number of connections from nodes 15:48:34 then you don't get the exponential search problem 15:49:02 and if you do have many connections, you can often just drop most of the searching, because a node with N connections must match with one with N connections 15:49:07 1. abcdec 15:49:09 &/sp 15:49:09 a->b 15:49:12 whoops. 15:49:25 http://www.vjn.fi/pb/p152546313.txt using something like this it's at least trivial to implement 15:49:41 heuristics are, always start with the node with the largest number of connections 15:49:58 that's it, the rest is trivial recursion & backtracting 15:50:15 ais523: hmm, if there's no images or they're disabled or whatever, should I fallback to 'tusho' or '(symbol) tusho'? 15:50:18 but of course does not solve the actual problem. 15:50:33 tusho: use the HTML character entity for the section sign, in the alt text, along with your name 15:50:41 you can put something else in the tilte 15:50:44 s/tilte/title/ 15:50:44 the image is added with a css background, ais523 15:50:54 ... 15:51:01 that's actually better, ais523 15:51:08 but it doesn't give you alt text 15:51:10 because an img is for an actual image semantically 15:51:13 and yes it does ais523 15:51:15 the actual markup is

tusho

15:51:22 and css gets rid of the text and adds the background 15:51:52 oklopol: that's clever, it'll help in many situations 15:52:36 hmm 15:52:47 actually, there's another quick cut 15:52:58 let's say you're matching nodes A and B 15:52:59 hm... 15:52:59 now 15:53:05 is log n always less than n? 15:53:11 AnMaster: no. 15:53:26 so, they both have N connections, if they had a different amount, you'd backtract already 15:53:27 so 15:53:50 you take all the connections, follow them, and count the number of connections of each thing found in the other end 15:53:51 now 15:53:53 is that natural logarithm btw? 15:54:07 oklopol: are you sure on that? I thought log n always was less than n, because log 1 = 0, and it's worse on both sides of 1 15:54:07 AnMaster: depends on notation 15:54:20 ais523: right. 15:54:25 oklopol, as in big-O notation 15:54:28 for all bases > 1, that is 15:54:30 hmm 15:54:55 yeah, it's always less 15:54:58 wasn't thinking 15:55:01 anyway, to continnue 15:55:03 *continue 15:55:07 what about n log n then? 15:55:12 -!- Judofyr has joined. 15:55:15 O(n log n) vs. O(n) 15:55:20 you count the connections of each child of A, and you count the connections of each child of B 15:55:31 you then sort these lists, and do an O(n) comparison 15:55:40 only then do you need to start trying to match the children 15:55:48 which i already showed an example of 15:56:14 and, also, if A's children's child counts are [3,3,2,2,1], and thereby B's too 15:56:14 then 15:56:30 O(n log n) is worse than O(n) for large values of n it seems 15:56:51 oklopol: one bit of semantics that you might have guessed but I didn't explain, letters in both sides of a rewrite rule can have additional connections because they're where the rule 'plugs into' the graph, letters on only one side can't have any more connections than are specified in the subgraph in question 15:56:55 you just need to try to match #1A to #1B and #2A to #2B 15:57:03 either one must succeed 15:57:15 AnMaster: yes, it is, n log n is always worse than n for large n 15:57:17 (if both succeed, you better hope the next step fails ofc) 15:57:18 although it takes a while sometimes 15:57:37 ais523: i actually did *not* take that into account. 15:57:40 ais523, what about O(n √(log log n)) 15:57:52 it actually voids this optimization completely :) 15:57:59 AnMaster: still going to be worse than O(n) eventually because root log log n is unbounded 15:58:06 hm true 15:58:27 well. I guess there is no sorting algorithm with a upper bound of O(n) 15:58:59 AnMaster: there can be, but only given prior knowledge about the data 15:59:04 err 15:59:10 for instance if you know all the data are integers in a given range, you can sort in O(n) 15:59:16 O(n) is trivial unless it's a comparison sort 15:59:17 ais523, what about custom hardware, see bead sort for example 15:59:32 oklopol, yeah but then you need custom hardware right? 16:00:00 AnMaster: err, well if you count random access as O(log n), then, err, well still not 16:00:10 but usually random access is considered O(1) 16:01:05 what is the fastest sorting algorithm (not specialized for a specific data set, but generic) on "normal" PCs 16:01:11 as in no special hardware needed 16:01:17 anyway, O(n) is trivial, and the O(n lg_a n) bound for a sort using a O(1) function that sorts a list of a elements is trivially seen from the choice tree 16:01:23 *decision tree 16:01:35 AnMaster: well the one you linked, for on 16:01:36 *one 16:01:57 -!- Hiato has joined. 16:02:10 oklopol, um bead sort need custom hardware to be that fast, "O(S), where S is the sum of the integers in the input set: Each bead is moved individually. This is the case when bead sort is implemented without a mechanism to assist in finding empty spaces below the beads, such as in software implementations." 16:02:32 "O(n): The beads are moved one row at a time. This is the case used in the analog and digital hardware solutions." 16:02:56 AnMaster: bead sort's actually O(n^2) in my opinion, because you're doing n O(n) operations in parallel 16:03:09 well okay, use a less retarded counting sort then, anyway, it doesn't require much brain power to come up with a O(n) sort 16:03:12 ais523, hm 16:03:13 I think it's cheating to not count each thread separately 16:03:22 oklopol: pigeonhole sort's O(n) 16:03:30 but only works on certain data sets 16:03:38 ais523: yes, that for instance is incredibly trivial 16:04:08 Having fun with non-comparison sorts? ;) 16:04:30 pikhq: yep 16:04:56 idea 16:04:56 My preferred one is bucket sort. 16:05:00 multi-threaded sort 16:05:01 *g* 16:05:11 pikhq, in fact we are looking for the fastest one 16:05:13 Mostly because I came up with it before knowing that it was a well-known algorithm. :p 16:05:23 pikhq: Many people do./ 16:05:35 Which is understandable. . . 16:05:55 It is a fairly obvious algorithm when you start thinking about actually sorting something. 16:06:24 i like heapsort, because there actually exist people who don't know it 16:06:40 that makes it special 16:07:02 well, I'm surprised how many people don't know mergesort 16:07:05 Say, what's the unicode char for section-thingymabob? 16:07:16 given that it's easy to implement and guaranteed n log n performance 16:07:39 tusho: 0xA7 16:07:50 so §? 16:07:52 I forget how those work. 16:07:54 Heapsort is a fairly. . . Odd algorithm, IMO. 16:07:56 tusho: yep 16:08:01 apart from the question mark 16:08:02 well heapsort is rather nice, though slower in practise 16:08:08 but that clearly isn't part of the entity 16:08:15 ais523: well if one understands recursion, they grasp it in about a microsecond 16:08:25 ais523: it sucks that I even have to use an entity, i should just be able to serve it as utf-8 16:08:26 but, you know 16:08:29 editors and shit are retarded. 16:08:29 heapsort, especially when done in-place, takes a while to explain 16:08:32 Basically, I don't get it just because I don't get the idea of a binary heap. 16:08:37 which is an odd sentence out of context 16:08:46 smoothsort seems nice 16:08:53 pikhq: basically 16:08:57 it's a binary tree 16:09:08 Hmm. 16:09:13 but for all nodes n with children a and b, n tusho: most browser/webserver combinations are rubbish at handling encodings 16:09:42 ais523: well, apache is fine at it if configured 16:09:44 and browsers too 16:09:47 but it's Other Software that's the problem 16:09:53 really it's just pointless trying 16:09:57 Oh. 16:09:58 this is O(n) to build, and the sort basically consists of taking the top, which is naturally the smallest value in the heap, and then fixing the heap property 16:09:59 yes, but you'd be surprising how often the configuration isn't done properly 16:10:11 maybe in XHTML it would be better, because XML has encodings figured more or less 16:10:19 Hmm. Looking at seeing a heap stored in an array makes that make sense. 16:10:21 now as a heap is always a perfect binary tree, you can optimize this by storing the heap as a list 16:10:46 Well, that makes using a heap make sense, rather. 16:11:16 heap sort is fun, no doubt about it 16:12:05 only my minimum space quicksort beats it in coolness 16:12:11 * tusho tries to figure what entries he should clutter his new blog design with (right now I can only think "archives") 16:12:12 :p 16:12:34 also i should stop calling it minimum space as it's O(n lg lg n) afaik 16:12:39 tusho: do you have tusho.org yet? 16:13:01 no, wanna give me it? ;p 16:13:08 I don't have it either 16:14:31 tusho: what's so hard about getting it? 16:14:38 moneys 16:14:43 i mean, sure, i could get it 16:14:46 but beh 16:15:12 I support that beh... 16:15:23 oklopol: wanna support it? 16:15:25 Great. Now I'm thinking about implementing sorting algorithms in Def-BF. 16:15:28 tusho: well it's like 10 units 16:15:35 Which means that I should definitely *implement* Def-BF. 16:15:41 Rather than merely talk about it. 16:15:47 pikhq: bubblesort is the way to go 16:15:47 yes, but there's a huge difference between £0 and 1p, oklopol 16:16:10 Def-BF makes arrays trivial; I can do a lot of sorting algorithms from there. ;) 16:16:11 tusho: 10 units is nothing, no matter what the unit 16:16:17 pikhq, what about introsort? 16:16:22 pikhq, it seems popular 16:16:27 http://en.wikipedia.org/wiki/Introsort 16:16:34 oklopol: The difference is between 'nothing' and 'something' 16:16:54 pikhq, and bubble sort is O(n^2) iirc 16:17:12 Conditional vote: FOR if nobody states in a public forum during the 16:17:13 voting period that they are retracting my vote on proposal 5646, PRESENT 16:17:13 otherwise 16:17:14 er 16:17:15 Bah; bogosort. 16:17:30 tusho: Clever. 16:17:40 pikhq, if you want something useful try introsort 16:17:49 tusho: well okay, it's about less euros, to be exact, less in pounds 16:17:55 *about 10 euros 16:17:57 lol 16:18:13 introsort is an ugly sort 16:18:22 oklopol, but fast isn't it? 16:18:29 on an average computer 16:18:33 it's very good in practise 16:18:39 which is quite irrelevant 16:18:46 what about smoothsort? 16:19:07 never heard 16:19:11 I don't really like introsort 16:19:14 "The smoothsort algorithm [1] [2] is a variation of heapsort developed by Edsger Dijkstra in 1981. Like heapsort, smoothsort's upper bound is O(n log n). The advantage of smoothsort is that it comes closer to O(n) time if the input is already sorted to some degree, whereas heapsort averages O(n log n) regardless of the initial sorted state. Due to its complexity, smoothsort is rarely used." 16:19:29 ah 16:19:30 yeah 16:19:32 besides, isn't introsort still O(n log n) on contrived inputs? 16:19:37 {Digging this subject up a bit. What do we gain with this current situation other than a lot of spam? I still think editing should be disabled for the non-registered, or then there needing to be something picture code for those who aren't logged in, or something. If unregistered people really want to contribute something they could just as well register, afterall, registering to use a site shouldn't be anything extraordinary practice in modern web. --Keymake 16:19:39 s/n log n/n^2/ 16:19:41 ais523: i'm fairly sure 16:19:41 keymaker sooooooo opened a can of worms there 16:19:44 but it'll never happen 16:19:46 ais523, um no don't think so 16:19:54 tusho: I think we need an antivandalbot for esolangs.org 16:19:55 ais523: It seems like introsort is meant as a good practical sorting algorithm, not a particularly elegant one. 16:19:56 because for the forum graue specifically picked one requiring no registration & anonymous 16:20:03 so register-to-edit won't happen 16:20:03 And you, of course, go for elegance. 16:20:05 ais523: yes 16:20:09 I might write one 16:20:28 ais523, introsort basically switches to heapsort after some limit, so it's upper bound would be same as for heapsort 16:20:41 which is O(n log n) 16:20:46 purity > elegance > practicalityu 16:20:49 *practicality 16:20:52 blargh 16:21:00 AnMaster: the bit before the limit could be engineered to work badly 16:21:15 pikhq: anyway, my point was quicksort would most likely be slower than bubble sort in bf 16:21:16 p.s. the esolangs wiki tagline is Weirder Than You 16:21:21 but, an interesting subject 16:21:21 confirm via Blue Colonge skin 16:21:32 haven't seen much order talk considering esolangs 16:21:32 oklopol: Def-BF != Brainfuck. 16:21:32 ;) 16:21:53 pikhq: isn't it meant for bf translation though? 16:21:59 No. 16:22:05 tusho: yes, I knew that was the tagline, quite a good one I think 16:22:13 It's meant to be Brainfuck-esque, but for systems programming. 16:22:15 pikhq, where can I get Def-BF specs? 16:22:21 pikhq, and what about implementation? 16:22:25 pikhq: ah, i guess the name misleaded me 16:22:32 I'd hand them to you, but my bookmark is at home, not at work. 16:22:34 and the fact you can have brainfuck code in it :P 16:22:40 And the implementation? I have yet to write it. 16:22:46 oklopol: It's a superset of Brainfuck. ;) 16:23:02 yeah 16:23:10 Lessee here. . . Array access in Def-BF. . . 16:23:31 i'm considerably less interested if it's not compilable to brainfuck :P 16:23:36 i mean, sensibly 16:23:41 now food -> 16:26:18 Well, it is compilable to Brainfuck. . . 16:26:31 in theory /everything/'s compilable to Brainfuck 16:26:39 Though that would be a minor pain. Especially the bit about having a call stack. . . 16:26:43 apart from I/O mechanisms 16:27:03 Gregor's done it in C2BF, so it wouldn't be *too* painful, I guess. 16:27:09 stacks aren't too hard to implement in BF, though 16:27:32 but that's stacks of 8-bit integers or whatever the interp uses, not of call addresses 16:28:29 Well, I *think* that I have the Def-BF array access code here. . . 16:28:37 function: array[pointer, array_start] [ array_start pointer [ - ; > pointer ]] 16:29:27 Yes, it's hard to understand. 16:29:42 Erm. That's destructive of pointer. 16:30:14 function: array[pointer, array_start] [ var: tmp_pointer pointer array_start tmp_pointer [ - ; > tmp_pointer ]] 16:30:20 Viola. 16:32:52 Deewiant, well if you are there, please take a look at 16:32:54 http://rafb.net/p/V4MrQS18.html 16:36:50 -!- ais523 has quit (Remote closed the connection). 16:37:10 -!- ais523 has joined. 16:39:00 -!- ais523 has quit (Remote closed the connection). 16:39:15 -!- ais523 has joined. 16:45:41 "In order to build the Ada compiler (GNAT) you must already have GNAT installed because portions of the Ada frontend are written in Ada (with GNAT extensions.) Refer to the Ada installation instructions for more specific information. " 16:45:46 wtf 16:45:50 how did they think there? 16:45:54 AnMaster: you have to start from a binary 16:46:01 just like with many other similar projects 16:46:04 AnMaster: ghc only builds on ghc 16:46:05 ais523, what if there is no binary for a specific arch? 16:46:10 and then you write the compiler 16:46:13 compile it on itself 16:46:14 (cross-compile) 16:46:16 then move the binary over 16:46:17 ah 16:46:17 AnMaster: then you cross-compile, obviously 16:46:22 right 16:46:30 for instance DJGPP only compiles on DOS using itself 16:46:49 but you can use a Linux version of gcc to cross-compile it to get a version of DJGPP that runs on Linux and outputs DOS executables 16:46:59 then compile that with itself to get a DOS version of DJGPP 16:47:08 um, how do you get that djgpp version that works on linux? 16:47:18 oh wait right 16:47:21 you cross compile it 16:47:25 blergh still 16:48:11 well the first GNAT version couldn't have depended on GNAT I assume? 16:48:46 They probably bootstrapped the compiler. 16:48:57 or used some earlier compiler 16:49:04 gnat wasn't the first one afaik 16:49:11 AnMaster: That's ... what pikhq said. 16:49:15 right 16:49:22 Writing GNAT in a subset of Ada supported by a simple C compiler is possible. . . 16:49:29 Or even hand-compiling the Ada code. 16:49:29 why are compilers for a lang often written in the lang itself/ 16:49:32 s/\//?/ 16:49:34 AnMaster: no long long, ptrdiff_t, size_t, wchar_t, clock_t, time_t, possibly others missing 16:49:35 ais523: It's more fun. 16:49:44 maybe because people implementing a lang are likely to be proficient in that lang 16:49:46 and therefore like using it? 16:49:49 And, besides, if your language is TOTAL FREAKIN' AWESOMENESS, wouldn't you want to write the complex compiler for it in that lang 16:49:51 so that it's easier? 16:49:57 Because it's TOTAL FREAKIN' AWESOMENESS. 16:49:57 Deewiant, ah true, however that isn't easy with libffi, they are missing from there 16:50:02 Deewiant, brb, phone 16:50:05 Also. It gets you major geek points. 16:50:08 I don't know about libffi 16:50:14 * pikhq gives Gregor major geek points 16:50:20 I'm just thinking of C stuff that's missing 16:50:51 (Plof 2 has multiple implementations: a D interpreter, a Plof->C compiler in Plof, and a Plof->Js compiler in Plof) 16:50:53 AnMaster: structs 16:51:58 also, especially for a C FFI, just use 0gnirts 16:52:12 but in general for -98 just use 0gnirts 16:52:16 since everything else does 16:52:16 ais523: if i have the time, ill implement a stupid graph matcher / eodermdrome parser tonight, if you have any examples, do gimme 16:52:20 tusho: like Chris Pressey writing Shelta in itself, when the only other interp from it was in asm 16:52:27 oklopol: haven't written any yet, maybe I should 16:52:29 just saying because i don't have the time yet 16:52:29 YES 16:52:37 s/from/for/ 16:52:39 unintentional caps 16:52:41 but i prefer it that way 16:52:54 but yeah, shelta is pretty much the archetypical bootstrapping example 16:53:01 ais523: just something so i can test parsing and matching 16:53:14 dunno your rewriting semantics exactly 16:53:18 oh, actually i think i do. 16:53:22 that's trivial 16:53:32 well, one other rule: commas toggle commentness 16:53:37 e.g. ,this is a comment, 16:53:43 Haifu has that rule and it works well there 16:53:55 ais523: comments? In a tarpit? 16:54:07 tusho: BF has comments 16:54:34 yes 16:54:35 implicit ones 16:54:37 that's OK 16:54:43 it's less effort than erroring out on invalid instructions 16:54:48 tusho: I wasn't really using punctuation marks for anything else 16:54:50 thus more tarpitty than explicit comments or explicit errors 16:55:01 ais523: but this way you force people to use leetspeak 16:55:04 AnMaster: structs 16:55:07 well 16:55:10 that is hard to do 16:55:16 |-| |= |_ |_ 0! 16:55:16 how to marshall bitfields? 16:55:18 packing? 16:55:20 and so on 16:55:26 but in general for -98 just use 0gnirts 16:55:32 two reasons 16:55:41 char * will be useful when the data isn't a string 16:55:56 that allows marshalling structs 16:56:01 then separate the two cleanly 16:56:04 or maybe you already did 16:56:08 I didn't go through it in that much detail 16:56:14 but use 0gnirts where it makes sense 16:56:21 Deewiant, hm? char * here is just a binary string 16:56:43 as for "gnirts", that is what funge-108 is moving to in new places 16:56:53 yes, but where it points to a character string use 0gnirts 16:56:57 and yes, I know 16:57:07 and yes those types you mentioned, some may be useful 16:57:09 which is why I explicitly said "for -98" 16:57:11 AnMaster: gnirtslen strikes me as being much harder to handle than 0gnirts 16:57:30 ais523, oh? it allows embedding nulls in a string 16:57:38 which is kind of important here 16:57:52 maybe it should be 01-"gnirts", then 16:58:01 but yes library name could be 0gnirts 16:58:04 also your method bounds string length, whereas mine doesn't 16:58:14 ais523, you still have the problem of in-band data 16:58:33 ais523, huh? 16:58:46 you mean to the size of the funge cell type? 16:58:50 AnMaster: yes 16:58:53 -!- olsner has joined. 16:59:03 in Funge-98 there's nothing bounding string length AFAICT 16:59:24 this could be important when processing very long documents, the stack's the only place to store them 16:59:24 if you have strings bigger than size_t you're screwed anyway :-P 16:59:32 Deewiant, yes indeed 16:59:38 Deewiant: not all langs use a size_t 16:59:45 hm? 16:59:58 some langs are theoretically capable of unlimited growth in data storage 17:00:01 if your interpreter doesn't support cells of size_t size then you're also screwed anyway 17:00:07 and Funge-98's one of them 17:00:43 I changed to 0"gnirts" in the places it won't cause loss of functionality 17:01:02 http://rafb.net/p/YKOpiP40.html 17:01:36 Deewiant, anyway I looked at how to marshal complex types, like structs 17:01:48 you just have to do it manually 17:01:50 there isn't really a sane way I'm afraid. 17:01:52 pointer to struct 17:01:57 pointer to next field of struct 17:01:59 hence you get the offset 17:02:01 etc. 17:02:08 Deewiant, well I need to describe the type of the struct too 17:02:11 like bitfields 17:02:12 and so on 17:02:23 stuff which libffi can't always handle 17:02:29 bitfields are messy and not necessarily important 17:02:29 libffi can handle some structs 17:02:43 actually, they're usually padded too 17:02:43 Deewiant, I use bitfields in cfunge in some places 17:02:46 so they're just integers 17:02:58 Deewiant, sometimes they are merged with the padding of other fields 17:03:08 yes, and 17:03:18 which makes it a lot more complex 17:03:33 how 17:03:41 for example: short; int:1; 17:03:56 struct foo bar[2]; 17:04:18 Deewiant, if the int wasn't a bitfield, then there would have been a padding of 2 bytes between 17:04:24 now it is merged into that padding 17:04:27 &bar[0] <-- start address 17:04:31 &bar[0].short <-- address of short 17:04:37 Anyone want to give me a unicode down-arrow? 17:04:38 &bar[0].int <-- address of int 17:04:38 Deewiant, so what interface are you suggesting for it? 17:04:48 &bar[1] <-- end of &bar[0] 17:05:05 ↓ 17:05:12 0x2193 17:05:20 without stalk? 17:05:23 tusho: ↑ 17:05:36 ... 17:05:38 Deewiant, ? 17:05:41 without the stalk. going downwards. 17:05:51 I don't know how it would work in practice with befunge, but something like that would work, i.e. manually giving the offsets as addresses 17:05:51 tusho: I was trying to say that before your request to get you to look up 17:06:06 ah 17:06:19 Deewiant, well that needs knowledge of the details of the ABI in question 17:06:37 Deewiant, otherwise you can't know how a pointer, or a long double would be padded 17:06:37 there's 0x2304 but for some reason I can't paste it into Konversation's text box⌄⌄⌄⌄ 17:06:40 that's just an arrowhead 17:06:54 hmph 17:06:58 I just want a filled v, essentially 17:06:59 :-) 17:07:04 AnMaster: first of all, the C ABI is standardized. second of all, what does padding matter 17:07:06 I guess I need a define struct type function 17:07:10 ▼ 17:07:14 that's what you want? 17:07:17 Deewiant, padding matters for where it is in a struct 17:07:32 U+25BC BLACK DOWN-POINTING TRIANGLE 17:07:39 Deewiant, because of alignment 17:07:42 AnMaster: I direct you to my &bar[0] above 17:07:46 all the info is there 17:07:49 tusho: there's ▾ as well 17:08:00 which is apparently the same thing but smaller 17:08:10 ah yes 17:08:12 thanks 17:08:24 which one do you prefer? 17:08:33 Deewiant, um I don't get what you mean with it 17:08:41 tusho: http://www.fileformat.info/info/unicode/block/geometric_shapes/utf8test.htm and http://www.fileformat.info/info/unicode/category/So/list.htm 17:08:51 what about a short followed by a long 17:08:54 thanks Deewiant 17:08:55 :) 17:08:58 that will differ between 32-bit and 64-bit 17:09:03 ▾ seems right 17:09:04 AnMaster: you can get the position of a field in a struct by taking the difference of &struct.field and &struct 17:09:18 U+25BE, then 17:09:21 on x86: short <16 bits padding> long 17:09:34 on x86_64: short <48 bits padding> long 17:10:05 Deewiant, well if it was at the start of a struct, it would be aligned at the start 17:10:08 AnMaster: and &struct.long - &struct.short will be 16 and 48, respectively. 17:10:11 Deewiant, also this is all about resolving at runtime 17:10:18 so offsetof() doesn't work 17:10:22 someone should invent a UTF-1 17:10:26 yes, of course it is at runtime 17:10:34 there's already UTF-6, UTF-7, UTF-8 and UTF-9, after all 17:10:42 and Punycode has been described as UTF-5 17:10:47 and taking the address of something works at runtime 17:10:51 it's called 'lea', look into it 17:11:10 ais523: what would utf-1 be? 17:11:17 tusho: it would be a stream of bits 17:11:17 Deewiant, well I won't know how the struct looks until runtime, so where would I have a prepared struct to do that on 17:11:24 I can't generate one at runtime and compile it... 17:11:25 which is self-delimiting, not split into bytes in any way 17:11:26 ais523: of zeroes, rather 17:11:32 ais523: that's impossible? 17:11:43 Deewiant: no, UTF-8 uses 8-bit integers, so UTF-1 would use 1-bit integers 17:11:49 Deewiant: you just described UTF-0 17:11:56 ah, right 17:11:58 my bad 17:12:11 tusho: not impossible, in fact quite easy, you could use base-Fibonacci for instance 17:12:15 AnMaster: well, one assumes that the C program is compiled 17:12:45 the befunge program can maybe request the info via the FFI, since the C part knows it? 17:12:47 Deewiant: I assumed lea was just a clever way to get the adressing unit of the CPU to do calculations 17:12:56 s/adressing/addressing/ 17:13:11 it doesn't do anything that couldn't be done with MOV and arithmetic, I don't think 17:13:15 yes, that was its original purpose all along ;-P 17:13:24 UTF-1.5849625. 17:13:33 Deewiant, C library you mean 17:13:49 ihope: what's with those decimals? Base-fibonacci would be about UTF-1.618 17:13:49 Deewiant, and I can't see how a struct looks from a binary 17:13:50 I don't mean anything 17:14:05 Deewiant, the binary doesn't have that metadata unless it contains debug info 17:14:16 ais523: this is base 3. 17:14:25 ihope: ah 17:14:34 AnMaster: ... so you're essentially trying to implement something which allows calling C library functions without seeing the corresponding .h file? 17:14:44 Fibonacci coding, where every string is valid unless it contains a 11? 17:14:48 Deewiant, of course, that is what libffi does 17:14:51 Deewiant: that's ... what libffi does 17:14:59 I don't know anything of libffi 17:15:20 UTF-log(phi)/log(2), surely. 17:15:22 Deewiant, you tell libffi what parameters a function takes, then it handles the ABI details 17:15:23 but, so, if you have a function which takes a struct argument... how would you know what to put in, in any other language 17:15:29 like what stuff to pass in registers and so on 17:15:31 and alignment 17:16:05 AnMaster: doesn't answer my question 17:16:30 you can tell it about structs too and it fixes alignment, but the interface for befunge code would be painful 17:16:41 Deewiant, and I guess you read the docs 17:17:02 libffi docs? no, I didn't nor will I 17:17:09 no... 17:17:12 docs for whatever you call 17:17:14 and yeah, I've essentially been describing such an interface 17:17:23 and now you tell me that there's already support for that 17:17:28 so why am I talking again? :_P 17:17:58 -!- Hiato has quit ("Leaving."). 17:18:04 Deewiant, I don't parse header files when I use a native function in C#, instead I do something like: 17:18:05 [DllImport(X52_SO), SuppressUnmanagedCodeSecurityAttribute] 17:18:05 internal static extern X52Type x52_gettype(IntPtr hdl); 17:18:17 to tell it how it looks 17:18:19 AnMaster: you use C#? I thought you didn't like the Windows API 17:18:27 ais523, I have used C# + mono 17:18:30 I don't any longer 17:18:36 AnMaster: it still uses the Windows API 17:18:41 or maybe that's how you came to hate it? 17:18:42 AnMaster: your point, I do not see it 17:18:46 ais523, yep, I used to use it, but I don't use it any longer I said 17:19:03 Deewiant, my point is: what would I need a header file for!? 17:19:49 Deewiant, I saw how you did some prototypes for C functions in TERM fingerprint (commented out POSIX part, I got TERM to work using those functions btw) 17:19:56 you didn't use the C header file it seemd 17:20:00 seemed* 17:20:05 if the docs properly describe the internals of course you don't need one 17:20:09 so why would not befunge code also declare it's own extern stuff 17:20:12 but there the docs serve the equivaelnt purpose 17:20:16 s/elnt/lent/ 17:20:37 Deewiant, you looked at the header file and translated it for use in D basically I assume? 17:20:38 the point is that, at some point in time, you have to see what exactly struct Foo contains to be able to call int f(struct Foo); 17:20:43 yes. 17:20:51 so the befunge programmer have to do the same 17:20:57 yes, exactly. 17:21:22 so what's the problem with being able to tell libffi via befunge instructions "i haz a struct which contains a char and an int in that order" 17:21:28 then what was the issue? apart from missing ability to declare structs 17:21:35 where I can't come up with a good interface 17:21:38 Deewiant: you only need to know how big it is 17:21:45 to be able to pass it to a function 17:21:50 ais523: sure, but I'm assuming we don't know that 17:21:58 ais523, and if you want the info out of it, a lot more 17:21:58 putting the values in it in the first place might be difficult if you don't know its internal structure, though 17:22:05 and exactly that 17:22:12 you beat me to it 17:22:18 and that is where I can't come up with a good befunge interface 17:22:27 apart from bitfields, libffi can do it 17:22:39 just have a one-to-one mapping between libffi functions and befunge instructions? 17:22:42 I guess I have to do struct ids 17:22:46 and so on 17:22:54 Deewiant, not so easy really :/ 17:22:59 and yeah, so you support at most size_t.max structs at a time, or something 17:23:00 Deewiant, it uses a lot of pointers 17:23:12 so I need a lot of unique ids 17:23:15 well, you have to deal with pointers anyway, neh? 17:23:19 yes 17:23:21 how did you do that, actually 17:23:27 a pointer doesn't necessarily fit in an int 17:23:34 what about function pointers, too 17:23:36 see details in specs 17:23:41 " On 64-bit platforms with 32-bit funges this may be stored in some array 17:23:42 in the interpreter and the programs get an unique ID for it instead that 17:23:42 will be looked up if a pointer is passed later." 17:24:02 as for function pointers, more unique ids 17:24:18 you're too specific, "64-bit with 32-bit"... what about 69-bit with 7-bit?? 17:24:26 Deewiant, same applies of course 17:24:46 just say it generally "this is an int which represents a pointer value in some implementation-dependant way" 17:25:04 On platforms with large pointer than funge space cells this may be stored 17:25:04 in some array in the interpreter and the programs get an unique ID for it 17:25:04 instead that will be looked up if a pointer is passed later. 17:25:08 maybe that? 17:25:15 too specific 17:25:18 Deewiant, basically it would work about the same as refc 17:25:22 why an array, why not a binary tree 17:26:01 it's a spec, you don't have to talk about implementation details 17:26:14 unless you want to have subsections like "suggestions for implementers: ..." 17:27:03 well I will make it more generic 17:27:40 * ais523 just googled "C-INTERCAL" 17:27:49 anyway generic pointers are useful for 1) you don't care what it contains, 2) you need something too complex to express using the FFI, then you could use memcpy on said pointer later on 17:27:54 and got these as related links from Ohloh (which I've never heard of): CCBI, cfunge, CLISP - an ANSI Common Lisp, GNU Smalltalk, Pike 17:27:59 the first two I can understand 17:28:05 the other three not so much 17:28:08 ais523, well I can't get the other ones 17:28:16 ais523: ohloh is ... 17:28:17 uh... 17:28:19 inaccurate. 17:28:27 well, the first two were spot on 17:28:43 it missed CLC-INTERCAL, but other than that CCBI and cfunge are both pretty similar, probably with cfunge being more accurate 17:29:03 ais523, CLC-INTERCAL doesn't have an entry on ohloh 17:29:14 AnMaster: I'm not that surprised 17:29:15 * AnMaster just checked 17:29:49 and I think I added C-INTERCAL there some months ago 17:30:04 AnMaster: why? 17:30:14 ais523, why not? 17:30:17 makes sense 17:30:19 it was missing 17:30:20 I was just wondering 17:30:47 ais523, check my stack size there, for some time I added a lot of stuff that I used 17:38:06 wow... http://www.freebsdsoftware.org/lang/intercal.html 17:38:15 it seems that C-INTERCAL's being ported all over the place nowadays 17:40:27 ah well I got an idea for structs 17:40:41 ais523, does it need porting? 17:40:56 AnMaster: nah, it compiles out-of-box on FreeBSD 17:41:06 although I think they fixed the prefix thing independently of you reporting it 17:41:19 date: 1998/04/17 21:52:16; author: mph; state: Exp; lines: +0 -0 17:41:22 was the first one 17:41:24 it seems 17:42:07 ais523, is one of the change log entries a poem!? 17:42:11 1.8 17:42:12 no idea 17:42:21 v. 1.8 17:42:21 date: 2003/03/07 06:05:31; author: ade; state: Exp; lines: +1 -0 17:42:21 Clear moonlight beckons. 17:42:21 Requiem mors pacem pkg-comment, 17:42:21 And be calm ports tree. 17:42:22 E Nomini Patri, E Fili, E Spiritu Sancti. 17:42:24 wtf 17:44:09 :-DD 17:45:43 Deewiant, anyway my structs api basically allows converting structs to and from generic pointers 17:49:00 you 1) define a struct type 2) you instantiate a struct object and get a generic pointer 3) you can then set and get individual fields 17:49:15 you can also replace step 2 if you get the pointer from a function you called 17:49:25 Deewiant, does the generic idea seem sane? 17:50:17 Deewiant, ? 17:50:23 sure, why not, you just use POD functionality but of course it's befunge so I don't think it matters that much :-P 17:50:29 POD? 17:50:38 AnMaster: I do do other things you know, just because I don't answer in a minute... 17:50:42 plain old data 17:50:47 -!- sebbu has quit (Read error: 110 (Connection timed out)). 17:50:55 um... and what does this mean in this contex? 17:50:57 context* 17:51:25 it generally refers to how structs don't have any metadata, no vtable or anything, just what the definition says + padding 17:51:51 in this case I was thinking that since you manipulate them only through pointers they become kinda opaque 17:51:58 well of course, why would they have anything else? 17:52:07 in C they certainly don't 17:52:52 they could have vtables to allow inheritance, for instance 17:52:55 but they don't, and hence they're POD. 17:52:58 -!- sebbu has joined. 17:53:04 17:53:55 Deewiant, well this isn't a C++ FFI, it is a C FFI 17:54:00 so not an issue 17:54:11 you're completely missing my point 17:54:13 as usual 17:54:15 :-P 17:54:21 Deewiant, well what did you mean then? 17:54:21 2008-07-16 19:51:50 ( Deewiant) in this case I was thinking that since you manipulate them only through pointers they become kinda opaque 17:54:29 yes and? 17:54:44 there is no sane way other than pointers if you don't know data at compile time 17:55:27 I don't know if it actually matters to be honest 17:55:30 just came to mind 17:55:39 hm 17:55:55 I mean, you can still do memcpy and stuff even though it's behind a pointer... 17:56:03 shrug, guess it doesn't matter 17:56:13 except for efficiency but hey, this is befunge :-P 17:56:29 Deewiant: I hope that was sarcasm 17:56:39 haha 17:56:45 no, not for me it wasn't 17:56:49 for AnMaster it might be ;-) 17:56:50 Deewiant: well yeah 17:56:50 :) 17:56:59 hahah 17:57:19 well anyway this CFFI isn't efficient 17:57:22 I never said it was 17:57:48 it is just about: because I can 18:05:24 -!- Corun has quit ("This computer has gone to sleep"). 18:10:53 -!- Sgeo has joined. 18:15:23 -!- ais523 has quit (Remote closed the connection). 18:15:42 -!- ais523 has joined. 18:24:10 actually I can't implement struct stuff until how I understands exactly how it is done in libffi 18:24:12 the rest I can do 18:24:50 I do understand how it passes structs by value, but now how it pass them by pointer 18:26:48 `ffi_type_pointer' 18:26:48 A generic `void *' pointer. You should use this for all pointers, 18:26:48 regardless of their real type. 18:26:54 however I don't get how to convert then 18:27:04 AnMaster: by assignment 18:27:16 ais523, sure? it doesn't seem to make sense here 18:27:18 i.e. if you assign that to a struct foo*, it becomes a struct foo * 18:27:38 well at runtime using libffi I mean... 18:27:50 ais523: i'll prolly go offline soon 18:27:51 so 18:28:05 do you have any examples / a spec of some sort for the language? 18:28:20 oklopol, offline for how long? 18:28:32 AnMaster: for an unspecified amount of time 18:28:36 is that important? 18:28:55 i don't see how anyone could need me :o 18:29:10 oklopol: unfortunately not 18:29:14 it's only in my head atm, nowhere else 18:29:28 oklopol, hope you get back within a few days 18:29:31 ais523: if you feel like writing down examples, would be nice 18:29:42 AnMaster: i will definitely come back within a few days. 18:30:01 oklopol, going somewhere without internet? 18:30:03 ok, maybe this evening or something, now is not a good type for coding from my point of view, I'm sitting on a wooden chair in a cafe of a library which closes in about 30 mins 18:30:24 ais523, will you move to somewhere else with internet after? 18:30:27 I hope you do :) 18:30:31 AnMaster: no 18:30:35 ais523, :( 18:30:37 I have to get sleep sometime 18:30:40 and I'm a bit low on it atm 18:30:44 ais523, did you make the updates for cfunge? 18:30:48 AnMaster: no 18:30:51 ah ok 18:31:23 i will prolly leave like in half an hour. 18:31:29 AnMaster: well no 18:31:30 but 18:31:34 ais523, anyway the libffi will be optional, and I suspect it could cause issues when used at the same time as IFFI 18:31:39 i'm going somewhere where i will not use the internet 18:31:43 it is not impossible it does stack tricks you see 18:31:59 oklopol, ah, have fun whatever the reason is 18:32:01 and yeah, i don't mind people being nice, it's actually quite nice. 18:32:14 * oklopol has always fun 18:32:39 ais523, and libffi isn't that common, so yeah optional 18:33:29 okay i'll write the parser now, that should be a trivial task 18:34:32 ais523, I suspect CFFI will be more messy than IFFI 18:34:38 AnMaster: ugh 18:34:39 also it will take quite a bit of time to implement 18:34:48 ais523, haha 18:34:53 ais523, well maybe not 18:35:09 ais523, more mess before the preprocessor, but less messy after 18:35:16 however, it will not be feral 18:35:27 that is a main difference 18:35:43 AnMaster: I suspect it will be less full-featured than IFFI, it doesn't allow calling back into the Befunge from outside for instance 18:36:13 ais523, yes indeed, as I would need a function pointer to call back to 18:36:45 and I can't see how to do that 18:37:49 ais523, however I can't think of a lot of libc functions that I would even think about using from inside befunge, and that accepts callbacks 18:37:52 qsort maybe 18:37:56 but that's it 18:38:06 AnMaster: but what if you want to use Befunge routines in a C program? 18:38:08 atexit from in there makes no sense 18:38:13 ais523, um what? 18:38:24 AnMaster: it's not an unreasonable request, surely? 18:38:33 you mean call a befunge program from C? 18:38:38 well that isn't what this does 18:38:38 yes 18:38:50 it is not an intended goal 18:38:58 the goal here is to call library functions at runtime 18:39:06 >>> parse_eodermdrome("eodermdrome") 18:39:06 {'e': set(['r', 'm', 'd', 'o']), 'd': set(['m', 'r', 'e', 'o']), 'm': set(['r', 'e', 'd', 'o']), 'o': set(['m', 'r', 'e', 'd']), 'r': set(['m', 'e', 'd', 'o'])} 18:39:10 ais523: looks correct? 18:39:25 oklopol: yes 18:39:39 took a while, since i'm coding straight into the prompt 18:39:46 too lazy to make a file :P 18:39:55 oklopol, make a file now then 18:40:14 NEVER 18:40:14 well i guess. 18:40:16 unless you want to loose your works? 18:40:35 ais523, well afk for a few hours 18:43:43 -!- olsner has quit. 18:44:00 *lose 18:44:20 also a few lines of python isn't really that dangerous to lose :D 18:44:42 especially as most of it was stuff real languages like oklotalk hace built in 18:44:43 *have 18:44:52 oklopol: betcha python has them 18:44:53 what were they 18:45:05 err well a default value dictionary 18:45:20 and dropping all references to a certain object from a data structure 18:45:32 -!- Hiato has joined. 18:46:18 and do remember the key issue is having them built-in, i don't want to import shit. 18:47:02 gosh, a modularized standard library! 18:47:04 how evil! 18:47:06 ais523: write me a small example please, i don't wanna think! :P 18:47:09 'import x' is so hard 18:47:15 -!- 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:47:26 tusho: it's not hard 18:47:31 that's not the point 18:58:30 back 18:59:48 * AnMaster is happy to see someone else than himself being the target for tusho's sarcasm for once 19:00:06 * tusho rolls eyes 19:00:27 in fact, module systems are for losers! 19:00:40 Real men code in C and put all the code in one big file so they don't have to include anything! 19:00:40 lament: and assholes 19:01:40 lament, well I code C but split it into many files, you could call them modules even 19:02:29 They're modules because they're multiple files. 19:02:36 not really 19:03:03 it is possible to split the c files into a totally non-logical manner 19:03:09 say, one function per file 19:03:17 then include all the C files into one main C file 19:03:28 tusho: to me, 'module system' implies compartmentalized namespaces 19:03:33 making sure none of the "modules" work without any other 19:03:38 lament: this is called ``sarcasm''. 19:03:51 lament, ah... well yes I do that most time 19:04:01 I have Stack* FungeSpace* and so on for function names 19:04:03 Input* 19:04:13 there are a few in the "global" name space then 19:04:37 lament, of course these are not true namespaces like in C++ or whatever 19:04:44 http://article.gmane.org/gmane.linux.kernel/706950 19:04:47 masturbating monkeys! 19:04:55 tusho, seen it 19:06:22 lament: Real men code in C and put all the code in one big file so they don't have to include anything! <<< exactly, except unlike you i'm serious :D 19:07:51 well tusho you should stop picking on me for using posix_fadvise() ;P 19:07:53 this is worse 19:08:04 AnMaster: oklo-coding is art. 19:08:09 twisted, outsider art 19:08:10 but art 19:08:21 tusho, well mine is another sort of art then 19:08:27 annoy-tusho art 19:08:29 AnMaster: yeah ... 'awful' art 19:08:34 :) 19:08:39 modern expressionism 19:08:39 :P 19:08:42 anyway, me goes, see ya later 19:08:47 oklopol, cya 19:08:49 PREMODERN POSTEXPRESSIONISM 19:08:51 ISM 19:09:14 i'm almost finished with eodermdrome, that is, haven't started yet but i'm sure it's trivial 19:09:20 hm? Postmodern preexpressionism maybe? 19:09:21 so, you'll see that tomorrow, ais 19:09:22 right 19:09:25 not here 19:09:29 anyway, bye 19:09:30 -> 19:09:32 -!- oklopol has quit ("( www.nnscript.com :: NoNameScript 4.2 :: www.regroup-esports.com )"). 19:09:53 btw tusho, why did you change from the nick ehird? 19:10:16 i had invented it earlier, didn't really like 'ehird', and right to vanish 19:10:30 right to vanish is harder if you use your real name. 19:10:34 ah 19:10:35 true 19:11:21 anyway CFFI draft will need some more work 19:11:29 before I can even think about implementing it 19:11:49 it won't work the way I did it, but now I think I can see how to do it properly 19:14:39 tusho, also if you read the cfunge readme you would know that there are a few other fingerprints except TRDS that I won't implement 19:14:48 like? 19:14:50 I wonder why you haven't bugged me 19:14:53 tusho, see readme 19:15:11 like I've downloaded cfunge 19:15:17 tusho, haha :P 19:15:23 well I won't say 19:15:29 so that is the only way to find out 19:15:41 heck, even ccbi doesn't implement some of those 19:15:49 i am so excited 19:15:54 i will download it immediately to see. 19:16:05 tusho, well one because it contradicts Funge98 specs 19:16:57 oh? 19:17:29 yes, iirc the mycology readme or the ccbi readme mentions it 19:17:36 mycology certainly doesn't test it 19:18:30 oh wow 19:18:37 lament, what? 19:18:38 i just realized that i can't type !!!!!!111 by accident 19:18:45 you can't? 19:18:49 nope 19:18:51 different keyboard layout? 19:18:59 i think it's an OS X feature. 19:18:59 dvorak or azerty maybe? 19:19:04 lament, eh? 19:19:06 what?! 19:19:11 If i press shift and hold 1 19:19:15 yes? 19:19:25 once I release shift, it stops typing. 19:19:31 interesting 19:19:38 same with any other key 19:19:52 <3 OS X 19:19:52 yeah 19:19:54 clearly Apple want's to kill l33t sp33k 19:19:55 ;P 19:19:56 it's good behaviour 19:20:01 but a good idea 19:20:13 it's the little things 19:20:16 it's one of those things that seem completely obvious in retrospect 19:20:38 lament, well I could probably set something in X to cause same effect I think 19:20:47 maybe. 19:21:12 I think I even seen an option for it 19:21:24 but with little things, it's very important that the default setting is sane 19:21:51 and it's all about the little things :) 19:21:52 lament, defaults? blargh 19:22:04 lament, but how do you change that on os x 19:22:11 AnMaster: well, case in point: YOU didn't change your X setting. 19:22:12 AnMaster: system preferences->keyboard 19:22:13 so the shift thing works as it does on other platforms 19:22:18 if it's in there 19:22:19 you can do it 19:22:23 lament, because I don't need it 19:22:32 AnMaster: will you ever need the opposite? 19:22:36 I don't see a good case for it 19:22:42 tusho, well, nostalgia? 19:22:42 safe for games, which already override that stuff 19:22:43 ;P 19:23:04 oh yes, in games 19:23:11 because shift may mean run 19:23:12 but games already get keypresses directly 19:23:14 so they don't get that behaviour 19:23:16 they do 19:23:23 indeed 19:23:30 tusho, anyway a reason: nostalgia :P 19:23:36 not a good reason I knoiw 19:23:38 know* 19:23:54 yeah see os x is designed for using :-) 19:24:16 defaults are important because there's thousands of little things like this 19:24:28 none of which, taken individuall, matters a whole lot 19:27:47 hm I got a better idea for providing the parameter details, basically giving the info as a string of some sort 19:27:50 that I then parse 19:27:53 like say: 19:28:01 "double, double, int" 19:28:17 easier to write the befunge code than having to worry about integer values for them 19:29:07 -!- olsner has joined. 19:58:53 -!- Slereah2 has joined. 20:26:23 Deewiant, a bug in ccbi, I was implementing FRTH and got: 20:26:27 GOOD: L rolls value correctly 20:26:30 GOOD: P picks value correctly 20:26:33 both are lies 20:26:41 the functions are still empty 20:26:55 I just tested that my D in FRTH worked 20:27:26 AnMaster: a bug in MYCOLOGY 20:27:52 meh 20:27:58 ah yes 20:28:00 tusho, a typo 20:28:03 indeed 20:28:07 of course you know that if the function is empty, it doesn't work :-P 20:28:20 but if it would pop even one value it would detect it correctly :-P 20:29:06 Deewiant, I'm not clear on what they should do 20:29:08 in general I assume that the instruction at least pops the right number of arguments 20:29:19 "Forth Roll command" 20:29:23 is the only docs for it 20:29:26 I can't remember either, read up on FORTH and find out 20:29:29 and I don't know Forth 20:29:36 so look at the forth docs 20:29:41 ah well... 20:29:47 or just reverse engineer ccbi 20:29:55 * AnMaster takes the second, easier, path 20:37:04 Deewiant, ooh I was studying your stack code 20:37:11 seems you *do* care about performance 20:37:25 according to a comment in container.d lines 44 to 58 20:37:41 * AnMaster pokes tusho to inform him 20:37:47 whatever 20:38:35 tusho, http://rafb.net/p/tJYDmC47.html 20:38:43 whatever 20:38:53 also, C got /**/, D have /++/ 20:39:03 anyone with /%%/ or /--/? 20:39:28 AnMaster: /++/ is just nestable comments 20:39:31 /**/ works too 20:39:33 ah 20:39:35 interesting 20:39:38 and useful 20:39:45 why not make /**/ nestable in D? 20:40:02 because it's useful 20:40:06 after all D, unlike C++, doesn't aim for supporting C 20:40:15 tusho, how is non-nestable comments useful? 20:40:23 AnMaster: Think a bit. 20:40:36 I guess with some crazy macros it could be useful? 20:40:37 think a bit, you fucking stupid moron retard. 20:41:02 but I can't think of a place where I used the feature that /**/ aren't nestable 20:41:13 plenty of places where I wanted it nestable (in macros) 20:41:40 tusho, thought, no result returned 20:41:51 maybe lament can tell me 20:41:52 lament: I concur! 20:41:55 :-P 20:42:30 tusho, tell me then 20:43:13 -!- Slereah__ has joined. 20:43:28 AnMaster: i have no clue :D 20:43:36 lament, haha 20:43:39 so tusho, tell us 20:43:49 i'm allowed to be lazy and unhelpful 20:43:49 AnMaster: rather, it's because I first implemented a Stack before finding out I needed a Deque. 20:43:50 :-) 20:44:04 tusho: Stop reopening the bug!!! 20:44:26 Deewiant, ok, but why that comment then? 20:44:29 but sure, I care about performance, I'm just not stupid about it. :-P 20:44:40 well, it explains why we don't just use a Deque all the time. 20:44:51 ah 20:44:59 yes I can see how it would be slower 20:45:06 a stack can be pretty fast really 20:45:17 but if you need to move the base of the stack too... slower 20:47:49 AnMaster: the reason /**/ isn't nestable in D is because Walter thinks it's a good idea to be as close to C/C++ as possible if the syntax looks like C/C++. 20:48:09 I see 20:48:28 Deewiant, still I'm all for using the other arithmetic operators too! :P 20:48:49 a lot of people, including me, disagree about that, but in this case it doesn't matter since we can just use /++/ for nesting. 20:48:55 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 20:48:55 sure, but for what purpose? :-P 20:49:11 Deewiant, to poke fun at Walter 20:49:33 anyway yes there are good reasons to keep some syntax similar to C 20:49:43 less steep learning curve 20:49:44 that wasn't the point 20:49:49 but non-nestable comments... wtf 20:49:52 the point was that if the syntax is similar the semantics should also be 20:50:04 Deewiant, that makes sense in some cases 20:50:12 often there are good arguments against it though, but Walter's stubborn 20:50:15 but for this. just wtf 20:50:27 like said, for this I think it's fine 20:50:32 especially since they are useful in some cases 20:50:35 is the D language an ISO standard? 20:50:39 like C is 20:50:40 no :-D 20:50:47 what a pitty 20:50:57 then just one man can have too much power over it 20:51:09 Deewiant, ok, why are non-nestable comments useful 20:51:10 tell me 20:51:14 yeah, kinda like linux 20:51:30 they're sometimes handy in debugging for commenting out large blocks of code 20:51:58 you just put one */ at some point and keep adding /* earlier and earlier 20:52:08 hmm 20:52:25 I normally prefer to use gdb 20:52:40 to print the value at each specific time point 20:53:01 I generally prefer just printf debugging, but that's an opinion 20:53:05 there are some cases where you can't use a debugger 20:53:10 oh? 20:53:26 for instance, when the code behaves differently with and without -g 20:53:39 or when you're debugging a concurrent app running on multiple computers 20:53:54 to name two cases that I've run into :-P 20:55:44 for instance, when the code behaves differently with and without -g <-- thankfully that never happened to me 20:56:03 or even, differently with or without gdb attached 20:56:05 -!- olsner has quit (Read error: 104 (Connection reset by peer)). 20:56:07 anyway -g wouldn't make a difference, unless your program is actually reading the debug info, say if you are writing a debugger 20:56:11 i.e. -g is fine as long as you don't actually debug :-P 20:56:16 Deewiant, and in that case, try core dump 20:56:20 that would work 20:56:35 -!- olsner has joined. 20:56:58 unless you're on a machine with the hard ulimit for core dumps set to 0 :-) 20:57:15 I've actually never debugged from core dumps 20:57:33 wouldn't necessarily know what to do with one, I haven't actually looked at one in years :-P 20:57:52 haha 20:57:57 Deewiant, you run: 20:58:08 gdb path/to/program path/to/core 20:58:25 that will be like entering gdb just at the time of SIGSEGV or whatever 20:58:39 ah, handy 20:58:49 although, I rarely have bugs that lead to core dumps 20:59:12 that is because you don't code much in C I assume 20:59:23 ;P 20:59:28 could be that, but even in C not so much 20:59:39 the few segfaults that I get I can usually pin down quickly and easily 20:59:40 anyway wth did I put that music file 20:59:45 after that it's just logic errors 20:59:47 locate can't find it 20:59:55 so use find 20:59:59 but it is because /home is too big to index 21:00:06 Deewiant, yes I am doing that atm 21:01:25 hrrm not there 21:01:35 oh xine history may have it *greps* 21:01:47 aha.... on a partition not mounted by default.... 21:01:55 >_< 21:02:00 you need to get organized 21:03:02 Deewiant, aye, mount | wc -l outputs 37 21:03:14 not that 21:03:19 although, maybe that too ;-P 21:03:24 because of all bind mounts for 32-bit chroot 21:03:35 but, keep your stuff in one place 21:03:40 if it's music, it's on the music partition 21:03:41 or whatever 21:03:42 a chroot I haven't needed for over half a year 21:03:45 Deewiant, music partition? 21:03:53 I got like 100 MB of music at most 21:03:54 or music directory on the data partition 21:03:57 on the computer 21:03:58 whatever 21:04:00 in one place 21:04:33 Deewiant, well that makes no sense, some music I like is in the src partition, because it is game music from open source games I play (I use svn version of them) 21:04:41 yet I like to listen to that music anyway 21:05:06 so softlink from your music directory to there, or just copy 21:05:16 I'm short on disk space too 21:05:24 so softlink 21:05:37 too many svn checkouts 21:05:38 :P 21:05:40 So save up $200 and get a terabyte drive. :p 21:05:48 that works too. :-P 21:06:03 yeah maybe 21:06:07 200 U.S. dollars = 1 201.31664 Swedish kronor 21:06:08 hrrm 21:06:37 -!- strokov has joined. 21:06:46 -!- strokov has quit. 21:07:17 -!- ihope has changed nick to Normish. 21:07:27 NOT another bind bug 21:07:28 gah 21:07:32 -!- pikhq has left (?). 21:07:51 -!- Normish has changed nick to ihope. 21:17:28 -!- olsner has quit. 21:22:37 Deewiant, blergh 21:22:41 at FRTh 21:22:42 FRTH* 21:23:01 blergh? 21:23:08 yes blergh 21:23:14 okay. 21:23:15 anyway I can't find docs 21:23:19 Firefox can't find the server at www.google.com. 21:23:22 blergh for everyone! 21:23:24 my DNS is broken 21:23:44 hence, memorize google's IP 21:24:04 or one such IP, I guess there are many 21:24:08 209.85.129.99 21:34:19 -!- CakeProphet has quit ("lolwhut?"). 21:38:47 ah dns works now 21:39:05 ok, this is strange, L that was rather complex to implement worked on first try 21:39:16 however P that looks easy, well I can't manage it 21:40:51 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 21:41:43 -!- Hiato has quit (Read error: 104 (Connection reset by peer)). 21:42:59 aha I think I got it 21:59:04 -!- Slereah2 has joined. 22:03:40 -!- Slereah__ has joined. 22:09:04 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 22:09:24 -!- Slereah2 has joined. 22:13:39 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 22:15:11 -!- Slereah__ has joined. 22:17:50 tusho, there? 22:17:55 Yes 22:17:57 tusho, what do you think of colorforth? 22:18:36 charles moore is vaguely creepy and a little insane, colorforth is kind of neat but prone to crashing (its kind of elitist - KNOW WHAT YOU'RE DOING!!!!!!!21212), colorforthray.info reminds me of time cube. 22:18:45 I think it sucks, because as far as I understand of how it works it discriminates colour blind people. 22:19:49 tusho, right? 22:20:11 AnMaster: lol. no. 22:20:16 no? 22:20:18 he's written a paper on colorforth using just typography 22:20:22 bold, underlined etc 22:20:25 I see 22:20:34 also, rejecting technology just because it isn't available to everyone is pretty crap thinking 22:20:39 give it a try before calling judgement like that 22:20:46 it's certainly not a sole reason for anything to suck 22:20:49 tusho, what about those that can only read using braille? 22:20:58 AnMaster: i hope you're not being serious 22:21:03 -!- pikhq has joined. 22:21:11 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 22:21:27 tusho, there is a school for blind ppl just a few kilometers from here, so I got quite a few blind friends 22:21:31 so yes I'm serious 22:21:33 -!- RedDak has joined. 22:21:37 yes 22:21:43 but you can obviously do typography with braille. 22:21:48 hm 22:24:45 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 22:25:08 -!- Slereah2 has joined. 22:29:24 -!- Slereah__ has joined. 22:33:40 -!- Judofyr has quit. 22:35:24 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 22:35:42 -!- Slereah2 has joined. 22:41:27 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 22:42:26 -!- CakeProphet has joined. 22:47:53 Bye all! 22:48:55 bye 22:48:57 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 23:06:15 night too 23:14:08 -!- Slereah__ has joined. 23:19:15 -!- Slereah2 has quit (Read error: 60 (Operation timed out)). 23:43:43 -!- Slereah2 has joined. 23:49:45 -!- Slereah__ has quit (Read error: 60 (Operation timed out)). 23:56:34 -!- RedDak has quit (Read error: 104 (Connection reset by peer)). 23:56:43 -!- Slereah2 has quit (Read error: 60 (Operation timed out)).