00:00:51 well, now it at least works on the empty screen. 00:00:55 now let's try a glider.... 00:01:19 well there's a glider, but it takes ages to reach it, not the fastest impl there it :) 00:01:36 it's quite visually pleasing imo 00:01:42 happy december 00:01:53 oklopol: use http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck.php it has fat animation 00:01:53 set ms = 0 00:01:54 old news 00:01:56 and origin top left 00:02:23 oklopol: failing that ill try it in the java interp 00:05:40 flumrgh, it didn't wurk :) 00:06:01 oklopol: :{ y not 00:06:18 because i suck 00:06:25 tru 00:12:12 HUGE performance improvement: http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-canvas.php 00:12:32 Asztal: thanks :) 00:13:44 woo 00:13:52 oh jesus lord 00:13:55 that is INSANELY FAST 00:13:58 for ms=0 00:14:01 pgimeno: you are a god 00:14:29 pgimeno: my god, blink and its finished execution 00:14:29 well, the merit is yours and Asztal's :) 00:14:36 but seriously 00:14:37 that is insane 00:14:50 it does 200 steps per animation frame 00:15:01 oh 00:15:01 pgimeno: well 00:15:06 the problem with that is that you miss out on the juicy bits 00:15:10 maybe make that configuratble? 00:15:13 should just be a few lines 00:15:23 I was thinking of that, but wanted to show you :) 00:15:30 :) 00:16:04 Langton's ant now takes just a few seconds to escape at 128x128 00:16:49 pgimeno: also, you should default to black = background 00:16:49 :P 00:16:52 like everyone else 00:17:49 oklopol: 00:17:52 try your gol on this!! 00:17:53 really fast 00:18:11 if it works now 00:18:38 oklopol: set dimensions = 1000,1000, origin=topleft, animation step=0, put it in and animate 00:18:41 = best interp yet 00:18:54 ehird: the web is white! :P 00:19:08 pgimeno: so is the flash interp, but the GRID is black background 00:19:08 :P 00:19:12 and everyone says white/black 00:19:14 okay i think it works now 00:19:15 so it's just confusing 00:19:35 but i can't test a glider in the exe 00:20:02 pgimeno: haha, try whee! 00:20:05 its still slow 00:20:10 (http://forums.tigsource.com/index.php?topic=3710.msg110154#msg110154) 00:21:19 pgimeno: the main problem with your 200-per is that t he display is jerky 00:21:19 and 00:21:27 you can't see the head if it's a bouncing-ball type thing 00:21:33 so i think that configurable that would be good 00:24:33 pgimeno: heh, your interp is quite unusable now: you can't see programs running 00:24:35 since it's so fast 00:24:41 needs some of that configuring ;) 00:24:44 JJusutst a anonotthheerr brbraiainnffuucckk hahcackkeerr 00:24:50 weave does brainfork 00:24:50 lol 00:26:52 okay, reload 00:27:24 okay it may work now. 00:27:30 yay 00:27:33 i have no idea because it shows two generations :) 00:27:45 i made a glider, and it's not dying, not sure if it's working though. 00:27:52 pgimeno: does it totally redraw each time? 00:27:57 if so that's silly just redraw what needs redrawing 00:28:01 oklopol: using pgimeno's? 00:28:08 yeah the php 00:28:34 ehird: well, that's on the browser, it draws on every pixel change 00:28:43 oklopol: set ms = 0, iterations = 500 00:28:45 and animate 00:28:48 should go really fast 00:29:42 oklopol: this one: http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-canvas.php 00:29:51 the -canvas one 00:29:57 *[[en*w]*s[nw*s]*e[ws*e]*n[se*n]*w] <- someone on the forums posted this. BOXWORLD! 00:32:42 hmm... it might be working, but it's definitely not pretty. 00:32:51 oklopol: :{ 00:32:54 pastie.org the code 00:32:55 should've done it like oerjan suggested 00:33:29 i can http://www.vjn.fi/pb/p244563523.txt the code, don't know about pastieing 00:33:31 *pastying 00:34:15 the problem is showing two iterations at once, it simply doesn't look good. 00:34:24 and makes it quite hard to tell whether that's even working. 00:34:37 oklopol: also it's dog slow 00:34:38 :D 00:34:52 yes, that's true 00:35:42 reaaaaaaaaaally slow 00:35:42 oklopol: 00:35:47 you should make it migrate an entire region at a time 00:35:48 XD 00:36:00 whaddya mean 00:36:18 like 00:36:24 a glider goes straight to the next glider step 00:36:28 then it goes on to the rest of the grid 00:39:06 okay there's a bug. 00:39:08 err 00:39:21 i have no idea what you mean, unless you mean what you said, which you cannot have meant 00:39:32 oklopol: as in 00:39:34 if there's a glider there 00:39:37 make the glider go on to the next glider iteration 00:39:40 anyway if you change the first four lines to 00:39:41 then calculate all the rest of the grid 00:39:41 *[ss*]* 00:39:41 eeeeeeeeeeessssssssss 00:39:41 *ee*ee*wwww 00:39:41 wwwwwwwwwwwnnnnnnnnnn 00:39:51 a row of three 00:39:59 you can clearly see it do one correct iteration 00:40:04 then fail on the next iteration 00:40:04 yeah but 00:40:06 it takes 5 years. 00:40:06 :D 00:40:29 yeah that canvas thing is much too slow for this 00:40:50 oklopol: hard to get much faster 00:40:53 thats the fastest interp so far 00:40:54 but oklopol 00:40:58 put up the iterations per animation 00:40:59 to like 2000 00:41:01 and delay=0 00:41:27 does that do some kind of optimization? 00:43:44 oklopol: it makes it do 2000 iterations per animation 00:43:48 and not wait per animation 00:43:56 i mean 00:44:00 does that interpreter do 00:44:31 oklopol: wow, even if it does not seem to be working properly I'm impressed (and no, the interpreter doesn't optimize, except it has a jumps table) 00:45:27 i'm pretty sure it works now, had just a minor bug 00:45:46 clicky? 00:45:54 (forgot i need to forget the old values at some point, and an error naturally occurs due to this only on the second iteration) 00:46:03 Is it safe to say that the sort of person in this channel is the sort who has no need to cheat on exams/ 00:46:17 Sgeo: why? 00:46:30 I had to cheat on history exams :P 00:46:45 On my economics exam, the professor left the room for a few minutes, and I hear everyone asking things like "For 5, what did you get?", things like that 00:47:11 heh 00:47:55 i was recently the only one to score a 5/5 in one exam, i think it'd be a bit counterproductive to ask people what they answer :P 00:48:08 oklopol, lol, same here 00:48:25 There were two questions I was clueless about 00:48:31 But I would NEVER consider cheating 00:48:43 we usually have 4 questions, if you don't know the answer to 2, you fail. 00:48:56 50 question exam 00:49:03 :D 00:49:04 okily 00:49:39 i have nothing against cheating. 00:49:42 oklopol: can I see the fixed version? 00:49:44 cheating is pretty cool. 00:49:54 pgimeno: yes, not that i'm sure it still works ;) 00:50:34 http://www.vjn.fi/pb/p533314231.txt 00:50:38 that seems to work 00:50:45 it's a row of 3 blobs 00:50:59 goes vertical - horizontal - vertical ... 00:51:36 (the last cycle's value is in the bottom-left of a 2x2 square, current is in top-right.) 00:51:53 would probably be clearer if they were like next to each other or if the squares were bigger or something 00:52:08 but, it'd take me quite a while to do even a trivial change, because that's all manually done. 00:52:15 (thought it'd be a lot shorter) 00:52:53 great! 00:52:54 if you want to know what the flicker is all about, the top-left thingie is the current cell being modified 00:53:07 the one on bottom-right is where the counrer ends 00:53:09 *counter 00:53:23 the four flickering lights are the negations of the counter's cells 00:53:36 (makes the logic to check what happens to current cell clearer) 00:54:24 what about the glider? 00:55:01 that gets very confusing, i didn't check whether it works :D 00:55:10 but i can try, after this other test i'm doing now 00:56:48 -!- adimit has left (?). 00:57:03 okay 00:57:05 glider works 00:57:28 bye adimit 00:57:38 whoa 00:58:40 whoa at gol? 00:59:12 yeah 00:59:42 if you cleared the cells done it would be great too 00:59:57 what do you mean 01:00:09 err, the last values? 01:00:12 yeah hmm err indeed 01:00:20 i could do that, i just need the last row 01:00:31 lol i never even thought of that:D 01:00:40 *that :D 01:00:51 heh 01:01:05 let's see... this should be trivial 01:02:09 done 01:02:12 so 01:02:16 i code for 4 hours 01:02:41 and you fix everything in a second 01:03:41 http://www.vjn.fi/pb/p422562455.txt <<< because of the change, there's now a piece of code there that doesn't do anything. 01:03:46 just in case someone wants a challenge 01:03:49 you who? 01:03:51 wait 01:04:03 damn, it's trivial to find it, i've commented that code. 01:04:06 pgimeno: you 01:04:23 anyway 01:04:26 look, it's pretty now. 01:04:57 hmm... 01:04:59 > Weave and brainfork conventions can be used together. That is, multiple initial threads can be started using semicolons, and embedded Y's can cause further forking. 01:05:05 wonder what happens when it hits the border... 01:05:09 pew-pew-pew 01:05:22 http://esolangs.org/wiki/User:JayCampbell/weave.rb 01:05:30 for the record, the second version of langton's ant took me about 3 hours 01:06:39 hmm. wonder how long it took me to do 110 01:07:18 yay, so cool now :) 01:07:25 btw that crashes completely when the glider hits the border :P 01:07:37 what's langton's and again 01:07:49 the ant is somewhere, and it turns right or left depending on current cell 01:07:55 and flips it if something. 01:08:05 *langton's ant 01:08:47 there's a current direction, turn left and if 0, turn right if 1, flip and advance 01:08:55 s/and// 01:09:46 always flip? 01:09:50 yes 01:09:56 that's pretty neat 01:10:15 now i almost feel like making that in pf... :D 01:10:19 the second version fills the whole 2x2 square 01:10:23 how long was yours again? ;) 01:10:30 (the code) 01:10:31 which is what makes it notable 01:10:43 hmm, what do you mean? 01:10:44 err, remarkable 01:11:14 try and see: http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-langton-nonhollow.pfk 01:11:21 grr 01:11:32 try and see: http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-langton-nothollow.pfk 01:12:07 so 01:12:12 err 01:12:15 the current cell 01:12:24 stores the direction, it's not completely black, right 01:12:30 ohh 01:12:35 wait.. 01:12:41 yeah i think you need that. 01:12:51 i'll step-by-step, don't answer! 01:13:16 wait 01:13:20 now i closed the interp :D 01:13:20 ... 01:14:09 so yeah okay, that's pretty good, although i'm pretty sure you could get that compressed quite a lot 01:14:25 maybe, I didn't figure how 01:14:42 * pgimeno is seeing the r demon in life 01:15:08 can you tell me what that code does? i don't feel like reading 01:15:24 like, the gist of how you do it 01:16:11 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-langton-nothollow-commented.pfk 01:17:06 wherever it says "we came from x" it should say "our last move was x" 01:18:11 i have to go sleep now, i'll read that tomorrow 01:18:11 cya 01:18:14 -> 01:19:20 k, nite 01:50:11 paintfuck is not "borderline-esoteric" 01:53:07 mmm... define that? 01:54:27 never mind, gtg 01:55:01 warrie has there ever been an Easy interpreter? 01:58:24 there is another Easy 01:59:35 http://p-nand-q.com/humor/programming_languages/gplz/gplz_easy.html 02:00:07 and bye :) 02:00:30 moo 04:02:52 -!- Corun has quit ("This computer has gone to sleep"). 04:58:44 -!- Slereah has quit (Read error: 145 (Connection timed out)). 05:13:22 You are standing inside your ramshackle wooden hut. 05:13:35 weave plays Lost Kingdom 05:13:55 i'm going to ask jon ripley to make it multiplayer 05:13:57 lol 05:29:34 ehird: i checked your copier, it's sweet :) 05:30:07 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 06:06:13 $ ./weave.rb 99.bf 99.bf 99.bf 06:06:13 999999 bbbooottttttllleeesss ooofff bbbeeeeeerrr ooonnn ttthhheee wwwaaallllll,,, 06:06:13 999999 bbbooottttttllleeesss ooofff bbbeeeeeerrr,,, 06:06:13 $ ./weave.rb sange-archive/hello* 06:06:13 HHHELLOWelloheallo t HelloW WORWoLrlDd! 06:06:14 orld!! 06:06:16 worldis! 06:06:18 your name? 06:22:34 -!- bsmntbombdood_ has joined. 06:27:39 -!- bsmntbombdood has quit (Read error: 60 (Operation timed out)). 06:31:56 -!- Slereah_ has joined. 06:47:34 -!- bsmntbombdood_ has changed nick to bsmntbombdood. 07:38:38 -!- oerjan has joined. 07:39:10 -!- oerjan has set topic: http://tunes.org/~nef/logs/esoteric | Y RLY. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:05:54 so now i'm gluing pbrain into weave too 08:07:07 it will soon be .. an irc bot with persistent threaded cross-communicating subroutine-calling brainfucks 08:07:18 because, you know, that's exactly what the world needs 08:12:29 the world is _so_ fucked 08:20:05 -!- oerjan has quit ("leaving"). 08:47:38 -!- Slereah_ has quit (Read error: 60 (Operation timed out)). 09:02:19 -!- GreaseMonkey has quit ("I'm a thaasophobic."). 11:27:09 Heh. I tried to calculate the number of ways I could generate all the permutations of a given cycle by just shifting subsequences one step at the time. For zero-, one- and two-length cycles I got the answer 1. For a three-length cycle I got 40 within a second. But trying to calculate it for a four-length cycle, it almost froze up the whole computer :S 11:27:10 My guess is that the number is around 2*n!!/(n!^2) :) 11:38:28 -!- Slereah_ has joined. 12:18:14 -!- Sgeo has joined. 12:32:09 -!- Corun has joined. 12:38:22 decipher: thanks 12:38:24 but it only handles one-rows 12:50:12 but i am sure you can generalize 12:50:32 also, on my obfuscated interpreter the copying was quite fast 13:12:53 decipher: well, it's hard to generalize to arbitrary depth because if you just sweep through it, you eat up the walls 13:28:22 decipher: if you have any ideas, though? 13:41:14 what copyer 13:42:12 -!- Corun has quit ("This computer has gone to sleep"). 13:42:48 oklopol: paintfuck 13:42:55 it copies a line leftwards constantly 13:43:04 i.e. you can put any one line and it scrolls it 13:43:04 sloooooowly 13:43:09 i want to generalize it to any depth 13:43:11 somehow 13:43:21 mm'kay, isn't that like 10 characters of code? 13:43:28 no 13:43:33 you have to detect the ceiling/floor 13:43:35 to go right one 13:43:39 otherwise you eat the walls up 13:43:43 and never go on to the next column 13:43:54 the one-line copier is trivial ofc 13:45:40 ehird: your routine was more like a move than copy :) 13:46:07 although i am not sure if it might be possible to dynamically calculate the offset and move the head accordingly at all 13:46:18 as in, i am not sure if a true copy algorithm can be possible 13:46:27 decipher: oh, true 13:46:34 well it was a scroll 13:46:34 really 13:46:38 but 13:46:43 i dont' think you can do a generic scroll 13:46:48 its impossible to tell walls from blocks 13:46:49 UNLESS 13:46:54 you make the wall a special pattern 13:47:00 that your program detects 13:47:07 then you can't copy that pattern, but if it's weird enough it won't happen 13:47:12 true, but that's not "general" then :) 13:47:19 as general as matters :P 13:47:24 haha 13:59:44 my binary counter (may assume infinite grid): sse*ww*[e*[*nn[*s*e*wn]se[*wn*se]s*]*w*[*s[*]nw*]*en[*e]*s[*e*w]*[*e*]s*n*[*w*]s[*]*] 13:59:45 -!- Slereah_ has quit (Read error: 113 (No route to host)). 14:00:05 pgimeno: niiiiiiiice 14:00:09 hmm 14:00:13 someone make a decimal conuter 14:00:14 counter 14:00:19 -!- lostgeek has joined. 14:00:20 that OCRs the digits it outputs to add :) 14:00:30 hi 14:00:36 hi 14:00:51 hi lostgeek 14:11:34 lostgeek: context for what i was saying - 14:11:45 a decimal counter would be cool, i.e. it draws the digits and OCRs them to increment :) 14:15:58 my bday today 14:15:59 :) 14:18:01 grats AnMaster :) 14:18:08 thanks 14:18:12 :) 14:18:25 AnMaster said something? 14:18:27 (He's on /ignore.) 14:18:36 lostgeek, hm I can't remember seeing you here before? 14:18:40 at least not under that nick 14:19:04 AnMaster: I joined yesterday ;) 14:19:16 ah 14:19:24 (Context for a person who I cannot see: He's a paintfuck person.) 14:22:10 ehird: would be cool, but I think a bit hard to realize 14:22:21 lostgeek: i don't think -that- hard 14:22:35 dunno... 14:22:45 i mean, write code to output a certain digit for 0-9, then one to look at its pixels (just make them monospaced) to detect it into the head 14:22:49 then just do regular adding stuff 14:22:53 not easy, but not really hard 14:26:51 last, shorter, faster version of binary cnt: sse*ww*[e*[*nn[*s*e*wn]se[*wn*se]s*]s[*]*nw*[*s[*]nw*]*en[*e]*ss[*e*w]n*[*w*]s*] 14:30:55 pgimeno, language? 14:31:20 AnMaster: PaintFuck 14:31:26 ah 14:33:14 hm 14:35:49 pgimeno: that's not shorter... 14:39:08 binary cunt? 14:39:17 i know oklopol would say that. 14:39:25 we could just replace him with a bot and never notice. 14:39:25 probably. 14:39:29 -!- Sgeo has quit (Remote closed the connection). 14:39:30 apart from the coding skills part. 14:40:26 heh 14:41:20 to inc a binary counter, when you're on a constant 1-bit to the right of it, w[*]*w*[*e*]*, you go left, then null all ones, make the zero into a one, then go right, skip all the zeroes to land on the constant bit to the right of the counter 14:41:30 to do this constantly, add a while to that 14:41:37 what are you guys doing then? 14:42:41 wait that doesn't work 14:42:44 LOL 14:42:52 hi ais523 14:44:49 hi ehird 14:45:05 hello ais523 14:45:09 my bday today :) 14:46:44 AnMaster: I say the appropriate response, but such that ehird doesn't have a clue what I mean due to lack of context 14:47:12 I do actions by saying them to IRC. 14:48:26 [w[*w]*e*[*e*]*] <<< binary coutner 14:48:28 *counter 14:48:32 sorry, i just woke up 14:49:07 also the police calls, i couln't really tell them what the pizza attackers looked like, so they're gonna go photograph the whole staff and show me the pics :D 14:49:16 oklopol: pizza attackers? 14:49:25 yeah 14:49:40 about a week ago, i ordered pizza, and got beat up by the delivery guys 14:49:53 what sort of delivery guy does that? 14:50:02 oklopol: hahaha 14:50:12 maybe you called up the Punch 'n Pizza place instead 14:50:25 ais523: i would tell you what i think the answer is, but that would be racist. 14:50:26 [w[*w]*e*[*e*]*] <-- oklopol how can this work it will never run 14:50:38 ehird: you have to be on a constant 1 bit 14:50:42 oklopol: they were blobs of mauve goo? 14:50:50 ehird: they were FINNISH 14:51:03 !!!!!!!!!!!! 14:51:09 goddamn finns 14:51:17 scum the lot of them 14:51:38 oklopol: your binary counter is pretty awesome 14:51:46 w*[w[*w]*e*[*e*]*] 14:51:50 were you doing that same thing? 14:51:50 the full experience 14:51:58 ? 14:52:08 hmm... it seems the Door was broken again last Sunday, good thing I didn't try it 14:52:16 ehird: i mean 14:52:28 that long code there, about a binary cunt, was it that same thing 14:52:41 well no 14:52:45 it kept the previous results 14:52:46 and um 14:52:49 didn't look like yours 14:52:54 oklopol: you should make yours actually output in binary 14:52:57 instead of a soldi line 14:53:40 not sure what you mean 14:53:54 maybe i could run yours.......... 14:54:24 so okay, like that 14:54:27 i can do that.... 14:54:47 um oklopol 14:54:50 i didnt write one 14:54:50 :| 14:55:06 ehird: i mean the set {ehird, pgimeno} 14:55:09 OBVIOUSLY 14:55:11 :P 14:56:02 anyway i don't think i'll actually do it, why the fuck would i 14:57:24 oklopol: 14:57:24 *w*[[*w*]*e*e*[*e*]*w*] 14:57:30 i just made your counter simpler 14:57:30 :P 14:57:41 you made it longer 14:57:50 yes but it runs simpler 14:57:52 ohh 14:57:54 it doesn't use binary 14:57:54 a all 14:57:55 and it's not a binary counter 14:57:56 at all :P 14:58:03 oklopol: a binary counter would OUTPUT IN BINARY 14:58:06 *[w*] 14:58:10 that's faster 14:58:17 exactly 14:58:22 oklopol: so make it output in binary! :P 14:58:27 ehird: it outputs in binary, just doesn't store the values 14:58:29 0 = space, 1 = dot naturally 14:58:55 that's a binary counter, pgimeno's is one that outputs binary numbers 14:59:10 which isn't really useful, unlike a counter 14:59:28 ais523: we're talking about paintfuck 14:59:40 which is the first interesting bf dialect in ages 14:59:40 http://forums.tigsource.com/index.php?topic=3710.0 14:59:47 the thing is, the memory is actually the screen 14:59:54 so your program has to think in its output drawing format 15:00:03 langton's ant, game of life, rule 110, etc have been done 15:00:20 i'm not saying paintfuck isn't interesting, i'm just saying it's not a new idea 15:00:31 oklopol: yeah ok w/e :P 15:00:35 but ais523 hasn't seen it 15:00:35 so 15:00:42 ais523: http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-canvas.php javascript interp, it's fast 15:00:50 but what is new is someone having linked an implementation so i can play with it :P 15:01:27 * ehird makes his counter go forever 15:02:52 argh 15:02:57 i'm still here 15:03:00 doing absolutely nothing 15:04:31 *w*[[[*w*]*e*e*[*e*]*w*]*s*e*w] 15:04:34 infinite count 15:05:03 aka slowest screen fillder ever 15:05:06 *filler 15:05:56 not really, that's O(n^2) filling tiem 15:06:02 wait... 15:06:19 n*sqrt(n) is more like it 15:06:38 oklopol: after it fills the screen it then mangles the topleft and topright pixels 15:06:40 point is doing it in binary is O(2^n) 15:06:43 so it's the slowest screen filler ever 15:06:48 as it takes more than infinite time to fill the screen 15:06:51 what do you mean? 15:07:00 oklopol: it makes the topleft and topright pixels blac 15:07:01 k 15:07:04 at the end 15:07:07 infinity = -1, as we all know 15:07:15 so it's as fast as you can get 15:10:25 err..... what the fuck, still here...... 15:10:30 i'm such a slacker 15:10:34 soon i will go 15:10:39 maybe... now 15:10:41 -> 15:39:02 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/langtonsant.php - Langton's ant (unrelated to PFK) 15:39:20 not programmable though 15:39:29 AnMaster: PaintFuck 15:39:34 arrrrrrrrgh 15:39:43 gee how many times have we said "AnMaster: PaintFuck" today 15:39:53 well this time it was my fault 15:40:12 i thought i was in the other terminal window and pressed up and enter 15:45:48 hm? 15:45:59 lostgeek, did you want it? 15:46:05 err 15:46:08 did you want something 15:46:09 I meant 15:46:12 nope 15:46:15 ok 15:58:21 back 15:58:24 huh 15:58:31 forgot to say afk heh 15:58:42 ais523, and thanks btw 15:58:45 didn't see it abvoie 15:58:46 above* 16:13:33 AnMaster, hm... *poke* 16:13:40 anything interesting? 16:13:44 or busy with "rl2 16:13:45 err 16:13:47 or busy with "rl"* 16:20:45 -!- puzzlet_ has quit (Remote closed the connection). 16:20:53 -!- puzzlet has joined. 16:20:54 -!- KingOfKarlsruhe has joined. 16:26:20 mh. I got a problem with my code window... 16:26:46 lets say I have a loop like *[w*] or something 16:26:51 AnMaster: busy with things including RL 16:27:03 and some non-RL but non-eso programming 16:27:05 and my pointer is on the second * 16:27:17 and trying to recover an email that Outlook Web Access deleted yesterday 16:27:23 I spent over an hour writing it 16:27:24 now I call nextStep() and move to ']' 16:27:31 then accidentally hit back on my mouse, and couldn't get back to it 16:27:33 so I'm rewriting it 16:27:43 where I jump back to '[' 16:28:04 how I was solving it was to jump back to the left of '[' 16:28:49 but in that case my pointer is on the first * which is confusing, since I don't execute it 16:29:01 ais523, ah 16:29:12 any ideas how to solve that? 16:29:18 ais523, ouch 16:30:06 lostgeek, you move before you execute or execute before you move? 16:30:18 move before I execute 16:30:34 which solves other problems I would have when executing before moving 16:30:52 lostgeek, now I don't 1) know how similar it is to plain bf, 2) what language you are writing it in 16:30:59 but if it was C and plain bf 16:31:02 http://www.iq0.com/notes/deep.nesting.html 16:31:11 (AnMaster will hate that article) 16:31:11 I would just connect the ] node's next pointer to the matching [ 16:31:14 while I'm parsing 16:31:27 the up pointer to the instruction after 16:31:51 and the ['s down pointer to the first instruction in the loop 16:31:54 or something like that 16:32:27 lostgeek, and move before execute is sane 16:32:43 I'm working with strings (on java) 16:32:51 lostgeek: prepaer 16:32:53 *preparse 16:32:55 the code before execution 16:33:07 no idea about java 16:33:21 but I would represent the source of plain bf as a 2D linked list 16:33:37 actually to save some space I wouldn't have separate up and down pointers in the structs 16:33:43 I would have a single "aux" pointer 16:33:54 since I wouldn't need up and down in the same struct 16:34:03 need both* 16:34:39 mh ok. I added a TODO :) 16:34:42 thanke 16:34:46 thanks 16:34:52 lostgeek, but this may be totally crazy to do in java 16:34:54 I got no idea 16:35:13 AnMaster: I think there are LinkedLists in Java. But working with strings was easier 16:35:29 lostgeek: 16:35:48 public class BFNode { public char type; public BFNode stuff; public BFNode next; } 16:36:18 lostgeek: {type='[', stuff={type='w', stuff=null, next=null}, next={type='*', stuff=null, next=null}} 16:36:23 lostgeek: then just recurse to loop 16:36:27 or keep a manual stack 16:37:29 yeah. may be a good way to solve it. 16:37:31 lostgeek, well I did it like this: mmap() source bf file, write a recursive parser to build the tree, pass the tree to the optimizer (replaces ++- with +, reorganize >-<+>-< into >--<+ and such as well as replace ---- with -4) 16:37:37 then I pass it to the emitter 16:37:40 its the only way to solve it sanely 16:37:42 that emitted it as C code 16:37:42 :P 16:37:48 of course, insane is good too 16:37:50 then I used system() to call the compiler 16:37:59 AnMaster: do you replace >>>> with >4? 16:37:59 since it was a compiler, not an interpreter 16:38:05 gcc-bf really, really needs that optimisation 16:38:08 ais523, yes of course 16:38:16 in fact, I'm considering just getting it to output run-length-encoded BF 16:38:23 ais523, however it was the one with huge duff's device due to being Def-BF 16:38:25 easy enough to postprocess that into normal BF 16:38:25 but since that is dead 16:38:30 code reuse should be good 16:38:39 I have considered several other optimizing techniques 16:38:54 such as in a balanced loop try to pre-compute certain parts 16:38:56 like 16:39:07 [>++>+<<-] 16:39:10 then you could do 16:39:41 while (*ptr != 0) { *(ptr+1)+=2; *(ptr+2)++; } 16:39:42 basically 16:39:47 well not exactly 16:39:50 but something like that 16:39:54 instead of moving ptr 16:40:08 oh and decrement too 16:40:13 don't forget that heh 16:40:35 ais523, see what I mean? 16:40:51 and if number of iterations can be pre-computed... 16:40:56 well you could gain a lot 16:41:05 so it should try to track possible states 16:41:07 of all cells 16:41:21 you can *know* the state after a [-] (turned into a set zero by the optimizer) 16:41:33 then if you can compute the value it has a bit later 16:41:38 you can turn it into a set 3 16:41:40 or whatever 16:41:50 and if you know that at the start of a balanced loop... 16:41:59 well you could either turn it into a for loop or unroll it 16:42:08 -!- puzzlet_ has joined. 16:42:11 at least gcc compile for loops quite a bit faster than while loops 16:42:18 ais523, :) 16:42:27 what do you think of these ideas? 16:42:32 I assume they aren't new 16:42:46 AnMaster: I've considered similar things myself 16:43:01 however I'm unsure if I could manage to implement this 16:43:19 I mean even writing the basic optimizer was quite painful in C 16:43:27 -!- whtspc has joined. 16:43:33 some sort of tree rewriting language, hmm 16:43:36 hi 16:43:36 ais523, oil? 16:43:41 isn't that for that 16:43:44 yo 16:43:46 AnMaster: yes 16:43:49 would need a different variant though 16:43:51 whtspc: oklopol wrote a Game of Life 16:43:51 it's slow 16:43:55 something that isn't as intercal specific 16:44:00 and that is possible to actually read 16:44:01 although OIL was defined specifically for INTERCAL, it would be possible to do similar langs for other langs 16:44:06 and OIL is readable 16:44:13 ais523, do you know of any existing one? 16:44:14 at least compared to INTERCAL 16:44:20 I saw something, is there a definite version? 16:44:27 ehird? 16:44:27 AnMaster: no, or possibly I'd have used them rather than writing OIL from scratch 16:44:38 whtspc: conway's game of life 16:44:39 ais523, ah 16:44:53 ais523, still oil couldn't easily do variable tracking 16:45:02 or could it? 16:45:09 what computational class is oil btw? 16:45:28 i saw the one with the three block, amazing! 16:45:29 AnMaster: PDA, I think 16:45:32 whtspc: http://www.vjn.fi/pb/p422562455.txt 16:45:36 also 16:45:37 which on 16:45:37 e 16:46:01 cool 16:46:09 ais523, PDA? 16:46:16 you mean like a PDA computer? 16:46:17 err 16:46:19 push-down automaton 16:46:21 ah 16:46:23 hah 16:47:08 ais523, still variable tracing/tracking hm, I don't know how I would even do that 16:47:23 I mean I could try to trace the entire program but that would be insane 16:47:38 I would need to give up at unbalanced loops and so on 16:47:39 hrrm 16:47:59 I've been having insane ideas as to how to optimise unbalanced loops, etc 16:48:05 and what about new simplification possible after the first pass? 16:48:19 should you try to run it again? 16:48:19 ais523, how? 16:48:20 I like to be able to easily save programs in sort of database, do you guys use something special for that? 16:48:39 I can see how if you just reorganize a bit but leave the pointer the same at the end and the start 16:48:39 say 16:48:41 should I just open a blog to quickly paste things in 16:48:48 [>++<->+>>] 16:48:51 that could be moved 16:48:52 to 16:49:00 [>+++<->>>] 16:49:07 whtspc: umm 16:49:09 and that could be moved to 16:49:09 a filesystem 16:49:11 heard of 'em 16:49:17 [->+++>>] 16:49:22 if you wanna share it, pastie.org 16:49:27 but that is about all you can do for them 16:49:36 if you want to get a list of them, insertsomerandomwordshereandbookmarkit.pastebin.com 16:49:40 sure you could try to generate effective code 16:50:01 such as substract, add 3 to next, add 3 to pointer 16:50:11 but that is still about it 16:50:12 yeah thought about pastebin 16:50:19 ais523, so what is your idea then? 16:50:44 AnMaster: work out what's being used for what 16:51:05 ais523, it would be very hard to track what the state is at the end of the loop compared to the start 16:51:10 what cells are affected 16:51:11 and such 16:51:33 ais523, probably possible and extremely hard for a few cases 16:51:40 and impossible for the majority 16:51:44 that is my *feeling* 16:51:45 so for instance you might deduce that there's a location that's always reached by [>>>] from a particular point 16:51:46 that moves around 16:51:54 ais523, hm 16:52:06 ais523, example? 16:52:48 wow, game of life :) 16:52:55 AnMaster: not easily 16:53:21 ais523, hm ok... The worst thing is if you can't figure out, for example say it is based on user input, then figure out where you can resume 16:53:23 whtspc: also 16:53:28 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/paintfuck-canvas.php 16:53:31 new pgimeno interpr 16:53:33 really fast 16:53:45 if it wasn't for unbalanced loops it would be very very easy to find out 16:53:45 yeah using it right now for life 16:53:50 and it would also be non-tc 16:54:00 it's the best for easy use too 16:54:29 ais523, so how hm... 16:54:42 really looking forward to lostgeek things too 16:54:51 AnMaster: basically in the style of Proud, but saner 16:54:58 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 16:55:02 have a huge set of plausible assumptions to start off with 16:55:11 then given the current set of assumptions, see which are contradicted by the program 16:55:18 ais523, Proud, hm was that the uncomputable one? 16:55:23 continue iterating until you have a consistent set of assumptions 16:55:24 AnMaster: yes 16:55:36 Proud's like I suggested but with an uncountably infinite set of assumptions 16:55:42 whereas I was planning just a finite number 16:56:13 ais523, well, finite would be uh 255 * number of cells! or something like that? 16:56:25 -!- Corun has joined. 16:56:30 also 16:56:35 +[>+] 16:56:39 ais523, :P 16:56:47 ^bf +[>+] 16:56:52 fungot, ? 16:56:52 AnMaster: same core language that the rest of the arguments 16:56:56 ^help 16:56:56 ^ ; ^def ; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool 16:57:09 why didn't it say "out of time"? 16:57:17 ^bf +[>+] 16:57:29 ^bf +++++++++++++++++++++. 16:57:30 16:57:32 hm 16:57:39 ^bf +++[>++.] 16:57:39 ... 16:57:47 fizzie, is it broken? 16:58:35 ^bf ----.[>+.] 16:58:35 ü ... 16:58:37 ^bf ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 16:58:38 B 16:58:41 ^bf ----.[>+] 16:58:42 ü 16:58:51 now that doesn't look right at all 16:58:58 the out of stuff thing seems broken 16:59:04 ^bf +[] 16:59:05 ais523, yes 16:59:09 ...out of time! 16:59:14 ... 16:59:18 huh 16:59:25 ^bf ----.[] 16:59:30 ü ...out of time! 16:59:49 ais523, seems it fails for "out of cells" 16:59:58 or out of tape 16:59:58 ^bf < 17:00:19 that shouldn't even be legal 17:00:28 ^hi 17:00:30 AnMaster: that's out of tape too, just off the other end 17:00:37 ^ul (test)S 17:00:37 ^show 17:00:37 test 17:00:37 echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help 17:00:47 ais523, hm 17:01:20 o 17:01:21 o 17:01:27 oklopol: o 17:01:33 yes 17:01:35 o o oko 17:01:40 okoko 17:01:44 okokokoko 17:01:46 ais523, so how would you implement this optimizer? 17:01:47 okokokokokokoko 17:01:48 I don't know 17:01:55 I couldn't do it I guess 17:02:13 ais523, also what would the assumptions be? 17:02:15 AnMaster: I have too many toher things to think about, but I've thought about it before 17:02:26 ais523, "any cell can have any value"? 17:02:30 assumptions like "if the pointer points to this cell, it's location is always known" 17:02:39 "every third cell is 0 when this point in the code is reached" 17:02:58 ais523, yes true, but how do you find out a sane and/or initial set of these assumptions 17:02:58 "when the pointer's at cell 3n, n>100, then [<<<] always goes to cell 99" 17:03:01 that sort of thing 17:03:10 and the initial set is just full of all the assumptions we can think of 17:03:15 optimised somehow to save time 17:03:24 then it iteratively works out which ones are false 17:03:27 until it has a consistent set 17:04:23 I would do it like tracing the code flow as far as I could then make that constant initial state. For the rest of the code I would have to use another way 17:04:40 like trying to trace what variables are known at what points 17:05:02 like as soon as I have a [-] I can know that cell's state until the next bad section 17:05:11 like unbalanced loop, or input into said cell 17:05:37 -!- KingOfKarlsruhe has quit (Remote closed the connection). 17:05:45 ais523, that could work very well for gcc-bf output, but would perform rather poorly in the general case 17:05:46 or such 17:06:11 AnMaster: yes, probably 17:06:30 we'd have to test it on lots of programs to see how real BF programs were generally written 17:06:33 you would have to create an additional ruleset for the bfbasic or whatever it was called 17:06:43 and it would be nice to have it working well on BFBASIC and on gcc-bf 17:06:46 but for handwritten programs, wouldn't work well 17:07:01 AnMaster: why not? handwritten programs mostly use the same sorts of idioms as each other 17:07:07 hm 17:07:16 ais523, you should be able to add new assumptions 17:07:23 ofc 17:07:24 I mean [-] is too good to miss out on 17:07:29 "wow this cell is 0" 17:07:36 AnMaster: that's not exactly adding a new assumption 17:07:40 the assumption would be "pointer is 0 here" 17:07:46 and it would never be contradicted 17:07:55 so that one would stay in existence throughout the whole analysis 17:07:56 ais523, indeed but then 17:07:58 not added; just never taken away 17:08:03 [-]>++<+++++ 17:08:12 that can be turned into 17:08:17 AnMaster: after the > you have "left of pointer is 0 here" 17:08:25 set cell to 5, >, add 2 17:08:28 this only works if you have a huge stock of possible assumptions 17:08:49 ais523, my point is you should be able to trace cell dependencies 17:08:58 to work out you can turn that into a set to 5 17:08:59 it does trace cell dependencies! 17:09:02 ah 17:09:07 once you have all the assumptions, then you optimise 17:09:14 in this case, you get "pointer is 5 here" at the end 17:09:15 -!- Slereah_ has joined. 17:09:21 which is very easy to optimise 17:09:25 *pointer = 5; 17:09:27 ais523, yes and you need to find where that 5 is used 17:09:30 for example 17:09:36 yep, that would have been tracked already too 17:09:47 [-]>++<+++++[>+<-] 17:09:51 what about that? 17:09:58 i gave Weave pbrain-style functions last night, haven't uploaded 17:10:10 you could turn that into, set 0, >, add 7 17:10:15 so now it's weave threads + brainfork runtime threads + bprain functions 17:10:22 ais523, not sure you could make the program do that however easily 17:10:27 the compiler I mean 17:10:53 ais523, or? 17:10:58 let's see, I'm thinking 17:11:14 before the second [, we have "pointer is 5" 17:11:37 yep and right of pointer is two more than at the start of the section 17:11:43 yes 17:11:48 we can calculate that the loop runs *pointer times 17:12:01 yes and then we can unroll it, 17:12:02 so we can replace it with >+<->+<->+<->+<->+<- 17:12:12 and then it's easy from there 17:12:14 and reorder that 17:12:26 it would be more interesting if it was >++<+++++[>+<-] without the [-] at the start 17:12:32 ais523, well the issue with that is, how far ahead should you try to look for merging addition substraction 17:12:43 think of a 1 MB huge section without any loops 17:12:52 but where each cell affected is touched several times 17:12:57 that should be reordered 17:13:12 I think we should probably work at the level of linearisable sections 17:13:12 but it would be rather expensive for such a long section 17:13:19 i.e. sections with balanced <> 17:13:28 ais523, hm? yes the 1 MB section would have that 17:13:29 optimising a 1MB long section without loops is no slower than running it 17:13:32 and you only have to optimise it once 17:13:42 or with loops but balanced ones 17:13:55 it would be more interesting if it was >++<+++++[>+<-] without the [-] at the start <-- how then? 17:14:34 AnMaster: well, that becomes pointer[1]+=2; pointer[0]+=1; (pointer[1]+=pointer[0], pointer[0]=0); 17:14:44 ais523, still I'm not sure this is the smartest way always 17:14:45 because it's linearisable, we can track variables separately 17:14:48 s/1/5/ 17:14:59 for some balanced loops you might be better off by not unrolling it 17:15:04 but turning it into 17:15:25 AnMaster: you can't unroll if you don't know the number of iteratinos 17:15:27 *iterations 17:15:51 while (mem[ptr] != 0) { mem[ptr+2]+=4, mem[ptr]--; } 17:15:52 or such 17:15:56 if you see what I mean 17:16:01 or even into a for loop 17:16:08 that could be vectorized by gcc 17:16:13 with -fvectorize-tree 17:16:13 but unrolling is always going to help the optimiser do more optimisations, you can reroll again afterwards 17:16:15 :D 17:16:33 ais523, how would you re-roll then? not trivial or? 17:17:07 rerolling is just run length compression 17:17:19 that's what gzip effectively is doing, rerolling loops in text 17:17:47 for (unsigned char i = mem[ptr]; i != 0; i--); do { mem[ptr+1] += 1; mem[ptr+2] += 1; mem[ptr+3] += 1; } 17:18:00 that I believe gcc would vectorize probably 17:18:06 wait 17:18:10 that would be stupid still 17:18:16 you would be able to do 17:18:20 mem[ptr+1]+=mem[ptr]; 17:18:21 mem[ptr+1] -= i; 17:18:22 yeah 17:18:26 err 17:18:27 += 17:18:28 right 17:18:45 ais523, still I believe there are cases you can gain in by using for 17:19:24 well, you can't completely compile a program with loops into a program without in all cases 17:19:28 say: 17:19:34 [[-]>] 17:19:40 would be memset(0) 17:19:43 hmm... balanced loops always compile into polynomials, don't they? 17:19:46 until you hit a 0 17:19:53 ais523: bf4 compiles them to polynomials 17:19:54 ais523, oh? interesting 17:19:57 i believe 17:20:22 I reckon the best way to make an optimiser would be to always compile the polynomials first 17:20:27 ais523, true 17:20:29 then deal with unbalanced loops and assumptions on /that/ level 17:20:44 ais523, what about turning [[-]>] into a *call* to memset? 17:20:45 the assumptions could then mostly be about which cells held zero/nonzero, and where the pointer was 17:20:57 that should be very fast 17:21:14 ais523, yes true 17:21:14 AnMaster: you're thinking at a completely different level to me here 17:21:23 ais523, oh? yes I am 17:21:27 I'm trying to optimise O(n^2) down to O(n) 17:21:30 -!- whtspc has quit ("ChatZilla 0.9.84 [Firefox 3.0.4/2008102920]"). 17:21:33 you're optimising O(n) into a slightly faster O(n) 17:21:36 ah 17:22:02 well turning balanced loops into polynomials first is indeed a good idea 17:22:18 ais523, but I'm not happy with that 17:22:23 so I want to go further 17:22:25 ;P 17:22:37 AnMaster: well, the usual trick is to let the C compiler do the microoptimisations 17:22:48 after the BF compiler has done the computational class optimisations 17:23:00 ais523, hah, but that requires it to understand what the program tries to do 17:23:06 which might be far from clear at times 17:23:17 considering the generated C wouldn't be very typical C code 17:23:32 AnMaster: no, it would be the sort of C code that compilers are particularly good at micro-optimising 17:23:43 something like [[-]>] into memset is trivial for a compiler like gcc 17:23:50 which sees stuff being set to 0 in a loop 17:23:57 ais523, in a while loop 17:24:03 although, that would only work if the end was known 17:24:09 so it would turn it into a strlen + a memset? 17:24:11 or what? 17:24:17 strlen + memset is slower than just looping 17:24:19 since memset is faster than setting each byte 17:24:31 ais523, depends, consider that memset can set 32 or 64 bits at a time 17:24:36 the fastest way would be to do it wordwise 17:24:37 while looping would just set 8 at a time 17:24:44 using rep movdi 17:24:47 ais523, indeed, which is what memset does iirc 17:24:53 wordwise 17:24:56 *rep movdb 17:25:03 AnMaster: aha, no 17:25:05 well I don't know what asm it uses 17:25:12 memset doesn't terminate at end of string 17:25:13 this does 17:25:17 ais523, ah 17:25:25 you want a string-set instruction, not a memory-set instruction 17:25:28 that is crazy x86 string instruction things? 17:25:31 yes 17:25:34 -!- Judofyr has joined. 17:25:39 I'm pretty sure there's one that does exactly [[-]>] 17:25:44 ais523, I wouldn't know, I'm writing portable code 17:25:51 AnMaster: well, exactly 17:25:56 this is why you let the compiler worry about the details 17:26:01 ais523, hm true 17:26:02 the C compiler 17:26:20 ais523, about that rep stuff, can those be interrupted and resumed in the middle? 17:26:24 I always wondered 17:26:29 how it works with context switches 17:26:29 an insane BF optimizer would compile down to machine code 17:26:44 AnMaster: yes, but you need to keep track of the registers 17:26:56 IIRC, they put their internal state in CX or something like that 17:27:00 ais523, well the OS dumps them right 17:27:09 SI, DI, and CX, or something 17:27:16 so if the OS dumps them, it can resume the instruction 17:27:19 by issuing it again 17:27:20 ais523, only 16 bit registers? 17:27:30 that sounds like it could be an issue 17:27:34 AnMaster: I learnt x86 asm on DOS 17:27:41 it works with bigger registers almost certainly 17:27:45 ais523, ah right 17:27:59 x86 is a mess heh 17:28:01 but I have trouble thinking about anything bigger than 16 bits as I never learnt x86 asm in protected-mode 17:28:11 just good old-fashioned real-mode programming 17:28:17 * AnMaster adds a REX prefix 17:28:28 makes it operate on 64-bit operands 17:28:40 on x86_64 17:28:41 that is 17:29:22 ais523, anyway, what about constant folding too? 17:29:34 constant folding would happen automatically 17:29:38 could be done for parts inside loops 17:29:40 it's really the basis behind the whole thing 17:29:42 even unbalanced ones 17:29:47 or the start of the program 17:29:52 that I think would be a good idea 17:30:16 if the program starts with filing in lots of cells with initial values, you could constant fold that and put it in a static array 17:30:20 in the generated program 17:30:38 probably even use the static array for the first section of memory 17:30:42 or such 17:30:46 hm that is an issue 17:30:57 we can't know the memory we get allocated are in one block 17:31:04 the OS could allocate with holes 17:31:07 wow, I just realised why UK keyboards have ¬ and that weird broken-vertical-bar char on them 17:31:21 it's because they're the printable characters in EBCDIC that aren't in ASCII 17:31:22 ais523, and to handle holes you need a more complex pointer 17:31:39 that way, UK keyboards can type all the printable chars in ASCII, and all the printable chars in EBCDIC 17:31:58 ais523, well anyway, what about the issue I mentioned? 17:32:22 I would try to mmap() pages probably, but what if they are not in one single block 17:32:27 what if I do get holes 17:32:27 AnMaster: gcc-bf spends the whole first part of the program going >>>>>>>>>>>+++++++++++++>>>>>>>+++++>>>>>>>>>>>>>>>>>>>+++++++++++++ 17:32:38 and memory doesn't have holes if you don't ask for it with holes 17:32:40 ais523, indeed that could be constant folded 17:32:48 AnMaster: it's intended to be 17:32:48 ais523, how do you mean? realloc()? 17:32:54 but what if it needs to be moved 17:32:59 then you have issues 17:33:02 for huge data sets 17:33:02 AnMaster: there is no problem with realloc moving stuff 17:33:15 ais523, yes it would be for something with a large data set 17:33:18 AnMaster: well, if you're really crazy, use sbrk 17:33:27 it's perfect for allocating data for Brainfuck 17:33:39 although almost useless for most langs 17:33:43 ais523, hm that depends on knowing nothing else is malloced there 17:33:47 yep 17:33:52 but avoiding malloc is easy enough, surely? 17:33:55 say if I call putchar() how can I know it didn't just malloc() something 17:33:57 internallt 17:34:00 internally* 17:34:03 in libc 17:34:06 AnMaster: isn't there a guarantee somewhere about that? 17:34:14 it wouldn't surprise me if there was 17:34:22 ais523, don't think so, glibc allocs a lot of internal stuff I'm pretty sure 17:34:27 like input buffers 17:34:40 so does libbf 17:34:59 ais523, yes indeed, so suddenly sbrk may mean it isn't at the top any more! 17:35:18 well, you could do brk(NULL) to see if the break value had unexpectedly changed 17:35:24 and just realloc the whole lot if it had 17:35:38 if something's going to insist on making memory discontiguous, you're going to have to move things around to recontiguise it 17:35:40 that could leave a huge unused area below 17:35:44 that nothing can fill 17:36:05 AnMaster: you're still thinking on entirely the wrong level here 17:36:17 if you really really want massively optimised code, just refrain from syscalls 17:36:20 ais523, also I'm not sure libc isn't allowed to see there is something free below sbrk and alloc stuff there 17:36:21 or? 17:36:30 that way you know that nothing's brking behind your back 17:36:34 ais523, you need syscalls for input and output 17:36:39 bf has that 17:36:47 AnMaster: no you don't! 17:36:51 ais523, oh? 17:36:52 the operating system has to manage it somehow 17:36:57 yes it does 17:37:20 ais523, ah I got an idea, elf hack, and no idea if it works for stuff in libc 17:37:23 do like valgrind 17:37:25 redirect malloc 17:37:31 to something that allocs from mmaped areas 17:37:41 well valgrind doesn't do that bit 17:37:54 anyway it probably won't work for internall malloc() calls in the libc 17:37:58 AnMaster: it does work for stuff in libc 17:38:03 ais523, oh? 17:38:13 valgrind errors on some stuff on libc, or would do if it wasn't careful not to 17:38:19 besides, just link libc statically 17:38:22 ais523, wouldn't it use a direct call instead of going through the symbol table? 17:38:26 then it definitely works 17:39:13 ais523, and this would probably only work on a few *nix like linux 17:39:21 and freebsd at least 17:39:26 AnMaster: you are thinking on utterly utterly the wrong level, OK 17:39:32 ais523, really? 17:39:40 well I agree high level optimizations is best 17:39:44 I completely agree 17:39:54 but once that is done you want more speed 17:40:19 ais523, it isn't enough to be fast, you will want to be fastest 17:40:24 and even faster 17:40:36 just to make sure no one can sneak up easily on your speed 17:41:15 ais523, no? 17:41:47 AnMaster: but any number of low-level optimisations will fail to a big optimisation at the top that improves computational order 17:41:53 also, low-level optimisations often slow things down 17:42:12 ais523, indeed you should do the big optimisations first 17:42:22 and once that is done, continue with lower and lower levels 17:42:37 lim speed -> perfection 17:42:46 but things like ensuring that all the memory in a BF interp is contiguous are completely independent of other optimisations 17:42:50 and I don't really care about them right now 17:43:01 besides, all the BF interps in existence have never really had problems with that 17:43:17 if you want contiguous memory, allocate a few MB worth of cells in a static array 17:43:34 as in practice people never go off the end of that anyway, if they do, don't care about the time delay on realloc 17:43:38 ais523, got a link to bf4? 17:43:44 AnMaster: no I don't, ask ehird 17:43:49 ais523, ignores... 17:43:52 ais523: how, I have him on ignore 17:43:59 ehird: AnMaster wants a link to bf4 17:44:07 I did google yes 17:44:13 ais523: ouch. it must suck being in an alternate universe without google for him. 17:44:19 or the esolang wiki 17:44:25 [17:44] I did google yes 17:44:27 [17:44] ais523: ouch. it must suck being in an alternate universe without google for him. 17:44:28 classic 17:44:44 or the esolang wiki 17:44:48 perfect timing on that, AnMaster answering ehird's complaint before ehird complained it... 17:44:49 today on the ais523 show we snip context 17:44:56 ehird: it was just two lines in a row 17:45:00 ais523, thanks 17:45:02 that was post-context I snipped 17:45:12 no, it was a sentence over two lines 17:45:30 wow it isn't on the brainfuck page 17:45:33 ehird: besides, AnMaster clearly doesn't live in a world without Google or Esolang, as he lives at least in a world with Google 17:46:05 ais523, (bf|brainfuck) ?4 17:46:08 also, according to AnMaster it isn't on http://esolangs.org/wiki/brainfuck either 17:46:13 can not be found on the brainfuck esolang page 17:46:14 it is. 17:46:44 no. not with that name then 17:46:57 if it got another name it would he hard to find... 17:47:05 -!- jix_ has joined. 17:47:12 -!- jix_ has quit (Remote closed the connection). 17:47:13 ehird: there are no instances of the digit 4 anywhere on http://esolangs.org/wiki/brainfuck 17:47:21 wait, messed up my browser 17:47:22 ais523: and? 17:47:26 -!- jix_ has joined. 17:47:27 ais523, well there is, "This page has been accessed 47,617 times." 17:47:30 and 1024 17:47:32 it isn't named in the link 17:47:32 just like bff 17:47:36 and Brainfuck interpreter for the HP48gII calculator. May also work with other HP calculators. 17:47:46 ehird: well, then why did you expect AnMaster to find it by searching Esolang 17:47:55 ok then how the heck should you find it... if it badly named 17:48:00 He could look at the link text and click ones that look relevant? 17:48:01 you're arguing against yourself here 17:48:02 That's how I found it. 17:48:11 there isn't a "bff" either 17:48:13 with that spelling 17:48:27 ehird: that's much less reasonable than asking someone who knows the link to tell where it is 17:48:40 Well, yes, but you could go for someone who wants to tell you,. 17:48:46 you're coming up with a rather beware of the leopard response 17:50:24 it is a lot more fun to optimize brainfuck than it is to code in it, IMO 17:52:10 -!- puzzlet_ has quit (Remote closed the connection). 17:52:15 -!- puzzlet has joined. 17:53:00 ok with some googling I found this http://mozaika.com.au/oleg/brainf/ 17:53:08 after: 17:53:18 bff4 brainfuck 17:53:28 well that wasn't the name ehird told us initially 17:53:33 ais523, ^ 17:53:46 now if he had said that it would have been simpler 17:53:50 ehird: AnMaster says that the interp in question is actually called bff4 17:53:56 so you even got the name you told em wrong 17:54:01 bf4, bff4 17:54:04 not exactly hard to make the leap? 17:54:09 ehird: well, yes it is 17:54:14 k 17:54:16 yes, why would I try to look for an extra f? 17:54:20 would you claim that bf and bff are the same interp? 17:54:24 I mean, brain ffuck? 17:54:26 or what? 17:54:28 no, but the 4 is the main thing 17:54:55 ehird: that's a version number... naming programs including the version number is fine, naming programs after /just/ the version number is stupid 17:55:05 ais523: It is not a version number. 17:55:07 unless the version number itself is something stupid like XP or Vista 17:55:22 ais523, someone else made bff it says on that page 17:55:26 ah, yes 17:55:27 so it is a separate program 17:55:29 but still 17:55:31 but still 17:55:36 how could I guess there was an extra f? 17:55:46 I mean, it isn't in the name "brainfuck 17:55:48 " 17:55:51 there is one f there 17:55:53 not two 17:56:11 so how on earth would it be possible to guess that one should add the extra f 17:56:45 why not add an extra b? 17:56:47 instead 17:56:49 ehird: , Google disagrees with you on the 4 being the main thing 17:56:50 or an extra 4 17:56:59 ais523: bf{f}4 17:57:03 if it was, a Google search for "brainfuck 4" would find what you were talking about 17:57:04 seriously, stop bugging me. 17:57:12 sure ehird, but you didn't say it at the start 17:57:16 it's very obvious i don't feel like helping AnMaster. 17:57:20 ehfird: why on earth would you assume people would randomly add an extra 4 to things? 17:57:33 ais523, or an extra f... 17:57:38 that wasn't a regexp. 17:57:38 AnMaster: yes 17:57:40 sorry 17:57:41 and also just admitting the mistake would be easier 17:57:55 ehird: well, clearly, it's a syntax error as a regexp 17:58:06 also he didn't say that initially 17:58:09 it's legal but pointless as a wildmat 17:58:26 {,f} 17:58:26 AnMaster: don't be too hard on ehird, his keyboard obviously has an invisible f key button that he pressed by mistake 17:58:31 being invisible, he didn't realise 17:58:38 ais523, oh? 17:58:39 those Apple keyboards are strange... 17:58:42 ah true 17:58:53 k, call me back when you're talking about esolangs instead of lolling with AnMaster about me, i kind of have better things to do than being highlighted every 2 seconds 17:58:55 -!- ehird has left (?). 17:59:00 ais523, so you mean he got one normal and one invisible f? 17:59:04 presumably 17:59:11 also he can't simply admit he did a mistake 17:59:11 as he's obviously capable of typing visible fs 17:59:25 AnMaster: actually, he seems to have admitted he was being deliberately obstructive to try to annoy you 17:59:27 * AnMaster sighs 17:59:34 ais523, well true, but... 17:59:39 which makes complaining about the resulting revenge a bit rich 18:00:18 ais523, haah 18:00:20 hah* 18:00:39 ok the bff4 code isn't very well commented 18:00:47 http://mazonka.com/brainf/bff4.c 18:01:14 one helpfull thing is that -DLNR is supposed to be what makes it optimize linear loops 18:01:35 so hopefully not to hard to find the relevant code that way 18:02:01 if( z->linear ) 18:02:01 { 18:02:01 int del = m[mp]/z->linear; 18:02:01 for( i=0; isz; i++ ) m[mp+z->off+i]+=del*z->d[i]; 18:02:01 } 18:02:04 that seems to be it 18:02:14 it calculates if it is linear a bit before 18:02:19 now wtf does that code do 18:02:20 AnMaster: I'm too busy with other things to attempt to parse that code, I think 18:02:32 ais523, a bit obfuscated isn't it 18:02:42 meaningless variable names, not enough spaces 18:02:54 it's slightly worse than what I write on average, which means it must be /really/ bad 18:03:13 ais523, the whole file is like that 18:03:21 -!- psygnisfive has joined. 18:03:29 ais523, after the includes there is *NO* comment 18:03:51 I comment my code quite a bit normally 18:03:54 especially the obfuscated code 18:04:03 even the IOCCC stuff is commented, although the comments are just there to confuse people 18:04:05 such as /\ 18:04:07 with the * on the next line 18:04:30 heh 18:04:33 well this is the reverse 18:04:55 ais523, also bff4 seems to be an interpreter not a compiler 18:05:15 it's basically a bytecode compiler + interpreter, I think 18:05:26 ah 18:09:41 ais523, hm would it be possible to optimize > or < into a constant goto cell after an unbalanced loop? 18:09:46 what would be needed to be able to 18:09:48 I mean like 18:09:56 setting pointer to a fixed value 18:10:08 not like adding or subtracting a specific value 18:10:33 another thing 18:10:40 guys 18:10:41 what about loops like: 18:10:44 sambuca = delicious 18:10:47 ais523, hm would it be possible to optimize > or < into a constant goto cell after an unbalanced loop? <--- that's the main thing I want to focus on 18:10:56 [>.<-] 18:11:01 that is balanced 18:11:06 but not easily translated 18:11:09 hm wait 18:11:15 you could make a balanced one too 18:11:29 [>+<.] 18:11:34 err 18:11:35 waiut 18:11:36 [>.<-] is trivially translated 18:11:36 wait* 18:11:38 , 18:11:41 not . 18:11:44 I typoed that 18:11:44 it just prints a character lots of times 18:11:49 , is more interesting 18:11:50 ais523, I typoed, I meant , 18:11:52 yeah 18:12:04 that just reads characters forever, doesn't it? 18:12:04 or , that ends up affecting loop count 18:12:11 but where you can still know the cell 18:12:29 ais523, hm ok, so what about one where it substracts 78 from the value it read? 18:12:33 AnMaster: things like ,[.,] probably can't be optimised any furthre 18:12:37 *further 18:12:40 that could be easily input and hit 0 18:12:42 or not 18:12:46 see what I mean? 18:13:20 like: [, -78 ] 18:13:26 in pesudo code 18:13:33 then if I enter N the loop will ned 18:13:38 but anything else it will continue 18:13:41 yet it is balanced 18:13:50 sure that is hard to optimize more 18:13:56 but you could have other code 18:13:57 in it 18:13:59 -!- oerjan has joined. 18:14:10 that would be easy to optimize with known iteration count 18:14:20 but you can no longer do anything but a while loop 18:14:31 ais523, right? 18:14:35 AnMaster: there is nothing intrinsically bad about while loops 18:14:44 it's the number of nested loops you want to be able to keep down in a program 18:14:55 ais523, true 18:15:10 but still user input affecting the loop counter might be hard to handle 18:15:15 AnMaster: no it isn't, just do a while loop 18:15:15 it blocks a lot of optimizing 18:15:20 that's what it /is/, after all 18:15:32 it doesn't block the sort of high-level optimisations I care about, just your low-level parallelised megafors 18:15:43 ais523, true, but you know what I saw recently, with gcc, a while loop used for comping CRC, was slow 18:15:46 changed to a for loop 18:15:49 a lot faster 18:16:08 and yes object size was known at compile time in both cases 18:16:11 AnMaster: is "a lot" a factor of 10000 or more? 18:16:15 or more like 1.2? 18:16:26 ais523, a lot being like a factor or 4 times as fast or so 18:16:27 it's the factor-of-10000 changes I'm going for 18:16:39 between 4 and 8 18:16:40 or so 18:16:43 iirc 18:17:16 ais523, since it was run several hundred of thousands of times during a single execution however 18:17:21 it did help 18:17:36 it was at the top of "time spent in function" in gprof output 18:17:46 before 18:17:51 far from the top after 18:17:56 so for that case it mattered 18:18:01 anyway, I'd like to end this conversation, so I can concentrate on something else 18:18:05 ais523, ok :) 18:18:07 I have a massively long email to reconstruct 18:18:11 -!- Deewiant has quit (Read error: 60 (Operation timed out)). 18:18:21 ais523, meanwhile I will try to work on some ideas I got from this convo 18:18:28 -!- oerjan has quit (Client Quit). 18:18:44 and i will go to el shoppo 18:18:48 oklopol, cya 18:19:05 optimizing bf again i see, i gutta read the context when i returnn 18:26:34 oklopol, we had some new ideas 18:27:38 -!- Deewiant has joined. 18:27:50 -!- ineiros has quit (Read error: 101 (Network is unreachable)). 18:39:01 Deewiant, ais523: good name for the project? 18:39:05 I can't think of one 18:39:13 bf2c seems to be used already 18:39:17 AnMaster: bf4 18:39:22 haha 18:39:25 with one f 18:39:36 Results 1 - 10 of about 704,000 for bf4. (0.17 seconds) 18:39:41 not good 18:39:45 want a googlable name 18:41:41 -!- Slereah_ has quit (Read error: 113 (No route to host)). 18:42:02 Results 1 - 8 of 8 for bf4 brainfuck. (0.05 seconds) 18:42:05 hm much better 18:42:16 and the interpreter with the same name is crap it seems 18:42:19 but still 18:43:04 bfff3.14 18:43:06 what about that? 18:43:36 call it "before" 18:44:19 ais523, not googlable 18:45:26 I don't really put much stock in Google 18:46:20 hm 18:48:54 AnMaster: tell ideas 18:49:40 oklopol, read above? 18:49:48 I'm busy coding now 18:49:59 ic 18:57:32 -!- oerjan has joined. 19:05:57 ais523, right, before it is 19:06:24 * oerjan wonders what went into that 19:06:52 and will the successor be called befyve? 19:08:00 is this an interpreter for ordinary bf, or is there something extra? 19:08:08 oklopol 19:08:25 psygnisfive 19:08:28 hey 19:09:19 psygnisfive: glio 19:09:24 you broke the chain :( 19:10:02 glio? 19:10:09 oerjan, not an interpreter 19:10:10 a bitta glio never hurt anyone 19:10:11 miz glio? 19:10:12 it is a compiler 19:10:14 to C 19:10:19 optimizing one 19:10:24 i don't know who miz is 19:10:30 oerjan: it was a very short chain... 19:10:34 it will implement some new ideas that ais523 and me discussed above 19:10:42 ais523: killed in its infancy :( 19:10:52 ais523: i think oerjan extrapolated it'd be a long conversation. 19:11:04 but then i had to come and steal focus 19:11:15 ais523, hahah at function name: before_postprocess 19:11:16 :D 19:11:33 or: 19:11:35 prepostprocess 19:11:36 before_init() 19:11:41 that is actually emitted 19:11:46 oklopol: that's preposterous 19:11:49 and before_cleanup() 19:11:50 it's emitted now? 19:12:04 "static inline void before_init(void) {", 19:12:04 " cells = malloc(CHUNKSIZE * sizeof(beforecell));", 19:12:04 " cellcnt = CHUNKSIZE;", 19:12:04 " memset(cells, 0, cellcnt * sizeof(beforecell));", 19:12:04 "}", 19:12:19 I based this on the def-bf compiler I was working on 19:12:29 except pikhq never finished his high level part 19:12:35 so I consider the def-bf stuff dead 19:12:39 no one ever finishes anything 19:12:45 oklopol: actually the second google hit on glio is on someone who died from it :/ 19:12:51 :D 19:13:01 "static inline void before_cleanup(void) {", 19:13:01 " free(cells);", 19:13:01 "}" 19:13:07 anyone ever done any machine learning stuff? :T 19:14:30 oerjan: most hilarious death of the day, even more fun than your chain. 19:14:47 wtf is glio? 19:15:01 apparently it was an abbreviation of glioblastoma 19:15:28 yeah that's what i meant 19:15:31 ah 19:15:34 cancer 19:15:50 yes, who doesn't like cancer 19:15:56 !! -> 19:16:08 I don't 19:16:25 now i still wonder what oklopol meant by glio 19:17:05 oerjan: stop getting my sarcasm, you're ruining all the AnMaster from me. 19:17:31 huh 19:17:34 oh i didn't see your "yeah that's what i meant" 19:19:28 lessee, there's a User:Glio on wikimedia 19:19:54 ^bf >>,[[-<++>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[<[-]+>->+<[<-]]]]]]]]]]>]<<[>++++++[<++++++++>-]<-.[-]<]++++++++++.[-]>>,]!test 19:19:55 116.101.115.116. 19:19:57 a chinese 19:20:06 ^bf >>,[[-<++>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[<[-]+>->+<[<-]]]]]]]]]]>]<<[>++++++[<++++++++>-]<-.[-]<]++++++++++.[-]>>,]!hm nice very nice 19:20:07 104.109.32.110.105.99.101.32.118.101.114.121.32.110.105.99.101. 19:20:14 ^bf >>,[[-<++>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[<[-]+>->+<[<-]]]]]]]]]]>]<<[>++++++[<++++++++>-]<-.[-]<]++++++++++.[-]>>,]!9 19:20:14 57. 19:20:38 oklopol: of course i was hoping you were fluent in the Glio-Oubi language 19:27:10 heh 19:27:24 already the not very much optimizing compiler is twice as fast as bff4 19:27:28 ais523, ^ 19:27:37 I guess the fact that it is compiled is the cause 19:27:45 AnMaster: wow, that's pretty good 19:27:47 is it linearising? 19:27:49 ais523, no 19:27:55 just merging >>> <<< and such 19:28:05 ais523, was testing on mandelbrot.b 19:28:08 ok, probably it depends on the program you run it on then 19:28:10 can pastebin it if you want 19:29:00 ais523, was using gcc -march=k8 -msse3 -O3 -ftree-vectorize for both bff4 and the source my compiler generated 19:29:18 +[>+] should terminate when the first cell wrap-arounds; that's just some 3*256000 instructions. Well, I guess it should time-out before that, actually. 19:29:21 $ gcc -Wall -Wextra -march=k8 -msse3 -O3 -ftree-vectorize -DLNR -o bff4 bff4.c 19:29:22 that one 19:29:24 AnMaster: I'd argue that your compiler is not at all faster than bff4 19:29:31 just you're using better compiler options 19:29:35 and a better implementatino 19:29:38 *implementation 19:29:46 ais523, I'm using the same options for both 19:30:03 $ gcc -Wall -Wextra -march=k8 -msse3 -O3 -ftree-vectorize -o mandelbrot mandelbrot.c 19:30:04 well a compiler's always going to beat the interpreter unless the interpreter manages to optimise stuff a lot 19:30:14 ais523, indeed 19:30:27 ais523, but this makes it very very hard to compare 19:30:33 if not impossible 19:30:54 AnMaster: how do they compare on Lost Kingdoms startup? 19:31:05 ais523, hm hard to measure 19:31:09 I used this: 19:31:18 time ./mandelbrot 19:31:19 real 0m10.572s 19:31:19 user 0m9.879s 19:31:19 sys 0m0.059s 19:31:23 well output cut 19:31:23 and 19:31:30 ^bf +[>+]++++++++++. 19:31:32 time ./bff4 < mandelbrot.b 19:31:33 real 0m20.173s 19:31:33 user 0m18.722s 19:31:33 sys 0m0.143s 19:31:34 . 19:31:39 Seems that my timeout limits are not very strict. 19:31:57 ^bf +[>+]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 19:32:01 < 19:32:13 fizzie: how do you explain that? 19:32:19 it's executing the code after +[>+] 19:32:19 ais523, waiting for gcc to compile lostkingdom 19:32:20 argh 19:32:22 which is really strange 19:32:26 had to abort 19:32:28 swap trashing 19:32:29 hehe 19:32:33 AnMaster: ah, I forgot about that... 19:32:36 ais523: Why not? +[>+] terminates when one cell wrap-arounds. 19:32:47 ais523, well I removed the case stuff 19:32:49 fizzie: no it doesn't 19:32:51 since it is no longer needed 19:32:56 it sets each cell to 1 on the entire atpe 19:32:58 but it still manages to be very slow 19:32:58 *tape 19:32:58 I have a 1000-cell tape which wraps, and one-byte cells. 19:33:02 and swap trash 19:33:06 fizzie: oh, the tape wraos? 19:33:08 *wraps? 19:33:13 $ wc -l LostKng.c 19:33:13 168337 LostKng.c 19:33:14 ais523, ^ 19:33:17 no wonder we couldn't get it to display an out-of-tape message 19:33:18 with LOTS of macros too 19:33:26 so that expands quite a bit 19:34:00 $ gcc -std=c99 -E -o tmp.c LostKng.c 19:34:06 $ wc -l tmp.c 19:34:07 169855 tmp.c 19:34:10 not as much as I feared 19:34:24 just a 5.7 MB file :P 19:34:38 Yes, there's no infinite tape in fungot's brainfuck. Isn't a fixed-size memory quite common for brainfuck? 19:34:38 fizzie: get. out. 19:34:44 fungot: Well excuse me! 19:34:45 fizzie: let's just pretend that it's necessary :) at least i have. :) ( and i'm not sure what 19:34:50 hm 19:34:57 ais523, bff4 exists on lostkingdom 19:35:05 *exits? 19:35:10 ah yes 19:35:38 read(0, "#!/usr/bin/bf\n\n# Name : Lost"..., 2048) = 2048 19:35:38 brk(0) = 0x2263000 19:35:38 brk(0x2284000) = 0x2284000 19:35:38 exit_group(0) = ? 19:35:41 how strange 19:36:27 AnMaster: why did you just paste that? 19:36:32 also, what is exit_group? 19:36:35 I was stracing it 19:36:41 why bff4 exits 19:36:42 and brk seems to be acting entirely sanely there to me 19:37:02 ais523: since I don't know how to feed input to a program running under gdb from a pipe 19:37:07 since that is what bff4 wants 19:37:10 you do like; 19:37:14 ./bff4 < foo.b 19:37:19 it seems 19:37:29 AnMaster: gdb has a command-line arg for that, IIRC 19:37:37 and I don't remember what 19:38:17 I don't remember what it is either 19:39:10 hm now it works 19:39:16 since I removed the headers 19:39:19 like #! 19:39:22 oh wait 19:39:30 it treats ! special right 19:39:37 yes 19:39:42 ! means end of program, start of input 19:39:42 hm 19:39:47 in BF programs which take them in the same stream 19:40:09 well 19:40:22 this means I have to paste all of lostkingdom on it's stdin 19:40:24 fuck that 19:40:51 I have better things to do 20:11:26 -!- oklopol has quit (Connection reset by peer). 20:11:48 damn I need an integer that can also be unset 20:11:56 and I can't reverse any special value 20:11:59 what to do 20:12:09 AnMaster: define a Maybe Integer 20:12:15 ais523, C.... 20:12:23 although this requires you to use a programming language, like Perl with Moose or Haskell, in which they exist 20:12:27 ais523, and the size is important 20:12:34 can't you use the next size up? 20:12:34 like struct size 20:12:49 ais523, well no this is for tracking offset of cells within loop 20:12:53 AnMaster: well you can't fit 32 and a fraction bits into a 32-bit variable 20:12:56 like size_t offset; 20:12:59 physically impossible 20:13:03 ais523, yes :( 20:13:07 err 20:13:09 not size_t 20:13:11 ssize_t 20:13:11 you could have a separate one-bit variable which tracks whether it's set or not 20:13:27 and if it's ssize_t, why not use the minimum possible value as exceptional? 20:13:32 ah yes let me look at padding in struct 20:13:49 ais523, but what if someone adds that many > on a 32-bit platform? 20:14:01 AnMaster: you can only compare them one way round is the point 20:14:03 and use off64_t for files 20:14:18 ssize_t can only cover half the memory space as it is 20:14:29 ais523, ah hm true 20:14:41 well I guess the situation should never 20:14:42 happen 20:14:47 and I could document the issue 20:14:58 sounds like you really want a 33-and-a-fraction-bit variable 20:15:15 ais523, I also yes and an union to not waste spaec 20:15:16 but the minimum value wouldn't even exist except on a 2's complement machine 20:15:16 space 20:15:27 it's equal to 0-itself, anyway, so doesn't act sanely with arithmetic 20:15:28 ais523, huh? 20:15:32 that's why it makes a good exceptional value 20:15:37 AnMaster: the value with bit pattern 100000000000000000000000000000000 20:15:42 ah yes 20:16:16 that is negative 0 basically 20:16:21 no, it isn't 20:16:25 it's the opposite of -0 20:16:26 well no true 20:16:31 it's as far from 0 as you can get 20:16:32 positive 0? 20:16:35 in both directions 20:16:35 ah 20:16:36 ok 20:16:47 rather than -0 which arithmetically works the same way as 0 20:16:52 ais523, that would be FOO_MIN right? 20:16:56 yes 20:16:57 assuming there is one for ssize_t 20:17:01 * AnMaster looks 20:17:27 hm there is not 20:17:28 SSIZE_MAX 20:17:32 but no MIN 20:17:35 very strange 20:17:37 it's -SSIZE_MAX-1 20:17:44 it has to be defined like that 20:17:55 on 2 complement 20:17:56 say, SHORT_MIN can't actually be -32768 20:18:01 it has to be -32767-1 20:18:27 because - is an operator, and 32768 needn't neccessarily fit in an int 20:18:29 ais523, a grep shows SHORT_MIN isn't defined either 20:18:32 in any system header 20:18:37 SHRT_MIN 20:18:39 probably 20:18:44 some stupid abbreviation from decades ago 20:18:46 ah yes 20:18:51 ais523, well it is short 20:18:53 so I like it 20:19:00 :P 20:19:03 is that an attempt at a joke? 20:19:06 also SSIZE_MIN doesn't exist 20:19:14 ais523, yes a *short* form of *short* 20:19:26 was the joke that bad? 20:19:41 /usr/include/limits.h:# define LONG_MIN(-LONG_MAX - 1L) 20:19:43 AnMaster: yes 20:20:04 although my headers define SHORT_MIN as -32768 directly, because they know they're for a 32-bit system 20:20:18 the same thing applies to all integer sizes, just I can't remember the relevant power of 2 20:20:41 AnMaster: it was a reasonably good joke until you explained it :D 20:20:50 oerjan, well I had to for ais523 20:20:57 AnMaster: actually, I got it 20:21:06 just wasn't sure if you were joking deliberately or not 20:21:26 now I am normally THAT bad at jokes really? 20:21:27 :( 20:21:33 anyway 20:21:37 so, why isn't it LONG_MAXIMUM? 20:21:44 SSIZE_MIN isn't defined 20:21:46 oerjan, :) 20:21:53 AnMaster: it's -SSIZE_MAX-1 20:21:57 if SSIZE_MAX is defined 20:22:01 ais523, on 2 complement at least 20:22:01 and you're on a two's complement system 20:22:06 which given your stupid optimisation you are 20:22:17 ais523, but how would i know I am? 20:22:17 ais523, err, what? 20:22:21 I'm just trying to count index 20:22:24 hmm... why not detect the representation at compile-time 20:22:33 and use SSIZE_MIN as your exceptional value on 2's complement 20:22:35 ais523, as in "this is offset two from start of loop" 20:22:38 and -0 on 1's complement 20:22:47 AnMaster: why not use unsigned size_t, the? 20:22:49 *then? 20:23:02 ais523, [>-<+] 20:23:02 or 20:23:03 also, rely on the fact that the loop can't possibly take up all of memory due to the final ] 20:23:05 ais523, [<->+] 20:23:07 well 20:23:10 it can go either way 20:23:11 thus you can safely use SIZE_MAX as your exceptional value 20:23:23 AnMaster: measure offset from the start of the program instead, then 20:23:24 haha ok 20:23:25 and do a subtraction 20:23:41 (there's also the fact that the compiler itself has to be in memory somewhere, but that isn't as funny) 20:23:43 err? what? 20:23:50 anyway: not easy if there is an unbalanced loop 20:23:54 AnMaster: instead of taking the offset from one place to another 20:23:57 then I can't know tape offset 20:24:03 oh, tape offset 20:24:06 yes 20:24:10 that was what I was doing 20:24:11 I thought you meant offset in program 20:24:21 the stuff have already been mangled a bit by this point 20:24:26 however I'm unsure about order 20:24:48 that is the order that I should do various reductions 20:25:19 should I try to handle >><< first, then the tape offset, then [-] 20:25:22 or some other order? 20:25:35 it doesn't seem trivial to combine them 20:25:57 but I guess it could work 20:26:03 except [-] shouldn't be done first 20:26:08 since that wouldn't catch 20:26:15 [>+<->-<] 20:26:18 -!- puzzlet has quit (Read error: 60 (Operation timed out)). 20:26:28 which the tape offset would manage to turn into [-] 20:26:35 which then could be turned into set 0 20:26:44 or should I do multiple passes with each optimizer? 20:26:51 ais523, :) 20:27:04 AnMaster: C-INTERCAL does multiple passes 20:27:04 I want to catch all cases I can catch 20:27:07 until nothing more is optimised 20:27:09 that's probably the best way 20:27:12 ais523, ah 20:27:28 ais523, I already avoid multiple passes with >><< reduction 20:27:35 by stepping one step backwards 20:27:43 so I can catch: 20:27:45 --<>+ 20:27:48 to turn it into - 20:28:05 without that I would get: 2- 1+ 20:28:17 also brb making some food 20:28:41 -!- puzzlet has joined. 20:38:37 -!- warrie has joined. 20:38:47 Hi, #math. 20:39:28 BZZT, WRONG 20:39:37 How dare you disturb my hallucinations. 20:39:48 Let's try this again. 20:39:50 Hi, #math. 20:40:12 warrie: we're now debating whether or not 3=4 20:40:16 -!- Deewiant has quit ("Viivan loppu."). 20:40:16 ehird seems to think it is, for some reason 20:40:20 hi warrie, did you know your nick is a prime in base 256? 20:40:24 No we're not. 20:40:29 also, we're debating whether 4 increased by 1 is 5 20:40:30 Nope. That's cool. 20:40:37 * oerjan might be lying 20:40:43 -!- Deewiant has joined. 20:40:43 haven't checked yet :D 20:40:57 oerjan: "warrie" is even in base 256 20:41:04 no way 20:41:06 unless you use ASCII 20:41:12 96+5 is odd 20:41:15 going by the hex 0-9a-f thing but extended 20:41:20 then you get a, c, e as even 20:41:23 of course i'm using ascii 20:41:28 ah, ok 20:42:19 The derivative of |x| with respect to x is |x| divided by x, right? 20:42:42 yes, that's one way to put it 20:42:52 it's undefined at 0, though, rather than infinite 20:42:54 Still true in the complex numbers and all? 20:43:00 although whether this makes a difference depends on how pedantic you are 20:43:04 |0|/0 is not very infinite. 20:43:15 warrie: well, it's a NaN 20:43:34 arguably that's decent for an undefined derivative 20:43:35 darn it's divisible by 5 20:43:41 back 20:44:04 I'll do the Chain Rule Test. 20:44:57 warrie: |x| is surely not analytic so complexes are not nice 20:45:20 ais523, ah I worked it out 20:45:26 I need to track offset from what anyway 20:45:38 so that one is NULL or a node pointer 20:45:45 I'm not sure how sane this is... 20:47:16 -i = |i|/i = d|ix|/dx = d|ix|/d(ix)*d(ix)/x = |ix|/(ix) * i = |x|/x... yeah, I forgot that you can't differentiate |x| over the complex numbers. 20:47:45 warrie: you might check it in the x direction 20:48:21 * warrie shrugs 20:48:24 sqrt(x^2+y^2) 20:48:38 I'll just use "undefined". 20:49:58 oerjan, what about my nick? 20:52:08 gah, this is annoying: I found an interesting obfuscated quine on a webpage, but it doesn't give the program, just an example of its output 20:53:06 I hate it when you know a quine's output but not its source code. 20:53:10 yep 20:53:27 hm 20:53:28 in 20:53:31 in C* 20:53:49 is using memset(foo, 0, sizeof(foo_t)); 20:53:51 -!- Deewiant has quit ("Viivan loppu."). 20:53:58 where foo foo_t *foo; 20:54:03 and foo_t is a struct 20:54:11 -!- Deewiant has joined. 20:54:13 a safe way to ensure are pointers in said struct are all NULL? 20:54:16 What is an obfuscated quine, by the way? 20:54:22 ais523, ^ 20:54:27 Of course not, since all-bits-zero is not necessarily NULL. 20:54:46 Not that people wouldn't do that sort of stuff anyway. 20:54:52 warrie: something which isn't obviously a quine 20:54:57 although this one's just a meaning-quine 20:55:05 in that it outputs a program that does the same thing as it 20:55:09 but isn't necessarily the same 20:55:12 several programs, in fact 20:55:40 yes 20:55:41 AnMaster: 4714790940847662450 20:55:50 oerjan, is that my nick? 20:55:54 well it is even so... 20:55:56 yes 20:56:07 and divisible by 5 that too 20:56:11 oerjan, and 10 20:56:17 also how do you calculate it? 20:56:31 like befunge fingerprints? 20:56:37 as in 0xabcdef 20:56:41 so each 20:56:43 ab cd ef 20:56:46 maps to a char 20:56:47 or 20:56:50 some other way? 20:56:56 i used haskell: readInt 256 (const True) (fromEnum) "AnMaster" 20:57:10 oerjan, well that doesn't answer the question 20:57:12 (requires Numeric module) 20:57:24 oerjan, what is the mathematical mapping? 20:57:36 how do you parse it 20:57:47 you just pointed at a black box 20:57:50 and said "I use that" 20:57:51 i guess that befunge thing is the same 20:57:56 it didn't answer the *how* 20:58:10 oerjan, that is: 20:58:18 while read char { 20:58:26 bitshift result up by 8; 20:58:34 add ascii value of char; 20:58:34 } 20:58:39 in pseudo code 20:58:48 oerjan, is that how you do it? 20:58:58 that should be equivalent yes 20:59:11 oerjan, so CFUN is? 20:59:13 except readInt uses an actual multiplication by 256 20:59:31 (since it is not restricted to powers of 2) 20:59:35 oerjan, it should be 0x4346554e 20:59:36 btw 20:59:37 CFUN 20:59:41 if it is the same way 20:59:42 "fizzie" is 112603212441957 = 3*1747*20897*1028141. I'm "almost prime", for some values of "almost". 21:00:06 $ factor 112603212441957 21:00:06 112603212441957: 3 1747 20897 1028141 21:00:09 well ok 21:00:12 almost I guess 21:00:19 except readInt uses an actual multiplication by 256 21:00:19 (since it is not restricted to powers of 2) 21:00:26 that is odd, doesn't ghc optimize? 21:00:34 fizzie: so what is the value of "almost"? 21:00:45 AnMaster: Int and Integer are different types in Haskell 21:00:50 ais523: In this case, "not really, but sorta". 21:00:54 AnMaster: it's 0x416e4d6173746572 21:01:02 oerjan, CFUN? 21:01:10 no then you use some totally different way 21:01:11 "AnMaster" 21:01:15 ah 21:01:22 oerjan, and what is CFUN in your system 21:01:24 that string 21:01:30 oerjan, so CFUN is? 21:01:32 oerjan, it should be 0x4346554e 21:01:40 [cut] 21:01:43 AnMaster: it's 0x416e4d6173746572 21:01:53 oerjan, doesn't make sense does it? 21:02:20 that's correct 21:02:22 AnMaster: that string oerjan pasted is "AnMaster", I think 21:02:27 wait, no 21:02:43 that 72 at the end looks wrong 21:02:44 I do have a convert the other way for 32-bit routine somewhere around here 21:02:49 oh, ofc, there are more than 16 letters in the alphabet 21:02:53 so yes, probably AnMaster 21:02:57 ah 21:03:00 well 21:03:17 fungeCell fprint = ImplementedFingerprints[i].fprint; 21:03:17 char fprintname[5] = { (char)(fprint >> 24), (char)(fprint >> 16), 21:03:17 (char)(fprint >> 8), (char)fprint, '\0'}; 21:03:18 :P 21:03:28 that very much depends on it being max 32-bit 21:03:32 and all printable chars 21:04:00 AnMaster: i thought by CFUN you meant some technical abbreviation meaning "fingerprint notation" 21:04:14 oerjan, no it is the handprint of cfunge 21:04:20 that is: interpreter ID 21:04:23 perl -e 'use bignum; $x = 256*$x + ord($_) foreach split //, "fizzie"; print $x, "\n";' 21:04:31 with some type punning it should be faster 21:04:31 The perly thing is less pretty than Haskell. Surprise! 21:04:36 to just store it as an integer 21:04:41 and read it as chars 21:04:42 however 21:04:46 that isn't very safe 21:04:53 from a C standard perspective 21:04:59 I try to avoid such cases 21:05:02 also, I've been writing a lot of Prolog recently 21:05:04 I assume strict aliasing rules 21:05:09 and decided that Prolog is really pretty 21:05:17 and at least as reflective as Smalltalk 21:05:20 except in 3 places: FPDP, FPSP and 3DSP 21:05:39 ais523, heh I should probably try to learn prolog 21:05:45 got a link for any good online resource? 21:05:57 AnMaster: I learnt it from paper books originally 21:06:02 so no, unfortunately 21:06:14 oh well 21:06:22 there probably are some 21:06:26 but Prolog is... different 21:06:28 yeah 21:06:32 hm yes? 21:06:35 and many sources for it start by trying to compare it to something 21:06:44 ais523, I have seen backtracking done in scheme 21:06:46 it wasn't pretty 21:06:49 which I think is a bad way to learn it, but how else could you start? 21:06:49 or easy to follow 21:07:04 and it abused both macros and call/cc 21:07:16 abusing call/cc is an obvious way to do backtracking 21:07:23 ais523, well yes 21:07:42 In fact I find call/cc abusive for anything, yes I see how it is useful 21:07:46 but it is mindbending 21:08:09 and I can write perfectly fine and working scheme programs without either macros or call/cc 21:08:12 -!- Deewiant has quit ("Viivan loppu."). 21:08:19 a lot more typing though 21:08:37 -!- Deewiant has joined. 21:10:14 backtracking is a monad, and all monads can be implemented with call/cc, i hear 21:10:46 oerjan: I had a discussion with a really theoretical computer scientist once 21:10:49 (+ some state) 21:11:02 I asked whether backtracking was a monad, and he said it couldn't be because that obviously would fail on infinitely large data sets 21:11:09 but I was too confused to ask him to elaborate on that 21:11:10 I think SICP has one chapter about their amb-eval thing, which implements Scheme with a "(amb x y z)" special form, which will evaluate to the "correct" value, backtracking whenever it fails (hits (amb) with no choices). 21:12:47 Well, subchapter, anyway. It's there where they start with the metacircular evaluator, then try lazy evaluation with it, then the nondeterministic amb thing, and finally some logic programmingsies. 21:16:57 ais523: maybe he was confused about something like that amb which only takes a finite number of arguments... 21:17:11 but you can obviously get around that with recursion 21:18:57 and backtracking _does_ fail on infinitely large data sets, if by fail you mean "never gets to the end" 21:20:18 i have a brainfuck question 21:20:23 yes? 21:20:27 elsif command == '[' and tape[thread[pointer]] == 0 21:20:43 that isn't exactly a question... 21:21:02 does the matching ] brace do a test as well? 21:21:09 -!- Deewiant has quit ("Viivan loppu."). 21:21:19 brainfuck spec on esowiki says no, but one of the derivatives did 21:21:20 -!- Deewiant has joined. 21:21:29 lost kingdom runs without a check on ] 21:21:30 jayCampbell: it doesn't matter normally 21:21:39 because either ] jumps back to [, which does the test 21:21:43 or ] does the test itself 21:21:53 thus specs generally say either 21:22:02 awesome 21:22:17 one big advantage of testing at both ends is it then doesn't matter which side of the [] you jump back to, but that's an implementation detail that rarely comes up 21:22:31 basically, it doesn't matter unless you're implementing, in which case you can choose either 21:22:48 implementations in most programming languages test just at the [ because that fits the semantics of while loops 21:23:01 but if you're implementing BF in an esolang, that's often slower if you have no while-loop-equivalent 21:23:06 so i built a weave interpreter (prefork, individual and shared tapes) that does brainfork runtime threading and pbrain subroutines 21:23:39 ais523, actually I remember testing once at entry and after that I tested if I should jump back at the end 21:23:48 and then jumped to the instruction after the matching [ 21:23:52 that was in bashfuck 21:23:53 iirc 21:24:08 AnMaster: there are a huge number of ways to do it, I think 21:24:33 ais523, in before I just emit a while loop currently 21:24:46 in the future I will emit for loops for balanced pure loops 21:24:50 where pure == no IO 21:25:00 yes it doesn't match pure as in pure functional 21:25:10 but it was the best word I managed to come up with 21:25:22 ais523, of course I plan to optimize it even more later on 21:25:38 but currently I haven't managed to understand exactly how that would be done 21:25:52 also it will to for when io isn't on iteration counter cell 21:25:54 and balanced 21:26:20 -!- psygnisfive has quit (Remote closed the connection). 21:29:32 ais523, 21:29:38 currently I have these flags 21:29:56 balanced, noinput, noputput, iter_noinput 21:30:02 fungot's brainfuck turns [ into bytecode "jump if zero" and ] into "jump if nonzero", with jump targets being one past matching pair. 21:30:03 fizzie: xpdf really should allow searching with regexps, ' fnord 21:30:43 bool balanced, noinput, nooutput, iter_noinput; 21:30:43 balanced = noinput = nooutput = iter_noinput = false; 21:30:47 is that bad coding style? :D 21:31:46 AnMaster: not IMO 21:31:57 ais523, hehe 21:32:00 well I guess not 21:32:05 although on an embedded system, you could save 3 bytes of memory by making them bitfields in a struct 21:32:26 and it'll be faster that way on most such systems as they have bit-test instructions, they can handle bits faster than entire ints 21:32:32 OTOH, most RL processors will prefer ints 21:34:31 ais523, they are in a struct 21:34:46 just I need to track them in the function 21:34:52 where I work on loops 21:34:58 later I put it in the struct 21:35:00 also I typoed 21:35:03 it should have been: 21:35:11 ssize_t balance = 0; 21:35:11 bool noinput, nooutput, iter_noinput; 21:35:11 noinput = nooutput = iter_noinput = true; 21:52:33 -!- ehird has joined. 21:53:06 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/decimal-counter-uncommented.pfk 21:53:08 pgimeno is WIN 21:53:17 hehe 21:53:50 I liked the idea of "OCRing" 21:54:06 pgimeno, hm? 21:54:24 how does it OCR so quickly? 21:54:44 I found a bit pattern that worked for all numbers 21:54:48 see the commented version 21:54:56 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/decimal-counter.pfk 21:55:03 haha, that's great 21:55:14 chained IFs except for distinguishing 0 from blank 21:55:16 i really like the logistical constraints paintfuck givse 21:55:21 your output IS your memory, it's just such a nice idea 21:55:49 someone should make a version of PaintFuck where the source code is stored on the 2D tape, too 21:55:55 and is self-modifying 21:55:55 ais523: heh 21:56:40 it's nice as it is 21:56:52 pgimeno: wht happens when it reaches its own start? 21:56:53 fixed a repeated comment in the commented version, reload 21:56:55 does it just implode? 21:57:02 weave.rb reflective via braintwist's X swapper now 21:57:06 it'd be infeasable to wait that long ofc :P 21:57:11 ehird: dunno, try a smaller grid, it's designed for infinite grid 21:58:51 yep 21:58:53 ti messes up 21:59:04 well 21:59:09 it doesn't wrap 21:59:11 it starts counting the wrong digit 21:59:16 while making up its own digits :P 21:59:18 so it works on infinite grid 21:59:22 yes 21:59:45 yes, it increments by knowing which bits to change, if the number is not the expected it breaks 21:59:53 yeah 21:59:56 gtg 22:00:00 bye 22:00:01 -!- ehird has left (?). 22:00:04 -!- ehird has joined. 22:02:21 -!- ehird has left (?). 22:02:24 -!- ehird has joined. 22:02:29 hey ok 22:02:31 ok 22:02:33 where is oklopol 22:02:37 -!- ehird has left (?). 22:02:40 -!- ehird has joined. 22:02:43 -!- ehird has left (?). 22:02:46 -!- ehird has joined. 22:02:57 -!- ehird has left (?). 22:06:07 * oklopol has quit (Connection reset by peer) 22:06:13 not that you will see it anyway 22:09:13 ais523, there? 22:09:18 no 22:09:19 see /msg 22:09:23 well, maybe 22:09:27 I didn't get a /msg from you 22:09:39 oh, you warn me about /msg /before/ you say it? 22:16:17 -!- oerjan has quit ("Good night"). 22:19:20 ais523, yes I do 22:19:50 why? 22:20:04 just interested 22:24:22 -!- oklopol has joined. 22:24:54 ais523, why not? 22:25:11 because it spams the rest of the channel for no obvious reason 22:25:17 hm ok 22:25:18 good reason 22:25:25 if something's the sort of private thing that goes in /msg, why tell everyone else about it? 22:26:03 true 22:26:06 it was just spamming 22:26:09 spammy* 22:26:14 and didn't want to open pastebin 22:26:20 why refer to the past just as i join. 22:26:29 now i have to open logz 22:26:52 oklopol: we were discussing why AnMaster warns people they're about to get a /msg before e /msgs them 22:26:52 ais523, oh also how would you transfer a balanced loop to a polynom? 22:27:03 AnMaster: using algebra 22:27:09 the balanced loop runs the number of times of the first arg 22:27:21 -!- lostgeek has quit ("leaving"). 22:27:25 so you take the first arg, and multiply it by all increments inside the loop 22:27:43 so [->+<] is tape[0] times tape[1]++ or tape[1]+=tape[0] 22:27:45 polynoms, isn't that 4 + 2a + 1b^2 + 3c^3 = 0 22:27:46 -!- ehird has joined. 22:27:48 AnMaster: yes 22:27:51 ais523, right 22:28:08 so it goes from +1 to +x, effectively 22:28:14 with another nested loop, it can be +x^2 22:28:16 ais523, that require balanced "no-io" loops 22:28:20 yes 22:28:26 right 22:28:57 he probably warns you so you can say no if you're naked and don't want to see or something, kinda like a doorbell. 22:29:04 *want him to 22:29:12 dunno, just a guess 22:29:16 -!- Corun has quit ("Leaving"). 22:29:32 oklopol: /msg doesn't work like that, though, does it? 22:29:32 oklopol, err, irc is text only 22:29:40 more to the point, it's the other way round 22:29:49 also /msg is just the same as channel messages 22:30:04 PRIVMSG #channel 22:30:06 PRIVMSG nick 22:30:07 I suppose that if AnMaster warned me that he was about to send me an ASCII art goatse, a warning would give me time to ignore him 22:30:08 -!- GreaseMonkey has joined. 22:30:09 no difference 22:30:09 ais523: good point 22:30:12 but why would he do that? 22:30:14 AnMaster: bad point 22:30:21 oklopol, ? 22:30:31 they are both the same on protocol level 22:30:32 AnMaster: as opposed to ais523's 22:30:52 AnMaster: correct but not very relevant point, I think oklopol meant 22:30:57 >> :ais523!n=ais523@eso-std.org PRIVMSG #esoteric :+AnMaster: correct but not very relevant point, I think oklopol meant 22:31:00 what i meant is 22:31:06 freenode adds the + 22:31:21 what ais523 said i didn't think about, what AnMaster said was a trivial fact i didn't consider worth mentioning 22:31:41 oklopol, ah 22:32:07 -!- Corun has joined. 22:32:09 oooooooooooooooooooooooooooooooooo 22:32:16 hi Corun 22:32:24 MOOOEEEEEEEEP 22:32:28 :DDD 22:32:35 yes i see you're in a goody moody! 22:33:29 actually... really had nothing to do with triviality, it's just what AnMaster said escaped the analogy, making it kinda pointless as what i said was just a joke 22:33:49 while ais523 attacked the analogy, which is relevant even if it's a joke 22:33:52 well true 22:34:29 * AnMaster ponders referring to the future just as oklopol will part 22:34:39 AnMaster: that's deep 22:34:43 hehe 22:34:48 that is the opposite of talking about the past forcing you to read logs 22:34:48 wait 22:35:00 just as i part or just before it 22:35:06 i'm really slow today... 22:35:14 ah 22:35:15 ofc 22:35:20 just as i'm about to leave 22:35:21 you say 22:35:42 "ais523, so wanna talk about this interesting thing?", and ais523 responds, umm, "yes" 22:35:47 that's it raelly 22:35:57 oklopol, just before 22:35:58 *ruylla 22:36:05 yes i raelized 22:36:07 ... 22:36:14 oklopol, yes or maybe about what we will say 22:36:17 *roalezud 22:36:17 in some detail 22:36:26 like. "will you mean that a == b"? 22:36:30 err 22:36:31 whatever 22:36:38 well actually you'd have to refer to it, that'd be more complicated 22:36:50 yeah 22:36:53 in detail, that's the point 22:37:06 fascinating issues, these 22:37:33 oklopol: what's with your typo corrections? 22:37:41 ais523, why not? 22:37:41 because it spams the rest of the channel for no obvious reason 22:37:41 hm ok 22:37:41 good reason 22:37:47 make that future tense 22:37:50 or whatever the word is 22:38:10 AnMaster: that would somehow connect oklopol around into a loop, though, wouldn't it? 22:38:21 ais523, well just as an example 22:38:47 ais523, why will you not? 22:39:00 ? 22:39:04 because it will spam the rest of the channel for no (currently) obvious reason 22:39:08 hm ok 22:39:14 will be good reason 22:39:17 ah 22:39:19 um... 22:39:20 ais523, just tried to make it future 22:39:22 that's ridiculous 22:39:23 didn't work 22:39:25 ais523, yeah 22:39:30 that doesn't work for that example 22:39:37 -!- psygnisfive has joined. 22:39:43 ais523: my typo corrections got tired of having to exist so often. 22:39:49 so they committed suicide. 22:39:55 in that case, probably using the present would be more idiomatic even if you're talking about the future 22:40:23 "why won't you?" "because it will spam the rest of the channel" "hmm... ok; that's a good reason" 22:40:28 but the last there is true present 22:40:33 why correct when you can type with your eyes ckised? 22:40:50 -!- Corun has quit ("Leaving"). 22:40:51 let me try that 22:41:02 i never look at my fingers 22:41:11 why cprrecy wjem ypi cam type with your ues c;psed? 22:41:16 it's a fun thing to try but not with a lump in your eye >_> <-- did it 22:41:23 wow, the result of that actually came out readable 22:41:36 I even got 3 words in a row right 22:41:51 took me a few seconds to find home row, then I typed it all quite quickly 22:41:51 occasionally it goes completely awol 22:42:19 enjoy coca cola. but enjot brainfuck even more. 22:42:23 if you use a sensible system, there's no difference whether they're open or not 22:42:29 anyways... 22:42:38 hah 22:42:47 ais523, ok 22:46:25 ais523, exactly how were you typing? 22:46:29 to be or not to be 22:46:35 if it was closed eyes 22:46:37 AnMaster: with my eyes shut 22:46:38 that worked perfectly 22:46:44 thisworks ok 22:46:47 well almost 22:46:49 heh 22:46:53 * AnMaster tries again, ok? 22:46:58 even using the bumps on f and j to find the home row 22:46:59 ais523, that wasn't hard 22:47:30 one of the garbles was because I forgot the bump was on j not h, normally I hover my fingers over f and h because I rarely type ; 22:49:34 i don't make any more mistakes with my eyes closed, i would never click enter before checking i typed it right though 22:49:54 ais523, err 22:49:59 I don't need that 22:50:23 I know the keyboard well enough 22:54:28 as soon as I find space, shit or enter 22:55:16 * AnMaster could probably use "das keyboard" if only it had Swedish keyboard layout 22:55:19 that is same size of enter 22:55:54 oh 22:55:57 "shift" 22:56:16 "shit" doesn't sound very AnMastery. 22:56:38 i, on the other hand, can find shit pretty well on my keyboard 22:57:24 -!- psygnisfive has quit (Remote closed the connection). 22:57:33 oklopol, ah typoed 22:58:07 -!- psygnisfive has joined. 22:58:09 well the keyboard does in cleaning 22:59:34 i recently found a keyboard on teh nets that had the keys in straight columns instead of diagonally randomized 22:59:45 but that was costy, and i have a laptop 22:59:55 but that might be pretty awesome 23:01:59 http://www.vjn.fi/pb/p333662665.txt Paintfuck decimal counter :) 23:02:33 oklopol, hm 23:03:02 MizardX, didn't someone else here also make one 23:03:06 pgimeno, iirc? 23:03:13 Just saw 23:03:26 MizardX, why did you want to make a decimal counter? 23:04:10 I saw a few hours ago that someone mentioned it. Thought it could be fun for a first paintfuck program. :) 23:04:59 That reminds me of a telemarketer that called my wife and tried to sell some magazine. When she said "no", the telemarketer said she needs to justify why she didn't want to order it. The implication was that if the reasons aren't good enough, she doesn't get to not order it. 23:05:23 fizzie, err that wouldn't be legal 23:07:52 -!- psygnisfive has quit (Remote closed the connection). 23:08:14 -!- psygnisfive has joined. 23:08:43 -!- decipher has quit (Read error: 54 (Connection reset by peer)). 23:10:43 fizzie: well what happened, were the reasons good enough? 23:11:30 MizardX: haha that's pretty great 23:12:34 ais523, err an issue 23:12:41 about that "until no changes" 23:12:44 when optimising 23:12:54 I change in place so I can't compare tree after 23:12:57 hm wait 23:12:58 right 23:12:59 duh 23:13:08 I could pass a flag if anything was changed 23:14:06 -!- decipher has joined. 23:28:31 MizardX: when the counter overflows, does it output "counter overflow, try increasing screen width", and you've hidden that in the code so that an average human brain cannot find that in teh code? 23:28:55 no 23:29:05 what does it output then? 23:31:08 WHAT, it just spouts random garble! 23:31:09 If the screen width is a multiple of four, the (w/4+1)'th digit would increase the ones, and it would continue counting. If the screen width is not a multiple of four, the result is undefined. 23:31:15 * oklopol is very disappointed! 23:34:16 -!- Corun has joined. 23:34:26 MizardX: great! seems that yours is more homogeneous than mine timing-wise 23:35:33 oklopol: 23:35:36 a 23:35:36 b 23:35:37 c 23:35:42 ehird: d 23:35:44 also 23:35:51 mizardx 23:35:52 which should be no surprise given the nested ifs I use 23:35:53 you were beaten 23:36:04 MizardX: 23:36:05 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/decimal-counter-uncommented.pfk 23:36:06 http://www.formauri.es/personal/pgimeno/temp/esoteric/paintfuck/decimal-counter.pfk 23:36:17 ehird: I think he knows 23:36:20 oh 23:36:24 well pgimeno's digits are more readable 23:36:25 :P 23:36:57 It's just a design issue 23:36:59 but slower on average 23:37:06 umm 23:37:09 pgimeno's seems to be faster 23:37:09 to me 23:37:13 well 23:37:14 maybe not 23:37:15 -!- psygnisfive has quit (Remote closed the connection). 23:38:22 -!- psygnisfive has joined. 23:38:46 it may depend on the interpreter, if a certain kind of instructions are not the same speed 23:39:54 now someone make a library for simplifying equations expressed as drawn digits & operators 23:40:03 & vars 23:40:12 simplifying equations? 23:40:18 well anyway, something sensible ;) 23:40:31 -!- Judofyr has quit. 23:47:18 -!- psygnisfive has quit (Remote closed the connection). 23:47:41 -!- psygnisfive has joined. 23:54:17 -!- jix_ has quit ("...").