00:02:34 hmm 00:02:40 the default bounds are left=0 and right=0 00:02:45 and parsing only ever extends right 00:02:50 wait, shit 00:02:54 Deewiant: how does this handle vertical? 00:14:41 -!- coolsner has quit ("Leaving"). 00:17:54 hey oklopok 00:17:56 you there? 00:25:11 poewijf 00:25:25 is there an alternative to answering 00:27:59 oklopok: NO. 00:28:04 well okay i am 00:28:08 I am about to get you addicted to another pointless game. 00:28:13 noooo 00:28:22 oklopok: http://sebleedelisle.com/games/moonlander3d/ 00:28:26 arrow keys + space 00:28:30 land on the straight four lines 00:28:34 repeat 00:30:06 i used to play a 2d version of that when i was 6 00:30:28 *1 00:30:35 yarr 00:31:12 hmm i don't get it 00:31:21 oklopok: you have to land softly and straight 00:31:23 or you crash 00:31:34 oklopok: and you have to find a landing pad 00:31:41 they're four straight lines, can't miss em 00:31:51 i guess i just wasn't careful enough. 00:31:56 ohh 00:32:18 keep track of your score, it resets as soon as you crash 00:32:20 i thought any straight line worked 00:32:24 so look at it before doing that :P 00:38:57 Siglo XX. 00:54:01 ehird: okay succeeded at first attempt 00:54:09 oklopok: that was a long first attempt 00:54:29 second too 00:54:37 i watched an episode of american dad 00:54:37 score? 00:54:54 i had 100 fuel, and 200 perfect landing score 00:55:02 on second i didn't look 00:55:07 at fuel 00:55:12 but took about 20 seconds to land 00:55:29 i'ma try 00:56:17 meh 00:56:22 i landed but failed :D 00:57:33 okay i have no idea how you see the score 00:57:34 but 00:57:40 i can land pretty much consistently 00:57:41 oklopok: "SCORE:" 00:57:43 on the display 00:57:45 yeah that shows nothing 00:57:45 it goes up when you land 00:57:50 continuously 00:59:16 nope. 00:59:21 kay 01:00:20 okay i lost it. 01:09:16 - 01:09:49 AAAAAAAA 01:09:52 ghostlopol 01:09:55 okloghost 01:23:01 ooooooooo 01:23:02 ooooooooooo 01:23:03 ooooooooooooo 01:23:04 ooooooooooooooo 01:23:05 oooooooooooooooo 01:23:06 o 01:23:15 well umm i need to sleep now 01:23:18 you know what that means? 01:23:50 nn 01:23:52 nn 01:23:53 um 01:23:54 y... 01:23:55 no 01:24:11 you shouldn't it's bad for you 01:25:03 ok 01:25:06 like drugs? 01:26:37 something like that 01:26:45 wait 01:26:49 are you trying to trick me 01:26:57 into levitation 01:27:36 um 01:27:39 oklopok: well yes... 01:27:44 i was hoping once you did it would be ok... 01:27:45 :) 01:27:46 :( 01:29:22 be it a twofold glio, but i cannot agree to that. 01:29:53 oklopok: but can the glio be of the folding? 01:30:00 the fixed point glio conservative lawyering 01:30:06 that uses levitation, see 01:30:34 that makes no sense 01:30:36 speak english 01:31:53 oklopok: but... 01:31:53 okay 01:31:55 well 01:31:59 "twofold glio" you say 01:32:03 so that's a folded glio under twice 01:32:09 now, if we say infinite-fold glio 01:32:17 and unfold it, that's a fixed point glio 01:32:29 and, we can apply glio to conservative lawyering -- well known to involve levitation -- 01:32:34 and derive a proof of levitation 01:32:41 see? 01:32:42 ah 01:32:46 yes 01:32:53 so what i'm saying is, basically it's a proof that levitation is good 01:32:54 rather obvious when you think about it 01:33:21 ..a bit too obvious 01:33:22 mm 01:33:28 well i dunno 01:33:31 those infinite glios are elegant 01:34:39 okay mister, i'm going to sleep now 01:34:43 and have a dream 01:34:56 ok 01:34:58 do levitate! 01:35:08 it's not about that 01:36:26 -------> 01:47:08 -!- Gracenotes has quit (Remote closed the connection). 02:24:04 -!- Dewio has changed nick to Dewi. 02:24:33 -!- bsmntbombdood_ has quit (Read error: 110 (Connection timed out)). 02:29:12 -!- bsmntbombdood_ has joined. 02:41:23 coppro: So, is there a reason you named yourself "shit"? 02:41:48 -!- bsmntbombdood_ has changed nick to bsmntbombdood. 02:41:48 (Modulo an extra 'p') 02:41:49 * coppro sets the counter of people who misread his name to 4 02:42:13 I didn't misread it, but if I named myself "crapp" people wouldn't say "Oh, that clearly has no relation to the word 'crap'" 02:43:03 and no, no particular reason :P 02:43:10 (Even if my name was Crap Partridge) 02:44:48 I remember there was somebody on here a while ago called sekmet (sekhmet? Sekkmet? Something like that). Because I recognized "met" as Ancient Egyptian for penis I looked up his name in Ancient Egyptian, and although I couldn't find a way of reading it that included "penis" it is sekem -et, which means "grey haired woman" 02:45:10 By the way, don't ask me why I know the ancient Egyptian word for penis ... 02:56:37 -!- Sgeo has joined. 03:00:13 -!- psygnisfive has quit ("Leaving..."). 03:04:48 -!- Gracenotes has joined. 03:27:56 -!- pikhq has quit ("leaving"). 03:48:50 -!- pikhq has joined. 03:49:40 -!- amca has joined. 03:50:17 Mezzacotta really needs to be on IsItFunnyToday 03:50:27 -!- amca has quit (Read error: 104 (Connection reset by peer)). 05:07:25 -!- bsmntbombdood has quit (Read error: 110 (Connection timed out)). 05:08:01 -!- bsmntbombdood has joined. 06:22:28 -!- Sgeo has quit (Read error: 110 (Connection timed out)). 06:48:18 -!- pikhq has quit ("Foo"). 07:14:39 -!- olsner has joined. 07:39:39 -!- GreaseMonkey has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:25:13 -!- olsner has quit ("Leaving"). 08:35:38 -!- oklopok has quit (Read error: 60 (Operation timed out)). 08:35:49 -!- Judofyr has joined. 09:28:35 -!- WangZeDong has joined. 09:41:36 -!- Slereah has quit (Read error: 110 (Connection timed out)). 10:34:11 -!- oklopol has quit (Read error: 110 (Connection timed out)). 10:37:07 -!- psygnisfive has joined. 10:50:06 -!- GreaseMonkey has quit ("YES -> thor-ainor.it <- THIS IS *DELICIOUS*!"). 10:55:26 -!- jix has quit ("rz"). 11:36:55 -!- neldoreth|lp has joined. 11:57:47 -!- ajcc has joined. 12:10:19 -!- ais523 has joined. 12:18:08 hi ais523 12:19:17 -!- WangZeDong has quit (hubbard.freenode.net irc.freenode.net). 12:19:18 -!- ehird has quit (hubbard.freenode.net irc.freenode.net). 12:19:18 -!- ais523 has quit (hubbard.freenode.net irc.freenode.net). 12:19:19 -!- Dewi has quit (hubbard.freenode.net irc.freenode.net). 12:21:04 -!- ais523 has joined. 12:21:04 -!- WangZeDong has joined. 12:21:04 -!- Dewi has joined. 12:21:04 -!- ehird has joined. 12:21:29 -!- ais523 has set topic: Help, I'm trapped on the small side of a netsplit | http://tunes.org/~nef/logs/esoteric/?C=N;O=D. 12:22:21 Help, I'm trapped in a topic factory. 12:22:48 heh 12:31:19 -!- tombom has joined. 12:31:33 -!- tombom has quit (Remote closed the connection). 12:31:40 -!- tombom has joined. 12:40:53 heh 12:41:11 ais523, maybe you didn't see my "hi ais523" 12:41:15 if so there it is again. 12:41:19 no I didn't 12:41:35 I must have netsplitted away before you said it 12:41:52 well, it didn't show it as split yet, but detection isn't instant 12:42:07 was a minute before it showed any split. 12:44:41 ais523, I figured out a way around that EPL/GPL issue. Clearly I can as an author use a differently licensed open source library in my GPL program. Otherwise you couldn't write GPL programs for languages with standard libraries licensed under MPL and so on. Or GPL program using the platform specific API on Windows or OS X (needed for graphical programs for example). So I'll make this code I need a sep 12:44:41 arate library, licensed under original license. Then make it a dependency. 12:44:55 ah, ok 12:45:13 ofc, it's theoretically impossible to break the license on your own code 12:45:15 it is potentially useful for other people too. 12:45:21 the problem is whether downstream users can use it legally 12:45:26 ais523, yes I will probably bundle this library. 12:45:43 ais523, what about "special linking exception" or similar. 12:45:53 well not the GCC style one. But a reverse one. 12:46:41 like "as a special exception you may link this program against the EPL licensed Erlang runtime libraries and ." 12:46:53 or something 12:46:54 yep, although that isn't worded correctly 12:47:00 ais523, IANAL! 12:47:06 so what is the correct wording. 12:47:09 neither am I 12:47:21 yet you know it isn't the correct one. 12:47:22 but you want to mention which explicit right under copyright law you're allowing 12:47:29 in this case, you want to allow derivative works 12:47:33 of a certain form 12:47:38 hm? 12:48:08 "as a special exception to this license, you may create a derivative work from this work by linking it against EPL licensed Erlang runtime libraries even if it would not normally be permitted by the text of the license on this work" 12:48:16 that's probably not perfect 12:48:19 but it's better than what you wrote 12:48:42 it is just a "need non-GPL library" case. And after looking at the logic of the supervisor module.... No way I'm going to try to do a black box reimplementation of it. It is very sophisticated and handles lots of strange edge cases. 12:48:59 ais523, hm ok 12:49:43 ais523, there are some other GPL erlang programs. I'll take a look at their license file later. 12:49:50 AnMaster: that special exception, btw, wouldn't allow people to redistribute binaries created by linking the EPL supervisor to your program 12:49:54 but would allow them to do the linking 12:49:55 anyway, where would that be put? In the copyright file header. 12:50:12 general habit is in a comment at the top of the source, and in the readme 12:50:13 ais523, um... erlang links at runtime. 12:50:15 so... 12:50:18 so no problem 12:50:39 but say some sort of compiled erlang is invented in future, the license won't automatically extend to that without your intervention 12:51:21 ais523, erlang does support compiling to native code (HiPE), but the linking is still done when the modules are loaded. And modules are loaded as needed. Meaning if a module is never called it won't be loaded. 12:51:55 AnMaster: the point here is that licences don't just cover current uses, but all the uses that might be invented in future 12:51:58 this messes up profile results, making the callstacks look odd. 12:52:18 it's important to be able to determine if something is legal, even if the license never thought of it 12:52:41 (suddenly you see a reference to error_handler:undefined_function/3 in the callstack). 12:52:50 ais523, hm ok 13:28:53 http://iki.fi/deewiant/deps-20090428.png - CCBI's module dependency graph 13:29:23 Deewiant, what tool did you use 13:29:27 also that is rather messy 13:29:35 It says right at the bottom 13:29:41 ah didn't see 13:29:45 The thing that draws the graph is graphviz's dot 13:29:48 since I had to zoom out so much to see it all 13:30:22 Deewiant, is this 1 or 2 13:30:24 2 13:30:38 wouldn't fixp use random 13:30:51 oh and turt too 13:31:01 err 13:31:03 toys 13:31:20 1 is tricky to graph since the fingerprint modules are isolated 13:31:32 hm ok 13:31:37 So I can't be bothered 13:31:51 Deewiant, why doesn't fixp and toys use ccbi.random 13:32:18 They do, they just don't import it. 13:32:25 also, isolated in what way. IIRC they called core functions. 13:32:38 Isolated in the sense that they're not imported from anywhere. 13:32:42 Deewiant, ok... that seems odd. Why doesn't it graph uses rather than imports. 13:32:48 They're just compiled in. 13:32:54 Deewiant, so you have a static list in 2 now 13:33:08 AnMaster: Because it's not a D frontend, it just greps for import 13:33:12 ah 13:33:53 Deewiant, for C, doxygen can graph #includes iirc. 13:34:24 I'm sure I could modify dimdotter to grep for #include quite easily :-P 13:34:38 But yeah, such tools exist. 13:36:27 Anyhoo, I just thought that was a funny pic, with the way the fingerprints fan out like that and all. 13:39:45 yes 13:41:37 does CCBI2 pass Mycology yet? 13:41:53 Of course, I don't think there's a version in the Git that doesn't. :-) 13:44:19 Although this might explain it. The first 2.0 commit: 21 files changed, 3165 insertions(+), 2394 deletions(-) 13:44:39 that's not how you're meant to use an easily-branchable VCS... 13:45:06 I know, I just don't like the idea of something that doesn't even compile being a logged commit 13:46:02 Deewiant, I know what you mean 13:46:25 making sure each compile is good for bisection too. 13:46:32 -!- ais523 has quit (Remote closed the connection). 13:46:40 That just unfortunately leads to changes like the above. 13:48:04 Hmm, it seems that my rewrite of the tracer is included in that change; that could've been separated, certainly. 13:48:28 Other than that I don't think there's much room for reducing it. 14:27:20 -!- Gracenotes has quit ("Leaving"). 14:38:23 -!- Judofyr has quit (Remote closed the connection). 14:47:13 -!- FireFly has joined. 15:03:40 -!- Slereah has joined. 15:03:52 I am at the science factory beep beep 15:17:54 -!- ais523 has joined. 15:38:47 -!- coppro has quit (Remote closed the connection). 16:05:43 -!- Slereah has quit ("Leaving"). 16:11:51 -!- neldoreth|lp has quit (Client Quit). 16:13:20 "[citation needed][10]" — Wikipedia 16:13:27 hahaha 16:13:28 Like instructions on a toothpick. 16:13:45 would be even funnier if [10] was an {{unref}} template or something 16:13:54 18:41:23 coppro: So, is there a reason you named yourself "shit"? 16:13:57 EXACTLY MY THOUGHTS. 16:15:21 04:46:41 like "as a special exception you may link this program against the EPL licensed Erlang runtime libraries and ." 16:15:24 don't you love Erlang idioms? 16:15:31 an erlang idiom is to use the EPL, presumably 16:15:56 "And after looking at the logic of the supervisor module.... No way I'm going to try to do a black box reimplementation of it." 16:16:04 How can you do a black box reimplementation if you've seen the code? 16:17:48 05:44:39 that's not how you're meant to use an easily-branchable VCS... 16:17:53 I find it hard to use a vcs at first 16:17:55 I don't know why 16:18:01 it's just a tic 16:18:05 of some sort or another 16:18:20 'git init' makes me twitch for new projects 16:18:34 Deewiant: I need to store two boundary maps, vertical & horizontal, right 16:18:37 ? 16:20:28 ais523: so I've gone insane and am implementing befunge98 16:20:29 again 16:20:35 oh, wait 16:20:37 you were there eysterday 16:20:38 xD 16:26:04 -!- Hiato has joined. 16:28:44 an erlang idiom is to use the EPL, presumably <--- why not read it all. 16:28:50 i did 16:36:11 ehird: You need to know the bounds in all directions. 16:36:24 Deewiant: Including diagonally and (3,4) and shit? 16:36:33 Umm, that sounds like infinite work to me. 16:37:04 Well, basically yes, since you need to be able to wraparound with all possible deltas. 16:37:15 not necessarily 16:37:20 Deewiant: So, um, how can I avoid doing infinite computation? 16:37:20 you can compute bounds for flying IPs on the fly 16:37:22 But you don't need to store the info for all deltas, of course. 16:37:24 err, pun not intended 16:37:36 http://www.opera.com/? ← LOL 16:37:40 (visit in a graphical browser, srsly) 16:37:46 and it doesn't matter if you try to run a few out-of-bounds commands, because of the spaces 16:38:02 the only drawback to not knowing diagonal bounds is performance problems 16:38:17 ehird: You don't need to store even as much info as you're planning on storing for horiz/vertical bounds, two points (min/max of bounding rectangle) are enough 16:38:20 ehird: OK, that's ridiculous, and it isn't even april 1 16:38:29 ais523: opera's 15 years old 16:38:36 yes, but still... 16:38:37 Of course, the more you store the easier it is to calculate it when you're actually wrapping, I guess. 16:40:08 Deewiant: But 16:40:14 Does that handle the minimum-of-each-line? 16:40:19 That y needs or sth 16:40:27 You don't need minimum-of-each-line. 16:40:38 I thought you did :P 16:40:51 2009-04-28 00:40:38 ( Deewiant) For y, you need to know the min/max point describing the smallest rectangle that bounds it 16:41:01 Where 'it' is the whole funge-space. 16:41:09 http://www.opera.com/? ← LOL <-- hahaha 16:41:11 minRect :: Point, 16:41:11 maxRect :: Point 16:41:13 TADA 16:41:28 ehird, funny url it redirects to as well "http://www.opera.com/?mode=forreals" 16:41:39 for reals 16:42:41 Deewiant: Well, I have a fungespace data structure and parser in 41 lines of code. Now I just have to add bounds stuff 16:42:58 (Yes, it handles transparent-space and \n,\r\n,\r) 16:43:37 Does it handle \f? 16:43:44 \f? 16:43:54 \f. 16:44:10 Deewiant: What's f and where is it mentioned in the spec 16:44:11 Deewiant: just for curiousity, will CCBI 2 support trefunge? 16:44:18 lifthrasiir: Yes, it will. 16:44:23 ehird: \f is form feed. 16:44:42 Deewiant: Oh, you mean trefunge ^L? 16:44:47 Befunge98-only, so. 16:44:48 *yo 16:45:00 ehird: You still need to handle it, just like Unefunge needs to handle line breaks. 16:45:12 "In Trefunge-98, the Form Feed (12) character increments the z coordinate and resets the x and y coordinates to zero. " 16:45:16 Deewiant, if you will support trefunge, then will you have some mycology part to test it? 16:45:20 The rest of the doc mentions non-newline/space chars just going into the field, Deewiant. 16:45:26 AnMaster: Possibly something small. 16:45:35 Ergo, my current behaviour -- putting 12 in the space -- is correct. 16:45:38 ehird: "Subsequent lines in Unefunge are simply appended to the first, and the end of the source file indicates the end of the (single) line. End-of-line markers are never copied into Funge-Space. " 16:45:46 Deewiant: In unefunge. 16:45:56 ehird, That behaviour extends to \f for befunge 16:45:56 ehird: Applies analogously for \f in Befunge. 16:46:06 Uh huh. Where in the spec does it say this? 16:46:12 It doesn't. 16:46:15 I see. 16:47:10 ehird, I hope you can handle all the line endings. For different parts of the same file. 16:47:21 He just said he could. 16:47:33 go fs (Point x y) ('\n':zs) = go fs (Point x (y+1)) zs 16:47:34 go fs (Point x y) ('\r':'\n':zs) = go fs (Point x (y+1)) zs 16:47:35 go fs (Point x y) ('\r':zs) = go fs (Point x (y+1)) zs 16:47:37 go fs (Point x y) (' ':zs) = go fs (Point (x+1) y) zs 16:47:39 In da hizzouse. 16:47:47 ehird, how do you handle \r\r 16:47:52 as in a blank line 16:47:59 go fs p ('\f':zs) = go fs p zs 16:48:00 As a blank line. 16:48:03 right 16:48:06 damn you haskell! 16:48:08 Deewiant: Not spec compliant. 16:48:27 AnMaster: Aww, wuzzat? Cute lil' cfunge's parser is longer than a few lines? 16:48:27 ehird: Taking the spec too literally is not always the best idea. 16:48:35 Deewiant: Fair enough. 16:48:57 ehird, yes but C is quite verbose. And it uses various shortcuts to optimise initial loading 16:49:36 ehird: There are a bunch of places like this where something is said for one case, and then the other case is forgotten about, but it's fairly obvious what the other case should've been. 16:49:44 t for example 16:49:45 Yar, okay. 16:50:23 Ah yes, t. If you take t literally every t will be a forkbomb. 16:50:28 :-D 16:50:35 *Hypha.Fungespace> mycology <- readFile "/Users/ehird/Downloads/mycology/mycology.b98"; return () 16:50:39 Yaaatatatata, 16:50:41 deedededeeeeeeeeeeeeee 16:50:45 Mycologyyyyyyy 16:50:48 I will parse theeeeeee 16:50:51 Deewiant: why? 16:50:59 ais523: because it forks onto the same place 16:51:02 and runs t again 16:51:03 I assume 16:51:04 ais523: It doesn't spec that the child IP should move off the instruction. 16:51:06 :D 16:51:18 -!- Ilari_ has joined. 16:51:28 -!- dbc has quit (hubbard.freenode.net irc.freenode.net). 16:51:28 -!- ineiros has quit (hubbard.freenode.net irc.freenode.net). 16:51:28 -!- Ilari has quit (hubbard.freenode.net irc.freenode.net). 16:51:30 Deewiant: doesn't it state that the IP reflects there? 16:51:39 IMO, a reflection implies movement to the location you reflected from 16:51:43 *Hypha.Fungespace> parseFungespace mycology Loading package syb ... linking ... done. 16:51:44 Loading package array-0.2.0.0 ... linking ... done. 16:51:45 Loading package containers-0.2.0.1 ... linking ... done. 16:51:47 Fungespace {space = fromList [ ** LONG PAUSE ** FLOOD OF POINTS 16:51:59 ais523, no reflection just implies reversing IP iirc. 16:52:08 ais523: IMO it just means inverting the delta. 16:52:11 if you are going to prove otherwise a LOT will need to change. 16:52:14 Er. 16:52:15 so better not. 16:52:17 Deewiant? 16:52:18 62),(Point {x = 57757, y = 392},118),(P 16:52:20 Spot my bug. 16:52:21 ;-) 16:52:24 "The child IP's delta is reversed (a la r) from its parent's, though." 16:52:29 ehird: Point 0, not Point x. 16:52:37 "a la r" could imply such thing, but i'm not sure 16:52:38 For the top three cases. 16:52:38 Deewiant: Yep. 16:52:40 ehird, I think you forgot to reset x. 16:52:43 Yes. 16:52:44 well, does r specify that the IP moves? 16:52:44 I know. :P 16:52:46 when y was inrcremented. 16:52:50 incremented* 16:52:52 ais523: Nope. 16:53:07 there is one difference though. 16:53:15 Hey, it parses mycology quite quickly. 16:53:16 -!- ineiros has joined. 16:53:19 ~0.2s 16:53:24 Maybe 0.3 16:53:27 ehird, that's a lot. 16:53:28 ;P 16:53:39 AnMaster: 46 lines of unoptimized code 16:53:44 AnMaster tries to /run/ Mycology in less than a tenth of that. 16:53:46 ehird, but if your goal isn't speed then I won't mention it again. 16:54:06 AnMaster: Compliance and insane amount of fingerprints (e.g. hopefully MKRY ones 16:54:07 err 16:54:11 AnMaster: Compliance and insane amount of fingerprints (e.g. hopefully *all* MKRY ones) first 16:54:12 then speed 16:54:14 Deewiant, 0.035 is quite possible, with clean environment 16:54:17 and my computer is older 16:54:21 ehird: even IFFI? 16:54:24 data Point = 16:54:25 Point { 16:54:25 x :: {-# UNPACK #-} !Int, 16:54:27 y :: {-# UNPACK #-} !Int 16:54:28 ais523, :D 16:54:29 } deriving (Show, Eq, Ord) 16:54:31 note that IFFI was written to be independent of INTERCAL 16:54:31 ↑ Enough optimization for one day. 16:54:32 ehird: so how about FNGR? 16:54:33 ais523: sure! 16:54:35 noone but cfunge has IFFI 16:54:39 you can implement it in pure-Funge, but it's feral 16:54:39 atm 16:54:41 lifthrasiir: FNGR's feral right? No problem. 16:54:47 I'm doing TRDS too. 16:54:49 Which will be EASY. 16:54:50 ehird, TRDS? 16:54:53 MVRS? 16:54:54 ehird: FNGR contradicts the spec 16:54:55 Since in Haskell, 16:55:00 Everything is easy! 16:55:01 I can just keep a list of all states as I go 16:55:04 and retract back 16:55:06 Aha :-D 16:55:12 Since that's how I'll have to write the interpreter loop anyway 16:55:14 (sans keeping list) 16:55:18 ehird, what about forward jumps with TRDS 16:55:19 IMO, the correct treatment of FNGR is to switch to the old buggy RC/Funge interpretation of fingerprints to make it make sense 16:55:29 AnMaster: sure, not insanely difficult 16:55:31 ais523: The spec says that. 16:55:34 These days. 16:55:38 ah, ok 16:55:39 ehird, MVRS? 16:55:42 Since I told him to add it. :-P 16:55:46 ATHR? 16:55:49 well 16:55:50 ATHR? 16:55:53 ATHR isn't done yet. 16:55:54 ATHR :D 16:55:57 What's ATHR? 16:56:02 ehird: one of AnMaster's fingerprints 16:56:03 "Asynchronous threads"? 16:56:07 for asynchronous threading 16:56:08 Oh. 16:56:09 I'm implementing the core changes needed in efunge for it. 16:56:10 Maybe. 16:56:14 it is VERY intrusive. 16:56:17 That should be relatively easy 16:56:22 well TRDS is possibly worse. 16:56:31 well, not really, arguably you could just implement ATHR the same way as regular threading 16:56:33 Thing with haskell is that it's hard to do feral stuff, so I'll have to come up with a modular interpreter. 16:56:38 Which will make more feral things easy. 16:56:44 by deliberately introducing asynchronies now and again 16:56:51 and ferality is relative 16:56:56 Deewiant, not if you consider the atomic stuff and such. And that it should be able to take advantage of SMP. 16:57:03 IFFI may feel feral; but the only replacement it needs is of the main loop 16:57:03 and possibly distributed nodes in the future. 16:57:04 Anyway I'm having a debugger with a time scrubber (like media players) so that covers TRDS, really 16:57:09 AnMaster: Well, I haven't seen the spec. 16:57:09 ais523, yes. 16:57:18 Deewiant, you have. Ages ago. 16:57:29 Is it still valid? 16:57:33 I suspended the work on it during half a year or so. 16:57:34 ais523: It also does not use the word "reflects": "When a child IP is borne unto Funge-Space thus, its location, storage offset, and stack are all copied verbatim from the parent IP's. The child IP's delta is reversed (a la r) from its parent's, though." 16:57:38 Deewiant, mostly. Some details changed. 16:57:48 Deewiant, mostly related to how bounds are updated. 16:58:01 fizzie: ah, ok 16:58:02 Deewiant, once ATHR is loaded mycoedge is undefined behaviour. 16:58:11 that doesn't say the parent's IP moves either 16:58:33 AnMaster: what's Funge-108's opinion on copying fingerprints from parent to child when t is used? 16:58:36 ais523, ip always move after instruction executed. 16:58:53 ais523, "copy them". 16:59:09 I have yet to see any interpreter which doesn't. Well CCBI didn't use to, but it changed. 16:59:17 and that's 19 16:59:18 109* 16:59:28 Deewiant: hmm, do I have to shrink min bounds too? 16:59:34 i.e. if you have nothing on column 1 16:59:36 AnMaster: pyfunge doesn't atm. 16:59:41 really? ok 16:59:42 ehird: Yes. 16:59:50 of course I do a sparse copy 16:59:59 only allocating stuff if there is anything to copy 17:00:07 Deewiant: well, growing bounds is trivial, but I can't think of a non-completely-expensive computational way to shrink em 17:00:41 you only have to worry about shrinking when you write a space 17:00:42 ehird: Yep. AnMaster's solution was the equivalent of your "Map Int". 17:00:46 Deewiant, lifthrasiir ais523 ehird: http://pastebin.ca/1406233 (all but lifthrasiir have seen it before, anyway note some stuff remains to be decided. It is subject to change.) 17:01:00 Deewiant: But the map int only covers lines, not verticalines! 17:01:09 ehird, err... 17:01:10 ehird: Two Map Ints. 17:01:18 ehird, check src/funge-space/funge-space.c 17:01:20 Deewiant: Gee, you mean my original solution that you said I don't need? 17:01:21 Thx :-P 17:01:21 for how I do it 17:01:22 Or Map (Int,Bool) if you're so inclined, whatever. 17:01:28 AnMaster: I can't; GPL3. 17:01:31 oh 17:01:32 well 17:01:35 Not worth the legal risk ;-) 17:01:37 ehird: You didn't need it for what we were discussing. 17:01:44 I use two counts, one for columns, one for rows. 17:01:48 ehird: And you still don't need it. 17:01:55 ehird: I don't think reading GPL3 code is illegal 17:01:59 Deewiant: But it makes it more convenient, no? 17:01:59 ehird: As you said, it's just expensive to check it if you don't have something like that. 17:02:04 nor copying the algorithm, as AnMaster doesn't have a patent on it 17:02:06 ehird: Yes, and that I did say. :-) 17:02:06 I do some mad logic to try to reduce the need of updates. 17:02:16 so 17:02:18 although translating it might be 17:02:20 it may be hard to follow 17:02:21 ais523: There is some scary legal precedent. 17:02:38 in fact I wrote it, and parts of it is black magic to me! 17:02:39 ugh, I wouldn't be surprised 17:02:40 If AnMaster said I can use cfunge algorithms under the MIT license, that'd work. 17:02:41 ais523, ^ 17:02:41 here or in America? 17:02:49 ehird, IANAL. 17:02:52 so no clue. 17:02:54 ais523: America, I think, but I'm not one to risk these things 17:03:06 despite not caring about copyright law 17:03:07 go figure 17:03:11 ehird, Any disputes should be settled in Swedish court. 17:03:16 AnMaster: ha 17:03:16 ;P 17:03:25 ehird, actually I just quoted the EPL. 17:03:32 iirc it says something like that. 17:03:38 weird 17:03:53 Any disputes should be settled in the Zimbabwean court. 17:04:01 ehird, well EPL is like MPL s/US/Sweden/ s/Mozilla/Ericson/ 17:04:03 basically 17:04:10 ugh, I hate the MPL 17:04:19 I don't blame you 17:04:27 ehird: you should require disputes to be settled in a Sealandish court 17:04:31 or even better, an Agoran court 17:04:50 data ColumnOrRow = Column | Row 17:04:53 death to Bool! 17:05:03 ehird, err you have a typo there 17:05:06 Deewiant: so, bounds :: Map (Int,ColumnOrRow) Point 17:05:09 AnMaster: wat? 17:05:14 data ColumnOrRow = Column | Row | SocketNotFound 17:05:15 clearly! 17:05:18 groan 17:05:22 ... socket? 17:05:38 ehird, yes, what about it. 17:05:41 ehird: Something like that, whatever. Ask AnMaster: I haven't implemented it. :-P 17:05:51 Deewiant: what's your stratergery 17:05:51 True | False | FileNotFound 17:06:02 Column | Row | SocketNotFound 17:06:05 symetry! 17:06:15 ehird: I don't have strategy, I fail. 17:06:16 symmetry* 17:06:22 ehird: I never shrink bounds, only grow them. 17:06:26 hm 17:06:29 Deewiant: The first step is admitting you have a problem. 17:06:29 -!- dbc has joined. 17:06:37 Now, praise God. 17:06:47 The next step is waiting until CCBI 2's release for the solution. 17:06:58 updateFungespace :: Point -> Int -> Fungespace -> Fungespace 17:06:58 updateFungespace p v fs = fs { space = Map.insert p v (space fs) } 17:06:59 ↑ this is going to be so ugly when I add bounds logic :( 17:07:58 AnMaster: Now I have to figure out how your strategy actually helps 17:08:03 ehird, well my strategy is to: 1) Turn of EXACT_BOUNDS option if possible ;) 2) If not possible, and if bounds are large, iterate through all values in the sparse hash and find the extremes, scan the static array 3) if bounds are small scan from the edges inwards to find first set column/row 17:08:18 the latter works better if you just end up shrinking 1-2 columns or so 17:08:28 but is too slow for slowdown.b98 17:08:28 Why do we need exact bounds again? 17:08:36 ehird, ask Deewiant 17:08:38 ehird: the spec says so 17:08:42 Deewiant: Ask. 17:08:47 in particular, it can be queried in-program using the y command 17:08:48 ehird: What ais523 said. 17:08:53 hah 17:09:01 Ah. Y. 17:09:05 no, y 17:09:06 ehird, y != Y 17:09:08 Why oh why, y? 17:09:17 I still think it's possible to treat y lazily 17:09:22 y, why, why, y? 17:09:38 ehird, btw, I don't shrink bounds except for y. Oh and I also store a flag that indicates if bounds are minimal, or are *possibly* too large. 17:09:39 and avoid calculating bounds unless mycoedge or slowdown or something deliberately tries to create a crazy bounds computation 17:09:51 ehird, to make multiple y faster. 17:09:55 Deewiant: does slowdown check exact bounds? 17:09:57 something that mycology does a lot. 17:10:03 ah, you could maybe chain mycoedge onto it 17:10:06 AnMaster: I refuse to be anything but spec compliant. I think. 17:10:30 ehird, so you plan to check for shrinking on every write to funge-space? 17:10:36 rather than only in y. 17:10:39 AnMaster: I only need to do that on writes of ' ', duh. 17:10:46 You can't shrink by writing anything else. 17:10:47 ais523: It does so indirectly: you might loop through 2^(8*sizeof(cell)) whenever you wraparound, if you don't shrink bounds. 17:10:53 actually I do it for wrap too, if difference between max and min is HUUUUGE. 17:11:00 or slowdown.b98 wouldn't work. 17:11:06 Deewiant: doing it directly would be interesting too, though, I think 17:11:24 AnMaster: lol@special cases 17:11:25 I didn't actually realize that it would do so indirectly. 17:11:32 It wasn't my goal. 17:11:38 ehird, yes of course. You only need to do it when either column or row count reach 0 in one of the edge columns even. 17:12:48 Okay, let's see. 17:12:58 Every write to fungespace, I need to check the bounds for both column and row. 17:12:59 Deewiant, btw slowdown is broken in efunge. It seems to have issues with bignum interpreters. If I make y lie and tell it it is 32 bit it works fine. 17:13:04 Right? And then grow if necessary. 17:13:09 I'll handle shrinking later. 17:13:17 AnMaster: Yes, I know, because it doesn't expect -1 from y. 17:13:49 Deewiant, well. I can't push any max value. that just wouldn't work. There is no inf in integer bignum. 17:13:50 AnMaster: It tries random numbers in the range [-2^(8 * y value), 2^(8 * y value)). 17:14:19 Which probably ends up looping infinitely as it gets the range [0,0). 17:14:19 Amirite? 17:14:26 Yes. 17:14:33 yay 17:14:55 ehird, maybe. Anyway if you want to check algorithms currently you should go for ccbi and/or cfunge. cfunge if you want the fast ones. 17:15:02 ;P 17:15:13 patches to make it even faster are welcome. 17:15:14 CCBI if you want the BSD-licensed ones. 17:15:19 ah right.. 17:15:34 Sorry, not copying any algorithms that aren't MIT-licensed ;-) 17:15:43 Purity, correctness, completeness, simplicity and featurefulness! and speed 17:15:44 ↑ motto 17:15:46 are BSD and MIT compatible 17:15:54 AnMaster: yes, only viral licenses are incompatible 17:15:57 BSD3 and MIT are almost identical 17:15:58 in practice 17:15:59 but i'd have to include the bsd notice 17:16:01 ais523: no, BSD2 = MIT 17:16:05 ah, ok 17:16:08 BSD3 has the redundant clause 17:16:12 ("don't use our name") 17:16:29 which other laws already cover 17:16:29 and BSD2 is so rare as to be nonexistant 17:16:33 so MIT is the best choice 17:16:45 ehird, correctness, speed, completeness, simplicity, featurefulness, purity is more like cfunge motto I suspect. 17:16:45 (BSD2 also looks a bit silly, it has "1." and "2." for two short, very related clauses) 17:16:58 not sure what "purity" means here. 17:17:01 AnMaster: completeness? TRDS, anyone? 17:17:05 ehird: Redundant? 17:17:09 purity means conceptual clarity and beauty of implementation 17:17:16 ehird, TRDS comes under featurefulness doesn't it 17:17:17 Deewiant: yes; other laws already cover it 17:17:19 so it's unneeded 17:17:22 AnMaster: no 17:17:25 ehird: What laws? 17:17:28 ehird, what is featurefulness then 17:17:40 Deewiant: 17:17:41 * Neither the name of the nor the 17:17:42 names of its contributors may be used to endorse or promote products 17:17:44 derived from this software without specific prior written permission. 17:17:47 I'm pretty sure that's illegal anyway. 17:17:51 ehird: That's the clause. I asked for the laws. 17:17:52 AnMaster: I'm not sure. 17:18:09 ehird, well cfunge try to be complete in the features it *does* support. 17:18:22 ehird, TRDS is one of the features it doesn't support. 17:18:24 Deewiant: It's not illegal for me to, say, go air an advert saying "Endorsed by Matti Niemenmaa and his CCBI project!"? 17:18:28 Well that's fucked up. 17:18:34 (Modulo parody) 17:18:35 ehird: I don't know. 17:18:42 I'm fairly sure it is. 17:18:44 ais523: Is it? 17:18:54 ehird, possibly depends on what country 17:19:12 but IANAL and so on... 17:19:30 lifthrasiir, what did you think about http://pastebin.ca/1406233 btw 17:19:31 ehird: certainly the advertising standards agency would get you for it, but that's not a legal system 17:19:37 ehird: The way I see it it's more so that if somebody uses CCBI, they can't say "Uses award-winning CCBI technology by Matti Niemenmaa", which is a bit different IMO. 17:19:38 looks fine. 17:19:41 lifthrasiir, thanks. 17:19:50 and it would be libel if your product was so bad if it made Deewiant look bad as a result 17:19:56 Deewiant: Oh well, I don't think clause #3 has ever actually been invoked 17:19:58 so it's rather irrelevant 17:20:00 lifthrasiir, anything you might decide to implement once it is completed? 17:20:14 as in, say if your product was rather dangerous, you claimed Deewiant had safety-checked it, Deewiant could sue you for libel for runing his reputation 17:20:16 the spec seems quite reasonable, and i would implement it once it's completed 17:20:16 ehird: That doesn't make it irrelevant. :-P 17:20:26 Your mom is irrelevant 17:20:52 lifthrasiir, oh also I suspect python threads doesn't count as "true async", rather think about that multiprocessor module thingy (forgot if that was the name or not) 17:20:54 ;P 17:21:11 (as i have to consider current fingerprint behavior anyway, ;P) 17:21:36 lifthrasiir, if it can't run two threads at once on separate cores it isn't done properly. That is my opinion. 17:21:50 Your opinion is irrelevant to the spec. 17:21:57 ehird, wrong. 17:22:00 asynchronous threading does not imply multi cores 17:22:01 check the first section. 17:22:02 SEE: hyperthreading 17:22:32 ehird, right that is valid too. But if two cores are available. Or two cpus. 17:22:42 I recommend it to be possible to use it. 17:22:47 AnMaster: Letting the funge program loose on all cores? 17:22:50 Awesome. How very stupid 17:22:51 of course it depends on the OS and so on if that actually happens! 17:23:19 ehird, I'm just discouraging lock step or other "not really concurrent" implementations. 17:23:46 if it was a RFC it would say RECOMMENDED rather than MUST for that ;P 17:23:56 AnMaster: you mean the infamous GIL? then you're right, but interpreters are free to implement ATHR with randomized simulation so it doesn't really matter, i think. 17:24:05 lifthrasiir, yes that was what I'm thinking about. 17:24:05 GIL? 17:24:17 global interpreter lock. 17:24:18 global interpreter lock. 17:24:21 snap. 17:24:25 ais523, python's equivilent of "big kernel lock" that used to exist way back. 17:24:26 well. 17:24:27 kind of 17:24:29 ah, I've heard of it but not the acronym 17:24:35 ais523: tl;dr: python sucks 17:24:51 ehird: wow, I didn't expect that comment coming from you 17:24:57 I thought you liked it 17:25:03 I had to bother with GIL when writing some code using the python C API. 17:25:04 ehird thinks everything sucks 17:25:06 rather sad. 17:25:10 ais523: It's one of the better mainstream languages. 17:25:14 ehird, sucking sucks. 17:25:16 ;P 17:25:16 yes, agreed 17:25:18 And I often defend things I don't actually like. 17:25:27 I've vehemently defended MS before. 17:25:29 i think even interpreters with proper thread should try to randomize the execution, for example by using... several processes? 17:25:33 Because I dislike inaccurate criticism. 17:25:38 oh, I'll defend MS for things too 17:25:41 ehird, under what conditions would you defend cfunge. 17:25:43 just wondering :D 17:25:54 AnMaster: if someone was saying it sucked because it was really slow? 17:25:59 why spread FUD about MS when there are legitimate concerns? 17:26:03 ehird, ok that would make sense. 17:26:04 ais523: exactly 17:26:27 ehird, well if fizzie finished jitfunge and he said that I would not complain. But that is a special exception. 17:26:51 lifthrasiir, I am in efunge. 17:27:05 Does funge need gc? 17:27:09 I suppose you can't really. 17:27:14 I mean, non-fungespace gc. 17:27:20 lifthrasiir, in fact I'm going as far as using different systems, some x86 and some amd64 and using distribution over network. 17:27:33 ehird, some fingerprints could possibly need less manual memory management with it 17:27:36 TURT. 17:27:41 but that is about all I can think of 17:27:44 right but nothing mandatory 17:27:51 AnMaster: and nightmare comes true. 17:27:54 otherwise the memory management is fairly straightforward. 17:28:02 wait 17:28:03 AnMaster? 17:28:05 bounds :: Map (Int,ColumnOrRow) Point 17:28:06 lifthrasiir, what? It isn't distributed *yet* but it wouldn't be hard to do. 17:28:07 should this be 17:28:09 bounds :: Map (Int,ColumnOrRow) Int 17:28:12 oh, no, wait 17:28:15 it should be (Int,Int) 17:28:18 err 17:28:18 for min and max bound 17:28:25 what 17:28:32 AnMaster: your bounding strategy 17:28:35 ehird, are you keeping a separate bound of each column? 17:28:44 And row, yes... 17:28:47 I'm just counting set cells in each column and row. 17:28:50 That's what Deewiant said you do. 17:28:59 someone must have misunderstood somewhere. 17:29:13 On the subject of Python sucking, 17:29:17 "A lot of people remarked that in my post on Tail Recursion Elimination I confused tail self-recursion with other tail calls, which proper Tail Call Optimization (TCO) also eliminates. I now feel more educated: tail calls are not just about loops" 17:29:20 — GvR 17:29:30 STOP WRITING A LANGUAGE RIGHT NOW AND READ SOME COMPUTER SCIENCE LITERATURE! 17:29:54 AnMaster: eh, the nightmare is not a difficulty of distributed one, but rather the expansion of that idea; i thought of a sort of electric sheep screensaver. *wink* 17:30:18 well, the point is, I assume, that failing to optimise tail-recursion leads to stack overflows, whereas failing to optimise other tail-calls just slows you down a bit 17:30:18 lifthrasiir, I never seen such a screensaver. I heard about them but no idea what the point of it is. 17:30:29 AnMaster: they're pretty fractal 17:30:29 s 17:30:34 and distributed stuff is fun 17:30:34 ah 17:30:44 that is a distributed fractal-generating screensaver, iirc. see http://www.electricsheep.org/ 17:31:03 ais523: wrong 17:31:05 ais523: mutual recursion 17:31:14 well, yes 17:31:18 lifthrasiir, this is more "cluster distributed" than "boinc distributed" in case this is what the confusion is about. No idea if it is that. 17:31:23 technically speaking, though, that's tail-recursion but not tail-self-recursin 17:31:25 *recursion 17:31:28 my point is that if guido doesn't understand trivial things like what tail call optimization is he's hardly qualified to make a language 17:31:29 at least, it's tail and it's recursion 17:31:44 and I think not understanding TCO is fine for certain forms of languages 17:31:46 -!- Ilari_ has changed nick to Ilari. 17:31:56 for instance, someone making a VHDL synthesizer will never come up against the issue at all 17:32:04 because the only sort of function call in VHDL is inlining 17:32:05 "First, as one commenter remarked, TRE is incompatible with nice stack traces" ← did you not read the responses where it was shown how to retain that‽ 17:32:06 ais523, mutal recursion happens in efunge btw. 17:32:17 well not a lot. But it can happen. 17:32:23 during hot code upgrade. 17:32:25 oh, this is an older post before that 17:32:31 f u /r/programming, start having accurate titles 17:32:41 that is another feature of efunge lifthrasiir. Hot code updates. No downtime. 17:32:48 for your enterprise befunge programs. 17:32:55 AnMaster: yes, that is truly enterprisey. 17:32:58 the interpreter itself can be upgraded on the fly! 17:33:11 lifthrasiir, really I just get this for free because I use erlang... :D 17:33:20 almost all of it. 17:33:56 by the way, i have to implement TURT but didn't decide output format to use yet 17:33:57 AnMaster: so, what's your actual structure, expressed in terms of (Map key value), (a,tuple), Bool (e.g. for column/row) and Int? :-P 17:34:18 SVG, raw PNG (with pure python implementation?), or... postscript? 17:34:32 lifthrasiir: svg & sdl 17:34:35 ehird, I don't know. I can express it in terms of static size_t colcount[STATIC_ARRAY_X] and a hash library! 17:34:38 & ps 17:34:55 lifthrasiir: I'd suggest SVG 17:34:59 AnMaster: come on, you have efunge. you surely know what an associative array is, what a tuple is, what a boolean is and what an integer is 17:35:05 ehird: SDL isn't exactly a format... 17:35:11 ehird, in efunge I don't do it that way 17:35:12 ehird: sorry, boolean? 17:35:12 sec 17:35:14 ehird: so you mean the user can choose his/her favorite one, right? 17:35:19 lifthrasiir: yep 17:35:25 i'd default to sdl 17:35:30 find_extremes([], MinX, MinY, MaxX, MaxY) -> 17:35:30 {{MinX,MinY},{MaxX,MaxY}}; 17:35:30 find_extremes([{X,Y}|T], MinX, MinY, MaxX, MaxY) -> 17:35:30 find_extremes(T, erlang:min(MinX,X),erlang:min(MinY,Y), 17:35:30 erlang:max(MaxX,X),erlang:max(MaxY,Y)). 17:35:34 recalculate_bounds_exact(Fungespace) -> 17:35:34 % Get first item as base for new bounds. 17:35:34 since it's "interactive" like console in/out 17:35:35 [{FirstX,FirstY}|Coordinates] = ets:select(Fungespace, [{{'$1','$2'},[{'=/=','$2',$\s}],['$1']}]), 17:35:39 NewBounds = find_extremes(Coordinates, FirstX, FirstY, FirstX, FirstY), 17:35:41 put(fspacebounds, NewBounds), 17:35:43 put(fspacebounds_exact, true), 17:35:45 NewBounds. 17:35:47 ehird, + some logic to update fspacebounds_exact. 17:35:47 AnMaster: I didn't ask for code. 17:35:51 I asked for the data structure. 17:35:52 far from as fast as the cfunge way. 17:35:52 * ais523 ponders what a Prolog funge would look like 17:35:58 That cfunge uses,. 17:36:21 ehird, well, cfunge uses associative array for funge space, except the static area around 0,0 as you know. 17:36:27 Not for fungespace! 17:36:28 FOR THE BOUNDS!!! 17:36:31 >_< 17:36:32 ehird, I have a similar thing for the bounds. 17:36:33 ais523: it could get TRDS feature for (almost) free. 17:36:35 ... 17:36:48 am I paranoid for looking at the cookies on Phorm's website every now and then to see if it's active on my connection? 17:36:49 but forget it then... 17:36:56 it isn't yet, but I'm worried they'll turn it on 17:37:02 ais523: what ISP? 17:37:13 ais523, "Phorm"? 17:37:14 Virgin Media, here 17:37:25 AnMaster: evil deep packet inspection → targeted ads company 17:37:27 AnMaster: it's a long story, look it up on Google or Wikipedia or somewhere 17:37:29 ais523: they're goingt o. 17:37:34 ehird: I know 17:37:36 that's why I keep checking 17:37:37 ah 17:37:39 ais523: use bogons ;) 17:37:47 I've been thinking up ways to annoy Phorm already 17:37:58 horse-porn-daemon 17:38:00 ais523, use ssl for most stuff of course. 17:38:05 for instance, I've thought of a few ways to make websites that break in Phorm, but not anywhere else 17:38:22 and I'll definitely be setting Phorm opt-out cookies once Phorm come online 17:38:29 ais523, I suspect everyone will change from that isp soon 17:38:35 AnMaster: HAHAHAAHA 17:38:36 AHAHAHAHAHAHA 17:38:37 AHAHAHAHAHAHAHAHAHHAHA 17:38:38 HAHAHAHAHAHAHHA 17:38:43 what 17:38:45 AnMaster: unfortunately, there are only a few major ISPs and Phorm have got to all of them 17:38:46 you so funny! 17:38:54 damn 17:39:02 ais523: hay did I mention bogons 17:39:03 :p 17:39:16 thought of that, but it would be unlikely to help 17:39:17 AnMaster: [[Phorm]]: Net income$-32,153,223 (2007)[3] 17:39:24 AnMaster: That's good, at least :-P 17:39:27 ais523: I mean the isp 17:39:30 ais523, that's sad. But isn't this a violation of laws. Integrity and so on. After all you are paying them already. It isn't like it is free ads sponsored. 17:39:33 AnMaster: no 17:39:37 it's perfectly legal 17:39:38 AnMaster: it may be illegal 17:39:44 ais523, hm 17:39:47 in fact, the EU are suing the UK for not having prosecuted Phorm for it yet 17:39:50 The website that hits back at the "privacy pirates'" smear campaign against Phorm. 17:39:50 http://www.stopphoulplay.com/ 17:39:53 on the basis that they ought to have a low against it 17:39:54 ais523, good! 17:39:55 lolololool 17:39:59 *law 17:40:35 anyway 17:40:46 ehird, said he wasn't interested in how cfunge did it. 17:40:47 meh 17:40:48 anyway, I plan to try some experiments 17:40:53 AnMaster: no i didn't! 17:41:01 i want to know the *data structure* cfunge uses to store bounds 17:41:12 it's my theory, for instance, that a web page behind a chain of exactly four redirects cannot be seen by a Phorm user, whether they have an opt-out cookie or not 17:41:14 ght_fspacecount_hash_table_t * restrict col_count; 17:41:14 ght_fspacecount_hash_table_t * restrict row_count; 17:41:18 static funge_unsigned_cell cfun_static_use_count_col[FUNGESPACE_STATIC_X]; 17:41:21 static funge_unsigned_cell cfun_static_use_count_row[FUNGESPACE_STATIC_Y]; 17:41:23 there 17:41:29 those are the data structures used. 17:41:46 I don't know the innate workings of cfunge's implementation, so concrete data structures are useless to me 17:41:54 ... 17:41:54 Thus why I asked for an abstract description 17:41:55 on some web browsers, it might require more than four I suppose 17:42:34 ehird, that would be like a triangle with sum of angles > 180 17:42:42 ... what 17:43:16 ehird, it isn't abstract. The algorithm is a ad-hoc thingy that works and is fast but isn't clean CS in any way. 17:43:34 >_< 17:43:38 that makes no sense 17:44:03 AnMaster: but you can get triangles with angle sum > 180 17:44:08 in hyperbolic geometries 17:44:16 err, no, spherical geometries 17:44:23 hyperbolics have angle sum < 180 17:44:24 In hyperbolic they're less than 180 17:44:26 ais523, well it was meant to be a Lovecraft reference. Go figure. 17:44:43 in fact, triangles on the surface of the Earth have angle sum > 180 17:45:00 ehird, ok Lets say it this way then. There are roughly 300-400 lines handling the bounds shrinking. Almost 1/3 of them are macros. 17:45:02 Proof that the Earth isn't flat! 17:45:03 if you draw a triangle between London, Stockholm, and Washington DC, you'll find its angle sum is considerably more than 180, for isntance 17:45:23 Deewiant: can you explain to him what i mean by wanting an abstract description instead of c dat types? 17:45:33 ehird, answer is I can't give one. 17:45:36 ehird: Nah, I'd rather you struggle 17:45:48 Deewiant: hate :| 17:45:57 AnMaster: English-language explanation of what you do. 17:46:06 ehird, there is no abstraction in it. I skip that due to speed reasons ;P 17:46:13 j/k 17:46:20 AnMaster: Trivial abstraction: your hash table is an associative array 17:46:25 There's one 17:46:27 Deewiant, very well.. I tried that before and ehird just shouted. 17:46:42 ehird, well, cfunge uses associative array for funge space, except the static area around 0,0 as you know. 17:46:42 Not for fungespace! 17:46:42 FOR THE BOUNDS!!! 17:46:42 >_< 17:46:42 ehird, I have a similar thing for the bounds. 17:46:43 ... 17:46:50 "similar" isn't too helpful... 17:47:09 yes but you got so angry and didn't say "sorry, overreacted" or anything like that. 17:47:18 So why would I want to continue. 17:47:33 Try to be polite, please ;P 17:48:10 <.< 17:48:17 (not claiming I'm perfect myself, but at least I try to not shout early on) 17:48:52 kay kay sorry 17:48:57 good. 17:48:59 Well then... 17:49:29 consider two arrays, sparse or static or whatever, it isn't important at this point. 17:49:56 the index for the first is the column (x coordinate) the index for the other is the row (y coordinate) 17:50:18 lets cal the first one column_count and the other row_count 17:50:19 call* 17:50:46 so column_count[0] stores how many cells are non-space in the corresponding column 17:51:08 that is the column for where x=0 17:51:22 the row_count works similar but for rows. 17:51:25 ehird, with me so far? 17:51:40 haven't 17:51:41 read 17:51:41 sec 17:52:04 AnMaster: OK, so I can do 17:52:10 ehird, on writes to funge-space that changes between space and non-space I update this count for the relevant row and column. 17:52:17 Map Int Int -- map of column number to number of non-spaces 17:52:19 Map Int Int -- map of row number to number of non-spaces 17:52:26 which I can then fold in as Map (Int,ColumnOrRow) Int 17:52:33 AnMaster: now, how does this handle wrapping? 17:52:36 ehird, normally I just grow the bounds, that is check if I'm writing outside the bounds and grow it to that. 17:52:38 how can you know when you're at the end? 17:52:44 but I also have a flag 17:52:46 it doesn't store the last position 17:52:49 just the count of non-spacse 17:52:51 *spaces 17:53:01 lets call this flag exact_bounds 17:53:12 flag 17:53:14 flag on what? 17:53:20 a global flag. 17:53:29 AnMaster: ok, I always want exact bounds FWIW 17:53:29 a boolan 17:53:32 boolean* 17:53:37 so it's always true 17:53:38 if true, the bounds are not too big, if false the bounds may be too big. 17:53:54 and on y I check this, if false I recalculate the exact bounds 17:54:01 based on the row and column counts. 17:54:03 where do you store the bounds 17:54:07 wait 17:54:16 ehird, well in a static variable, as two x,y pairs. 17:54:18 AnMaster: your counts are separate to the bounds? 17:54:23 ehird, yes they are. 17:54:24 holy waste of memory batman! 17:54:26 :| 17:54:37 ehird, what, I have 8 bytes on a 32-bit funge for the bounds. 17:54:43 true 17:54:44 well 9 with the "exact" flag. 17:54:49 it just seems like these could be folded into one. 17:54:51 ehird, it is small compared to the counts. 17:55:05 also I'm sure you don't need to recalculate like that 17:55:11 I'm sure it could be a lot simpler 17:55:17 ehird, that would require fast finding of the outermost values in the count arrays. 17:55:26 which would basically mean storing some sorts of bounds on them.... 17:55:34 yep 17:55:35 so you would end up with the same in the end ;P 17:55:39 AnMaster: nope 17:55:48 for each row, and each column, store: 17:55:49 ehird, yes, max/min for x and y 17:55:54 x1,y1,x2,y2,count 17:55:55 voila 17:56:01 fast bounds updating, wrapping, and counting 17:56:05 ehird, ah you mean store which exact cells are set. 17:56:11 well that seems like a waste of memory. 17:56:12 to me 17:56:20 AnMaster: store separate bounds for each row and col 17:56:35 so that you can wrap quickly, still have an exact count, and NOT have to recalculate all the time 17:56:38 ehird, yes that works, cfunge did early on 17:56:41 but it was worse 17:56:45 performance wise 17:56:49 I guess due to cache effects. 17:56:50 cleaner tho :P 17:57:15 ehird, anyway when you need to shrink bounds, remember you may need to shrink more than one value. There could be several columns with only spaces like: 17:57:15 data Bounds = 17:57:16 Bounds { 17:57:16 start :: Int, 17:57:18 end :: Int, 17:57:20 a a 17:57:20 setCells :: Int 17:57:22 } 17:57:23 remove the second a 17:57:24 & 17:57:26 bounds :: Map (Int,ColumnOrRow) Bounds 17:57:27 and it shrinks multiple 17:57:31 ah 17:57:32 ouch 17:57:39 Deewiant: does any other impl handle this? 17:57:52 ehird, anyway now comes the shrinking algorithm if you care 17:58:02 I have two ways. For "huge bounds" and "small bounds" 17:58:21 AnMaster: it seems easy - if we place a space, calculate bounds for this row and this column 17:58:21 for huge bounds, say 2^16 or something between max and min it is likely the data is rather sparse 17:58:31 so I iterate over all values found in the array 17:58:35 and store the extreme values 17:58:38 hmm 17:58:42 to find the minimal min/max. 17:58:43 i'd rather not have two cases 17:58:54 ehird: HsFunge, possibly pyfunge 17:59:19 ehird, for small ones, I prefer to scan in a spiral basically from the old edges towards the center. Well I don't do it in a spiral, but rather take each edge at a time. 17:59:23 lifthrasiir: does pyfunge handle exact bounds and shrinking and shit? 17:59:27 to find the first one where any cell is set. 17:59:33 ehird, iirc yes it does. 17:59:51 -!- Gracenotes has joined. 18:00:36 ehird, lets say you have a dense and large program where one edge shrunk by 1-2 columns, then scanning the bounds by enumerating all values in the hash array would be a waste. 18:00:44 that is the logic behind the two cases. 18:01:18 ehird, now this is an abstract view. In reality this is complicated by having a static region of the bounds near 0,0 too. But the overall idea is as above. 18:01:27 hm 18:02:05 ehird, this hash library has a C++ style iterator thingy for C which comes in handy for the "large bounds shrinking model" 18:02:21 for (p = ght_fspacecount_first(hashtable, &iterator, &p_key); 18:02:21 p; p = ght_fspacecount_next(&iterator, &p_key)) { 18:02:24 is what it looks like 18:02:24 i wonder if pyfunge's algo is simpler :) 18:02:33 not clean. But works. 18:02:36 ehird: I think HsFunge just did that slow-ass way of looping through potentially the whole funge-space to find the new minimum. 18:02:51 -!- Judofyr has joined. 18:02:54 what's pyfunge's license? 18:02:58 ehird, well cfunge is tuned for speed remember. That means the code often goes for speed instead of simpleness/clarity. 18:03:47 c 108 11453 4733 29.2% 2202 18388 18:03:50 that is what ohcount claims 18:03:53 the columns are: 18:03:56 Language Files Code Comment Comment % Blank Total 18:04:21 if I could just the code I wrote myself... 18:04:46 c 98 8920 3679 29.2% 1642 14241 18:04:51 Hypha currently has two lines of comments. 18:05:33 Admittedly it's only 58 lines long 18:05:36 ehird, well I'm rather fond of huge doxygen comments for public API. There are third party fingerprint developers for cfunge after all (ais523) 18:05:45 Haddock fuck yeah 18:05:56 ehird, and edoc for erlang 18:05:59 * ais523 should invent an INTERCAL auto-documentation system 18:06:00 did I mention haskell is awesome 18:06:01 yes most languages have one. 18:06:06 ais523, augh! 18:06:10 AnMaster: haddock's is nicer :-) 18:06:10 ehird: yes, but you're allowed to mention that, because it is 18:06:14 er, haskell's 18:06:30 ehird, Quite plausible. doxygen is a pain. 18:06:45 doxygen's hard to read 18:06:48 like it has issues with macros generating function prototypes 18:06:49 and so on 18:06:50 :/ 18:07:06 haddocks have nice function signatures and type definitions and hyperlinks :-P 18:07:12 ehird, I prefer macro hell over code duplication btw :) 18:07:28 AnMaster: my opinion on Don't Repeat Yourself: 18:07:29 go fs (Point x y) ('\n':zs) = go fs (Point 0 (y+1)) zs 18:07:29 go fs (Point x y) ('\r':'\n':zs) = go fs (Point 0 (y+1)) zs 18:07:31 go fs (Point x y) ('\r':zs) = go fs (Point 0 (y+1)) zs 18:07:42 ehird, does ghc have a preprocessor though 18:08:08 AnMaster: Well, you can enable CPP. A kitten dies though. But Haskell's referential transparency and laziness makes macros unneccessary most of the time 18:08:17 Template Haskell is a full macro system but normally you can just use a value/function 18:08:24 ehird, oh and cfunge has rather different loading functions for initial file loading at 0,0 and loading from i 18:08:31 because I can take short-cuts for the former! 18:08:52 it actually helped for speed. 18:08:56 AnMaster: Mine only does the former, but adding offset and write-onto support is as easy as changing 18:08:57 parseFungespace = go emptyFungespace (Point 0 0) 18:09:14 ehird, offset means additional calculations! :( 18:09:15 and 18:09:17 there is more 18:09:23 you need to track the size of the block you wrote 18:09:27 since i pushed that 18:09:33 why? 18:09:33 before it returns. 18:09:35 ah 18:09:38 "i" the instruction 18:09:42 well, that won't be hard 18:09:45 few ms slower 18:09:56 ehird, YES! IT'S TERRIBLE! ¿²«¤/= 18:10:03 Deewiant: how long does ccbi take to parse mycology? 18:10:22 ehird: That would be hardware-dependent, no? 18:10:32 Deewiant: Well yes. 18:10:32 ehird, don't say such bad, nay... foul, words as "few ms slower" 18:10:35 Deewiant: What order of magnitude? 18:10:41 0.Ns? 18:10:44 0.0Ns? 18:10:46 NNs? 18:10:53 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Ns? 18:10:57 ehird, btw you can't assume initial lower bound will be at 0,0 18:10:58 On my machine, CCBI 2 runs Mycology in 0.2s. 18:11:03 not runs 18:11:05 parses 18:11:13 ehird, there is nothing to parse in befunge 18:11:15 but that's quicker than my parse :D 18:11:17 well. 18:11:18 AnMaster: = loading fungespace 18:11:31 ehird: I was assuming it was, which is why I just quoted that figure, for comparison. :-P 18:11:56 ehird, ah you mean space filling the static area with write combining moves, then mmap()ing the file to load and scan that. 18:11:57 :D 18:11:58 Deewiant: so you can't measure actual parsetime? 18:12:29 ehird: I can, that'd just require me actually editing the code and recompiling and everything. :-P 18:12:41 On my machine, CCBI 2 runs Mycology in 0.2s. <-- what about cfunge. 18:12:45 Deewiant: Horrific 18:12:46 AnMaster: Less than 0.1. 18:12:52 Deewiant, how much less. 18:12:54 AnMaster: Planck time 18:12:56 :-D 18:13:02 ehird, I wish... 18:13:04 Grumble grumble 18:13:21 Deewiant, Release build of course. 18:13:29 actually, cfunge prints Mycology's output before you start running it 18:13:34 With output to dev/null: 0.03s. 18:14:02 ais523: wouldn't running mycology in planck time require the electronics going a teensy bit faster than light? 18:14:03 ais523, Damn that is the future version from 2038 where I implemented TRDS but made it work in reality by mistake! 18:14:06 don't use it 18:14:07 CCBI: 0.17s. 18:14:08 for large values of a teensy bit 18:14:12 ehird: not if the electronics were small enough 18:14:18 ais523: heh 18:14:28 ais523: smaller than planck length? 18:14:28 ais523, for same reasons as you shouldn't eat a quantum mechanic corpse in nethack. Except in time, not space. 18:14:36 by definition, I think 18:14:44 AnMaster: what are the advantages of the FUNGE_ATTR_NORET stuff in cfunge? apologies if this is a stupid question 18:14:46 AnMaster: but I don't think I have intrinsic speed 18:14:54 OTOH, I don't think I have intrinsic PR, so I'd better not 18:14:55 tombom: gcc might optimize it. 18:15:08 ais523, PR... um 18:15:10 ehird: CCBI's Mycology loading time is 0.02-0.03s. 18:15:10 unihorns are hard to come by in RL, I don't want to permanently lose a point of strength 18:15:17 ah! 18:15:19 "the game....you all just lost it. Also, I would like to point out that you are now breathing manually." 18:15:20 AAAAAAAAAAAAAAAAAAAAAAAAAAAGH 18:15:27 * ehird breathes very carefully 18:15:31 :-D 18:15:45 AnMaster: what are the advantages of the FUNGE_ATTR_NORET stuff in cfunge? apologies if this is a stupid question <-- why did you read the source. Are you as mad as I am. 18:15:46 anyway 18:15:51 it isn't to optimize 18:15:55 but to check for bugs. 18:16:13 "You are also blinking manually." 18:16:16 FUCK! :-( 18:16:28 I just hope I don't start beating my heart manua—— 18:16:28 ehird, don't paste it here. 18:16:28 marking something as noreturn can help the optimiser, but mostly is to suppress spurious warnings 18:16:35 i just find it interesting and ok thanks 18:16:42 ais523, exactly. 18:16:45 tombom, sure :) 18:16:57 and fewer false positive warnings -> true positive warnings are easier to spot 18:16:59 tombom, you may want to look at the setup code in funge-space/funge-space.c 18:17:11 (NOT, unless you are insane) 18:17:29 (seriously that is the most horrible #ifdef maze I have seen) 18:17:34 oh god 18:17:35 (well used to be, a bit better now) 18:17:35 yeah 18:17:40 tombom, you saw it. 18:18:04 tombom, yes or no. 18:18:05 AnMaster: http://news.bbc.co.uk/1/hi/technology/8021661.stm 18:18:09 you were wondering about Phorm 18:18:14 yes i just saw it 18:18:17 tombom, movntps! 18:18:18 that's pretty hairy 18:18:36 tombom, or haven't you reached the inline asm bit yet? 18:18:45 AnMaster: it would be very funny if you ported cfunge to gcc-bf 18:18:48 but continued with the inline asm 18:18:57 ais523, it would be even funnier if YOU did it :P 18:19:00 yes 18:19:03 well, no 18:19:07 yes it would. For me. 18:19:10 all the BF commands translate to ABI 18:19:14 except < and > 18:19:19 because ABI always keeps track of where the pointer is 18:20:18 tombom, anyway cfunge is correctness > speed and completeness > * > simplicity ;P 18:20:23 http://www.lolworld.com/ 18:20:23 LOL (Life On Line) Internet Consultants 18:20:24 We Help You Use the Internet to Expand YOUR World! 18:20:42 Bah, simplicity is for the simple-minded. 18:20:57 pretty impressive 18:20:57 Deewiant, yes. You need to check that file too then. 18:21:03 tombom, thanks :) 18:21:09 or maybe that wasn't a good thing. 18:21:39 I'm amused by how correctness > * but you still have EXACT_BOUNDS as a compile-time option. :-P 18:21:56 Deewiant, It is on by default. 18:22:05 But it's optional. 18:22:11 How can correctness be optional? 18:22:22 'Nazi' cattle being bred in UK 18:22:25 — BBC News 18:22:26 Deewiant, because I'm not sure I agree with your interpretation of this. 18:22:27 [ ] Insert bugs 18:22:38 Meh. 18:22:42 Deewiant, in ick that is on by default. 18:22:43 ;P 18:22:52 Deewiant: so is your interpretation correct 18:22:52 :P 18:22:55 Yes, but that's INTERCAL, where correctness is indeed optional. :-P 18:23:05 anyway 18:23:09 there is a limit to that > 18:23:11 ehird: "1 vector containing the least point which contains a non-space cell, relative to the origin (env) " 18:23:22 ehird: I don't see how that can't be understood. 18:23:23 AnMaster: rebuttal? 18:23:37 I mean when the difference is a whopping 0,010 seconds on this system... between exact bounds and non-exact... 18:23:56 ehird: Although that's another of those "don't take it literally" cases. 18:24:03 Which I guess is why it can't be understood. 18:24:03 Deewiant, I believe in the freedom of choice ;P 18:24:16 AnMaster: you said you disagree with Deewiant's interpretation 18:24:18 plz say why 18:24:24 ehird: Since if (0,0) is a space and (1,0) and (0,1) aren't, you have to push (0,0) even though it's a space. 18:24:41 ehird, because it results in a slower implementation ;) 18:24:48 anyway I suspect he is right. 18:24:49 AnMaster: so you were just lying 18:24:50 i see 18:25:03 ehird, actually I did think he was wrong once but he managed to convince me. 18:25:08 Still freedom of choice. 18:25:10 18:22 AnMaster: Deewiant, because I'm not sure I agree with your interpretation of this. 18:25:12 3 minutes ago? 18:25:32 ehird, I'm still not 100% sure. 18:25:51 how come 18:26:17 funge-98 spec is rather unclear and contradicting in many places. 18:26:33 I just don't trust anything non-trivial in it to 100% 18:26:58 it seems pretty clear to me 18:26:59 the parts inherited from befunge-93 can mostly be trusted. Unless it is for IO where you need to be very careful. 18:27:13 brb phone 18:28:57 ais523, about inline asm, there is only one single reason I use it. And only in one single place. 18:29:10 ais523, non-temporal store. You can't do it with plain C. 18:29:18 "non-temporal store"? 18:29:20 otherwise I prefer to hope the compiler gets it right. 18:29:47 ais523, doesn't fetch cache lines first, useful when you are going to overwrite the entire cacheline anyway. 18:29:56 ais523, also write-combining. 18:30:05 same effect basically. 18:30:12 ok, well gcc-bf doesn't have a cache 18:30:12 but without needing to do kernel level stuff. 18:30:26 you could write a considerably more efficient version of memcpy than the one I ship at the moment, though 18:30:30 actually I found out today icc can do it with a #pragma. 18:30:36 by messing with the mark at a low level 18:30:38 but gcc can't 18:31:13 ais523, I would assume gcc-bf wouldn't require any porting. 18:31:18 it would just use the C-fallbacks. 18:31:22 well, yes 18:31:25 but it would be extremely slow 18:31:30 ais523, if you implement POSIX.. 18:31:30 and that's very uncfungelike 18:31:45 AnMaster: I implement bits of it 18:31:54 eventually I'll hope to implement all the more useful bits that make sense 18:32:01 but I'm aiming to just implement C89 first 18:32:03 and go from there 18:32:06 ais523, mmap(), socket()/accept()/listen()/bind()/..., ncurses? 18:32:14 ncurses is easy 18:32:17 just use vt codes 18:32:24 mmap is easy too 18:32:30 socket is impossible for pure bf 18:32:30 ais523, ignoring SIG_PIPE too. 18:32:33 mmap is rather trivial in gcc-bf 18:32:36 sorry, what's gcc-bf? 18:32:42 tombom: gcc backend 18:32:45 outputs brainfuck 18:32:46 by ais523 18:32:50 not finished yet 18:32:59 ah thanks 18:33:11 although it now feels more like a very buggy program than an unfinished program 18:33:30 ais523, ignoring SIG_PIPE is needed for SOCK and for basic output (which must reflect on failed output according to spec) 18:34:03 well, . doesn't fail, obviously 18:34:29 ais523, yes I know it won't work in brainfuck... 18:34:45 http://74abc3.bikeshed.com/ ← it really accepts any colour! 18:35:21 ais523, also last I looked at least 23.5 MB virtual address space was needed to even start cfunge. (ulimit -v), below 16 MB libc.so fails to load even. 18:35:24 But you need JavaScript enabled for the color to happen. :/ 18:35:32 of course you won't need that much in bf 18:35:40 but still it is quite memory heavy. 18:35:43 fizzie: so you do :-( 18:35:53 well, gcc-bf has 26-bit pointers 18:36:12 ais523, err how many MB does that add up to 18:36:20 tl;dc 18:36:22 20 bits is 1 MB 18:36:26 (to lazy, didn't calculate) 18:36:31 so 64 MB total 18:36:53 except you only get 16 MB stack, 16 MB heap + globals combined, 16 MB labels in code segment 18:37:11 ais523, I need more than 16 MB heap + globals I think. 18:37:15 (the actual code can be larger, but you can only have 16 million locations you can branch to/from 18:37:16 ) 18:37:18 well depends on your libc 18:37:21 possibly. 18:37:34 and 16 MB that's addressible, but doesn't correspond to anything and so causes undefined behaviour 18:38:17 ais523, However, memory doesn't grow as quickly. Initial level is high, but then (due to memory pools and several other reasons) it doesn't grow quickly 18:38:29 -!- kar8nga has joined. 18:38:29 pyfunge needs over 40 MB in ulimit -v to start. 18:38:48 mostly due to python loading so many *.so files 18:38:52 Plof will need over 2GB in ulimit -v to start, on a 32-bit system. 18:39:02 ehird, that doesn't make sense., 18:39:04 sense* 18:39:11 AnMaster: mmap overcommitting to make a memory pool 18:39:22 actual memory usage is minima 18:39:23 l 18:39:26 measured in the KBs 18:39:29 ehird, sorry no can do. System will refuse it if it is more than physical ram. 18:39:35 HAHA 18:39:38 AnMaster: You're wrong 18:39:45 ehird, well ram + swap iirc 18:39:46 It mmap's 6GB on my system 18:39:48 Without a qualm 18:39:53 anyway I have seen it refuse it. 18:39:54 It really does work. 18:40:01 for 6 GB on my 1.5 GB system. 18:40:02 You need MAP_NORESERVE 18:40:04 and some other stuff 18:40:07 ah 18:40:09 but it does work 18:40:16 ehird, MAP_NORESERVE would indeed help. 18:40:17 (MAP_NORESERVE isn't documented but works on at least bsds and linux) 18:40:33 ehird, it is documented. 18:40:35 on linux 18:40:39 but it is non-standard. 18:40:44 not documented on bsd 18:40:48 mhm 18:50:39 -!- pikhq has joined. 18:51:13 ehird, just noticed that I can reduce loading time even more by MAP_POPULATE 18:51:28 AnMaster: I wish to stab your eyes out. Please give an appropriate date/time. 18:51:30 it makes mmap() pre-fault the pages, thus making sure they are all loaded. 18:51:46 this reduced number of page faults needed 18:51:57 reducing switches to kernel. 18:52:00 AnMaster: mightn't pre-faulting slow it down if the number of pages you have exceeds a cache/ 18:52:10 because they'd have to be loaded, unloaded, and loaded again 18:52:10 ais523, that isn't the same. 18:52:23 but hm 18:52:26 maybe. 18:52:53 ais523, give me a program larger than 118K 18:53:02 err, in what language/ 18:53:04 and why? 18:53:05 ais523, anyway pre-fault at least loads them to main memory from disk. 18:53:12 ais523, err 128 K 18:53:14 and in befunge 18:53:17 mycology is 118 K 18:53:21 and my L2 is 128 K 18:53:41 AnMaster: Just copy it to itself at the end? 18:53:50 Err, hmm 18:53:53 AnMaster: your L2's so small, the nehalem has more! 18:53:56 That sentence doesn't make much sense but I guess you got it 18:53:57 ↑ new geek joke very funny 18:54:03 laughter inducing even 18:54:07 no, it isn't 18:54:08 the height of witty 18:54:10 ehird, yes. I know. This is an old Sempron. 18:54:16 but it isn't funny. 18:54:27 AnMaster: I hope one day you can upgrade to a pentium 4. 18:54:30 *ice burn* 18:54:47 ehird, I used to have one. It was worse. 18:54:50 and slower 18:54:56 just like yo momma 18:54:58 * ehird on a roll 18:55:16 ehird, I regret I told you about the algorithm now. 18:55:28 I will never ever do that again. 18:55:35 joking is incompatible with befunge 18:56:01 ehird, oh, was it joking. Sounded more like "trying to make enimies" 18:56:13 yo momma jokes cause permanent psychological damage, and war 18:56:45 ehird: Your implementation done yet? 18:57:06 Deewiant: It supports TRDS, MVRS, FNGR and has the ghost of mike riley trapped inside. 18:57:10 Fairly done. 18:57:17 Also kittens 18:57:39 Have you run it through mycotrds, then? 18:57:58 Deewiant: What I'm trying to say is "no" 18:58:06 lifthrasiir: you there? 18:58:07 Yes, I realized that 18:59:53 "The smallest entrant was Quod Libet, but version 2 of that seems to have a UI designed by MC Escher" I like quod libet's ui :( 19:00:52 -!- KingOfKarlsruhe has joined. 19:03:46 Deewiant: The only thing that needs to know "nummer of non-space cells" is y, right? 19:04:15 it doesn't. It only needs to know bounds. 19:04:19 y needs the bounding rectangle of space and nothing more, "nummer of non-space cells" is an impl detail. 19:04:26 exactly. 19:04:32 Er, scratch "nothing more", it needs a lot more, but anyway. 19:04:36 yeah 19:04:56 nummer is like an unabstracted number 19:05:25 ehird, we misread (and mis-copied) it as "number" 19:05:36 no, Deewiant didn't misread 19:05:41 and it meant number 19:05:45 :-P 19:05:54 well misread it so we read it right 19:05:55 :P 19:06:35 "The smallest entrant was Quod Libet, but version 2 of that seems to have a UI designed by MC Escher" I like quod libet's ui :( <-- source of quote 19:06:57 AnMaster: thing about replacing rhythmbox with banshee in ubuntu saves 6MB 19:07:02 despite banshee being more featureful and using Mono 19:07:12 what is "rhythmbox" 19:07:16 media library 19:07:19 player 19:07:19 ah 19:07:19 audio 19:07:20 thing 19:07:23 like itunes 19:07:33 right. 19:07:45 for media library I use the file system ;P 19:07:56 So do I 19:08:43 AnMaster: so does Banshee et al 19:09:03 they just provide a list that has the tags, tag editor, shuffle mode, etc. 19:09:17 you know? less work? letting computers do work? 19:09:43 ~/musik/(composer|performer|whatever is most useful in this case)/(collection|cd|freestanding|whatever is most useful)/files 19:10:22 it's still usually more effort to navigate than a media library though 19:10:31 where files is stuff like 01_Sinfonia_Ciss_Moll_Andante_di_molto.flac 19:10:41 tombom, not really 19:10:57 eh well i usually find it that way 19:11:00 i guess it depends! 19:11:06 tombom: AnMaster doesn't seem to have a perception of needless work 19:11:10 tombom, how is ~/musik/kraus/Synphonies_vol3/01_Sinfonia_Ciss_Moll_Andante_di_molto.flac hard 19:11:19 not hard 19:11:23 tombom, tab complete! 19:11:30 it's just the navigating to it takes time 19:11:32 since I use the shell to start the media player anyway 19:11:32 wait what 19:11:40 yeah then it does take a lot longer 19:12:04 AnMaster: you can't argue about the speed of two things if you deliberately misuse one of them! 19:12:16 tombom: mplayer ~/mu/kra/S3/01 19:12:24 oh well 19:12:27 tombom, 4 seconds. Timed it. 19:12:41 AnMaster: shuffling the library? audioscrobbler? 19:12:43 ehird, where is the misuse... 19:12:48 ehird, why would I want to shuffle 19:12:51 anything other than playing one single goddamn track? 19:13:02 AnMaster: the misuse is that your'e not meant to start banshee from the command line on one track 19:13:06 *you're 19:13:10 and maybe you don't 19:13:11 ehird, I prefer to listen to the symphonies in the right order. 19:13:11 I do 19:13:28 ...and we all know AnMaster's needs are enough for anyone 19:13:29 ehird, and. How long would it take in banshee 19:13:35 therefore, media libraries are bad QED 19:13:44 AnMaster: Go to menu. Tick shuffle. 19:13:52 ehird, what if I don't want shuffle 19:13:57 DonGo to menu 19:14:01 what if I just want to listen to this synphonie 19:14:01 *Don't go to menu. 19:14:03 Do not tick shuffle. 19:14:06 find it in my collection 19:14:07 ehird, ^ 19:14:07 i don't mind people being a bit unusual with their workflow or w/e as long as they don't force it on others 19:14:15 which is unfortunately not uncommon 19:14:16 AnMaster: Click search field. Enter arbitrary substring. Press play. 19:14:23 tombom, I don't force anyone. It is ehird who does. 19:14:24 especially in some os stuff 19:14:34 I don't force anything on you 19:14:45 ehird, you seem to be advocating that it is faster. 19:14:54 I wasn't comparing starting from command line 19:14:54 because it is 19:15:10 ehird, no. You need to move your hand to the mouse 19:15:17 "press play" 19:15:19 you said 19:15:34 AnMaster: Alternatively, press shortcut bound to play. 19:15:44 ok that works. Such as enter I hope 19:15:47 Alternatively, attack the mouse when your opinion is not supported by studies! 19:16:00 ehird, what... 19:16:12 anyway I'm just saying I prefer my way. 19:16:18 it is fast for finding what I want. 19:16:29 since I always know what I'm looking for. 19:16:40 tombom, you wouldn't call this "unusual" right? 19:17:00 i don't know 19:17:08 tombom, mhm. 19:17:14 it doesn't really affect me so i guess i don't really care that much 19:17:29 tombom, would you not want to use it yourself? 19:17:35 no i wouldn't 19:17:38 odd 19:18:11 free text search in friendly GUI is for newbies ;P 19:18:51 idea: All newly written pieces of music must have names that allow keeping your fingers on the home row 19:18:56 ehird, what do you think ^ 19:19:01 It amuses me that your opinion coincides almost exactly with zzo38's; except the fact that zzo38 states it plainly reveals how ridiculous it is 19:19:29 ehird, "states it plainly"? 19:19:39 what is unplain in here 19:20:05 ... 19:20:12 except (the fact that zzo38 states it) (plainly reveals how ridiculous it is) 19:20:32 ah 19:21:07 So why does the fact that zzo38 is saying it makes it inherently ridiculous 19:21:13 ehird, ^ 19:21:33 that's not what I said. 19:21:42 ehird, what did you say thenm 19:21:43 then* 19:22:04 (the way that zzo38 says it) (plainly reveals how ridiculous it is) 19:22:05 ... 19:22:26 ehird, ok, so what do you mean with it then 19:22:32 what I said 19:22:39 ehird, then I repeat: So why does the fact that zzo38 is saying it makes it inherently ridiculous 19:23:04 That's not. what. I. said. 19:23:25 ehird, ok... lets try another way... How does zzo38 state it. 19:23:43 Too lazy; didn't google. 19:24:31 Darn, my parseFungespace stack overflows 19:24:43 ehird, not tail recursive? 19:24:48 it is 19:24:56 then: HUH 19:25:17 ehird, hm stack overflow == crash right? 19:25:22 in haskell 19:25:32 No, stack overflow is-a exception. 19:25:33 as in fatal exit or whatever 19:25:37 *Hypha.Fungespace> mycop `seq` () 19:25:37 *** Exception: stack overflow 19:25:38 ah so it doesn't exit 19:25:40 hm ok 19:25:43 It does in a normal program. 19:25:45 You can catch it. 19:25:46 ehird, isn't the exception a side effect 19:25:52 AnMaster: No. 19:25:54 shouldn't you use an ExceptionMonad! 19:25:56 ;P 19:25:58 It's of type _|_ aka bottom. 19:26:13 ehird, it would be funnier if needed an monad 19:26:26 All types are (Type | _|_) because infinite loop = error = bottom. 19:26:28 or nomad. 19:26:29 AnMaster: No, it wouldn't. 19:26:35 That's about as funny as "ha ha, perl is line noise". 19:26:40 ehird, yes 19:26:42 ! 19:27:51 OK, let's se. parseFungespace's "go" is totally tail recursive. 19:27:57 The only other thign it calls is updateFungespace. 19:28:03 Which calls lookupBoundus and maybeGrowBounds twice. 19:28:10 maybeGrowBounds :: Bounds -> Int -> ColumnOrRow -> Int -> Fungespace -> Fungespace 19:28:10 maybeGrowBounds b i cr v fs = 19:28:12 if v > end b 19:28:14 then fs { bounds = Map.insert (i,cr) b{ end = v } (bounds fs) } 19:28:16 else fs 19:28:18 No stack to overflow there. 19:28:20 lookupBounds :: Int -> ColumnOrRow -> Fungespace -> Bounds 19:28:22 lookupBounds i cr fs = Map.findWithDefault zeroBounds (i,cr) (bounds fs) 19:28:24 Perfectly innocent. 19:28:30 In conclusion, double tee eff mate. 19:30:47 ehird, TTE 19:30:56 what 19:31:00 " In conclusion, double tee eff mate." 19:31:05 double tee = TT 19:31:09 Oh. 19:31:10 EFF = F 19:31:14 TTF 19:31:18 then mate 19:31:24 which must be some porn unicode 19:31:25 The "you" in doubleyou is silent. 19:31:32 If you say it fast enough. 19:31:41 The transition to "tee" sneaks a "you" in. 19:31:47 Just like how "lil" adds the consonants in, somehow. 19:31:56 lilil 19:32:02 err 19:32:04 "lil" meaning 19:32:06 what 19:32:09 Little. 19:32:12 ah 19:32:13 Slang. 19:32:21 ok 19:34:23 *Hypha.Fungespace> parseFungespace "" 19:34:23 Loading package syb ... linking ... done. 19:34:25 Loading package array-0.2.0.0 ... linking ... done. 19:34:27 Loading package containers-0.2.0.1 ... linking ... done. 19:34:29 Fungespace {space = fromList [], bounds = fromList []} 19:34:31 Well, I'm not insane yet 19:34:35 *Hypha.Fungespace> parseFungespace "a" 19:34:35 Fungespace {space = fromList [(Point {x = 0, y = 0},97)], bounds = fromList []} 19:34:39 Yep, good. 19:34:45 *Hypha.Fungespace> parseFungespace "aa" 19:34:45 Fungespace {space = fromList [(Point {x = 0, y = 0},97),(Point {x = 1, y = 0},97)], bounds = fromList [((0,Column),Bounds {start = 0, end = 1})]} 19:34:49 Perfectly cromulent 19:34:56 *Hypha.Fungespace> parseFungespace "aa\na" 19:34:57 Fungespace {space = fromList [(Point {x = 0, y = 0},97),(Point {x = 0, y = 1},97),(Point {x = 1, y = 0},97)], bounds = fromList [((0,Column),Bounds {start = 0, end = 1})]} 19:35:02 So it's an issue iwth large inputs. 19:35:05 Hey... 19:35:08 There should be two bounds there. 19:35:16 Or more. 19:35:17 Hm. 19:36:16 your bounds are messed up 19:36:52 Yes. 19:36:59 ehird, if you used C it would have been easier to figure out how. Sure the result once you figure it out will be more elegant in Haskell, I agree with that. 19:37:05 -!- ajcc has quit ("Lost terminal"). 19:37:15 AnMaster: Thanks for that baseless, incorrect assertion without evidence. 19:37:27 I will switch to C immediately; for it lets me bash code without thinking until it works. 19:37:29 ehird, lament wasn't around, so someone had to do it. 19:37:35 With printf debugging. You know, just like Debug.Trace in Haskell. 19:37:46 ehird, I tend to use gdb though 19:37:57 ghci has a debugger 19:38:00 I just don't use it 19:38:03 ok 19:38:19 ehird, I use debuggers in all languages that have them, rather than printf debugging 19:38:26 C more so, but also for erlang 19:38:35 in C you need it for segfaults and such at least. 19:38:36 In Haskell, understanding your code is given large weight. 19:38:56 I generally find printf debugging faster than using a debugger 19:39:03 ehird, Agreed. You need to understand it when you write it 19:39:11 understanding it the day after isn't very important! 19:39:12 ;P 19:39:26 Well, the only things I've added are lookupBounds and maybeGrowBounds and their two calls each. 19:39:27 Hm. 19:39:39 And it's overflowing on lagre input, as well as giving incorrect results, but they don't recurse. 19:39:49 MY BRAIN IS A FLATTENED PANCAKE OF CONFUSION. 19:39:55 ehird, but C tends to have pretty good tools. Such as nice GUIs for interpreting profiling data and so on. 19:40:20 ehird, can you see what was put on the stack 19:40:23 that made it overflow 19:40:35 Probably with the debugger 19:40:43 I wonder if the Map functions non-tail recurse 19:40:45 ehird, might be helpful. 19:40:49 That would be very naughty of them 19:41:04 ehird, not only naughty, but extremely silly. 19:41:12 Yes. 19:41:19 * ehird asks #haskell 19:42:02 ehird, " ehird: I would guess that they're fairly lazy, so you end up with enormous thunks." wth did that mean 19:42:12 19:41 ehird: Do the Data.Map functions non-tail-recurse? I'm getting stack overflows with a gigantic map. 19:42:13 19:41 MyCatVerbs: ehird: I would guess that they're fairly lazy, so you end up with enormous thunks. 19:42:20 AnMaster: it made sense to me :) 19:42:35 ehird, explain it 19:42:37 kind of 19:42:46 not the details, just what a thunk is 19:42:56 AnMaster: A thunk is a function that evaluates the lazy code. 19:43:02 ah 19:43:04 So (2+2) is a thunk that calculates 2+2 then replaces it with that value 19:43:08 Where 2, 2, and (+) are also thunks 19:43:12 ehird: Data.Map and Data.IntMap are very lazy. list-tries provides strict ops for everything but of course it's only for list keys ;-P 19:43:14 In the 2 case just trivial ones returning, well, 2. 19:43:35 Deewiant, um can't you use a tuple of x and y as the key then 19:43:44 ? 19:43:47 Tuple != List 19:43:52 A list is a linked list 19:44:06 (x:(y:[])) would allow things like [1,2,3] to get past type checking and also be wasteful 19:44:11 I meant 19:44:14 Putting keys of a constant size into a trie isn't exactly useful anyway 19:44:15 ah 19:44:20 Deewiant: ofc 19:44:28 Deewiant: [{x,y},value] 19:44:32 that is erlang syntax 19:44:43 int x = 1; 19:44:46 what, an assoc list? 19:44:47 lol 19:44:52 That is C syntax for declaring an integer and initializing it to 1 19:44:52 err 19:44:54 typo 19:45:00 [{{x,y},value}] 19:45:01 WELCOME TO ERLANG NEXT STOP (3 years pass) VALUE 19:45:02 maybe 19:45:08 AnMaster: that's an alist 19:45:18 ehird, yes, so use a dict or ets table 19:45:19 :P 19:45:27 dict is implemented in terms of list 19:45:28 Deewiant: let x = x 19:45:28 ets is not 19:45:31 That is Haskell synta 19:45:31 x 19:45:39 []{}() 19:45:41 That is C++ syntax 19:45:45 ,[.,] 19:45:49 That is Brainfuck syntax 19:46:00 {;} 19:46:02 That is D syntax 19:46:09 19:46:12 That is Whitespace syntax 19:46:19 >:#,_@ 19:46:23 That is Funge syntax. 19:46:24 that is a smiley 19:46:35 ADD ONE TO COBOL GIVING COBOL 19:46:37 That is Cobol syntax. 19:46:56 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, 19:46:56 + 13H SQUARE UNITS) 19:46:59 That is Fortran syntax. 19:47:11 foo(X, Y). 19:47:14 That is Prolog syntax. 19:47:29 ))))))))))))))))))))))))))))))))))))))))) 19:47:31 public static void main(args[]) { 19:47:31 That is LISP syntax. 19:47:33 That is Java syntax. 19:47:41 That doesn't parse, though. 19:47:52 what 19:47:54 is this meme 19:48:01 Deewiant: Nor does ))))))))))))))))))))))))))))))))))))))))) on its own. 19:48:05 AnMaster: You started it. 19:48:10 no 19:48:11 ehird: That was more of a joke. :-P 19:48:15 19:44 AnMaster: Deewiant: [{x,y},value] 19:48:15 19:44 AnMaster: that is erlang syntax 19:48:16 I went away before you did 19:48:16 #+1&/@{1,2} 19:48:18 Yes you did AnMaster. 19:48:19 oh 19:48:20 That is Mathematica syntax. 19:48:21 right 19:48:24 well I typoed it 19:48:28 [{{x,y},value}] 19:48:28 19:48 AnMaster: I went away before you did 19:48:30 That is AnMaster syntax. 19:48:31 makes more sense 19:48:35 ehird: :-D 19:48:41 anyway 19:48:46 lets not do it that way 19:48:50 lets use dict 19:49:00 ehird, or you could use a list I guess. 19:49:07 and just search through it as needed ;P 19:49:08 Tea, milk, bread 19:49:10 That is list syntax 19:49:22 which makes it O(O_O) I think 19:49:43 re⋅cur⋅sion /rɪˈkɜrʒən/ noun. See recursion. 19:49:48 That is dict syntax. 19:50:08 butts 19:50:11 so. What about intercal one. 19:50:12 That is Slereah syntax. 19:50:21 and 19:50:24 you are all wrong 19:50:37 you should show the equivalent code in the language 19:50:42 DO :1 <- #0¢#256 19:50:45 That is INTERCAL syntax. 19:50:51 Did someone say my name? 19:50:54 Deewiant, Intercal Prinston 19:51:04 spelling. 19:51:14 WangZeDong. 19:51:18 That is faux-Chinese syntax. 19:51:21 Or Korean or whatever. 19:51:40 so 19:51:43 solved the issue yet 19:51:48 -!- WangZeDong has changed nick to Slereah. 19:51:54 Içtaîl 19:51:57 That is Ithkuil syntax. 19:52:10 PRIVMSG #esoteric :That is IRC syntax. 19:52:12 That is IRC syntax. 19:52:18 ehird, anyway why can't haskell detect when it is getting too lazy and busy-collect it 19:52:25 that is evaluate the lazy bits 19:52:34 when it detects it is getting close to the limit 19:52:35 AnMaster: That breaks semantics. 19:52:41 "- that is quine syntax, preceded by its own quotation" - that is quine syntax, preceded by its own quotation 19:52:42 "- that is quine syntax, preceded by its own quotation" - that is quine syntax, preceded by its own quotation 19:52:44 You can't just arbitrary evaluate stuff. 19:52:52 s/ry/rily/ 19:52:52 Deewiant, Does it affect anything as long as it is purely functional. 19:52:55 AnMaster: Yes. 19:52:58 AnMaster: Yes, it does. 19:52:59 Infinite lists, for instance. 19:53:04 HUR I'LL JUST GO EVALUATE THIS 19:53:06 well you could avoid that case, 19:53:09 I guess. 19:53:09 HUM DE DUM THIS SURE IS TAKING A WHILE 19:53:11 No you can't 19:53:13 :-D 19:53:13 Halting problem 19:53:14 can you detect it is infinite? 19:53:16 ah right 19:53:17 :/ 19:53:35 ehird, so how are you going to work around the issue. 19:53:57 Figure out how to do more forcing on the map. 19:54:01 Or use a different structure. 19:54:21 I see. 19:54:43 ehird, Any other language with this specific oddity 19:54:47 I can't think of one. 19:54:49 Any lazy language. 19:54:51 Clean? 19:54:54 ehird, such as 19:54:58 Clean. 19:55:00 Lazy K. Clean. 19:55:02 Deewiant, ah 19:55:05 hm 19:55:14 D, if you mark everything as lazy. 19:55:17 ehird, iirc I heard about "eager haskell" 19:55:50 Lazy Bird is the best. 19:55:55 ehird, no idea what it was 19:56:04 Deewiant, D has lazyness 19:56:04 ? 19:56:09 No. It has laziness 19:56:27 ehird, meh, you know it was a simple typo 19:56:45 ehird, but... does it have... 19:56:48 lazerness! 19:57:06 hm I don't feel myself today. 19:57:09 feel like* 19:59:11 _=-_-- looks a bit lazery I guess 19:59:32 (And can compile) 19:59:48 _ = -(_--) 19:59:57 So it decrements _, then takes the negative and assigns it to _ 20:00:06 _ = 3 --> _ = -2 20:00:21 ehird: No sequence point, so undefined like in C, I think. 20:01:19 Right 20:01:48 Shouldn't you be programming your fancy impl to rule them all? 20:03:22 Decided I wasn't evil enough to do that to everyone 20:03:52 Gave up because Data.Map overflowed your stack? :-P 20:04:25 Deewiant: Wait, you mean befunge? 20:04:34 I am meditating on a solution to the data.map issue. 20:04:47 including "increase the stack size" 20:04:56 :-D 20:05:37 Are you using insert'? 20:05:45 ehird, that would be the Mike Riley solution 20:05:49 increasing stack size 20:05:54 Deewiant: findWithDefault and insert 20:06:02 ehird: Use insert'. 20:06:06 What does that do. 20:06:10 Strict. 20:06:15 I love you. 20:06:24 Hypha/Fungespace.hs:57:25: Not in scope: `Map.insert'' 20:06:27 Deewiant: Why must you lie. 20:06:27 ehird, on initial insert you can know it won't be overwrite any existing cell btw. 20:06:31 afk 20:06:34 Crock. 20:06:39 Deewiant: Wa 20:06:39 t 20:06:47 'Twas an exclamation. 20:06:54 ehird: Correction: use insertWith' const. 20:07:11 fuckingStrictInsert = Map.insertWith' const 20:08:21 Deewiant: Awesome, having that as a top level definition makes it monomorphic by default 20:08:31 ehird: Monomorphism restriction. 20:08:36 I know. 20:08:40 It's so awesome that it sucks cocks. 20:08:48 That's just how awesome and empowered in its sexuality it is. 20:08:50 Be -Wall clean and it'll rarely bite you. 20:09:03 Hypha/Fungespace.hs:64:26: 20:09:03 Warning: This binding for `x' shadows the existing binding 20:09:05 defined at Hypha/Fungespace.hs:19:8 20:09:07 In the definition of `updateFungespace' 20:09:09 Hypha/Fungespace.hs:64:28: 20:09:11 Warning: This binding for `y' shadows the existing binding 20:09:13 defined at Hypha/Fungespace.hs:20:8 20:09:15 In the definition of `updateFungespace' 20:09:17 Repeat ad infinitum. 20:09:19 I should probably rename the accessors. 20:09:43 Ok, modules loaded: Hypha.Fungespace. 20:09:43 *Hypha.Fungespace> 20:10:18 *Hypha.Fungespace> mycop `seq` () 20:10:18 *** Exception: stack overflow 20:10:20 Deewiant: olol 20:10:56 Could be your fault, then, and not Map's. :-P 20:11:06 Feel free to debug my code :) 20:11:13 Looks fine tho. 20:11:29 You're probably too lazy 20:11:38 I have no argument. 20:11:43 space :: Map Point Int, 20:11:43 bounds :: Map (Int,ColumnOrRow) Bounds 20:11:50 Deewiant: Maybe being exclamatory there would help? 20:12:07 Doubtful but go ahead. 20:12:24 Hypha/Fungespace.hs:32:4: 20:12:24 Unexpected strictness annotation: !Map 20:12:26 In the definition of data constructor `Fungespace' 20:12:28 In the data type declaration for `Fungespace' 20:12:30 Failed, modules loaded: none. 20:12:35 I guess you can't be strict with "data"s 20:12:46 Silly, you can't strictify a type constructor. 20:12:50 !(Map Point Int) 20:12:57 heh 20:13:14 *Hypha.Fungespace> mycop `seq` () *** Exception: stack overflow 20:13:24 Toldya it was doubtful. 20:14:07 -!- BeholdMyGlory has joined. 20:16:05 ehird, " In the definition of `updateFungespace'" <-- camelcase!? 20:16:07 wth 20:16:16 That is Haskell's convention. 20:16:27 -!- WangZeDong has joined. 20:16:28 ehird, I always thought you were an underscore person 20:16:49 he's an underscore person undercover 20:17:06 lament, hey! You go troll haskell for a bit ok? 20:17:09 In Haskell, camelCase. In Lisp/Factor, hyphen-ated. In Python/Ruby/whathaveyou, under_score. In C, unixstyle. 20:17:16 AnMaster: huh 20:17:32 lament, ehird is coding a befunge interpreter in haskell. 20:17:34 Time to do your job. 20:17:35 ;P 20:17:38 hyphen-ated FTW, too bad so few languages can do it 20:17:44 Deewiant, agreed 20:17:46 and ? too 20:17:47 like 20:17:53 messes-with - in-fix, un-fortunately. 20:17:55 (int? variable) 20:18:08 I mean that is awesome. 20:18:17 Ruby does that 20:18:19 ehird: Just force - to be surrounded by whitespace, shrug. 20:18:20 comes from lis 20:18:20 p 20:18:27 Deewiant: Still hard to read. Dylan did it tho 20:26:47 -!- Slereah has quit (Read error: 110 (Connection timed out)). 20:26:59 ehird, what about ! then 20:26:59 like: 20:27:05 (set! foo bar) 20:27:15 Ruby does that too. 20:27:27 mhm 20:27:38 ehird, but not the - thing... 20:27:42 meh 20:27:46 not worth it then! 20:28:01 ehird, does ruby use tail recursion for loops 20:28:09 or does it have while/for or similar 20:28:21 Ruby is an OO scripting language. 20:28:36 What do you expect? 20:28:36 yes 20:28:47 Deewiant You can have functional OO 20:28:50 AnMaster: Neither 20:28:55 ehird, oh 20:28:57 It uses object methods + blocks 20:28:57 what then 20:29:01 um 20:29:02 array.each {|x| puts x} 20:29:04 for loops 20:29:05 ah 20:29:07 array.map {|x| x+2} 20:29:10 You can do a loop, mostly while 20:29:12 ehird, so how do you do a mainloop 20:29:12 for x in y 20:29:13 just does 20:29:15 x.each {|y| ..>} 20:29:17 *... 20:29:21 AnMaster: If it were functional I'd've said that it's functional. 20:29:21 But mostly you should either 20:29:24 1. use while 20:29:27 2. use a method 20:29:30 ehird, ah 20:30:06 Hm Do anyone think there will be a R7RS or not. 20:30:09 at some point. 20:30:45 http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/6f354002fb7f128e/0f4b2fe269bc5cae 20:31:17 AnMaster: No. Scheme will never ever ever be updated again. 20:31:18 Ever. 20:31:24 heh 20:31:27 Deewiant, funny 20:31:32 ehird, that would be sad 20:31:39 AnMaster: It's true, actually. 20:31:45 R6RS is not very much of a Scheme. 20:31:52 So the latest Scheme standard is R5RS. 20:32:01 A followup to which is not planned. 20:32:12 ehird, so you need to base r7rs on r5rs + the good bits of r6rs 20:32:21 Good bits? 20:32:23 Which ones? 20:32:28 ehird, surely it can't be *all* bad 20:32:35 The bits that aren't bad are in R5RS. 20:32:45 is it really that bad 20:34:21 Yes. 20:34:30 Why? 20:34:48 Deewiant, good question 20:35:07 Deewiant: It takes all the orthogonal, minimalist, pure goodness of R5RS and piles a bunch of not-that-well-thought-out practical libraries on top, into the core language. 20:35:09 I suspect ehird is exaggerating. 20:35:10 A _lot_ of them. 20:35:21 http://www.r6rs.org/ratification/results.html 20:35:33 The negative ones -- including just about every scheme implementer who voted -- 20:35:44 are by far the majority of the ones with arguments. 20:35:50 And they are good ones. 20:35:56 It didn' teven pass by a large amount 20:36:02 "67 electors voted to ratify draft 5.97 as R6RS. 35 electors were opposed to ratification. Thus 65.7% of those who voted, voted in favor of ratification. This is more than the 60% required for ratification." 20:36:03 That is a new margin 20:36:10 In previous votes the requirement was a lot higher 20:36:19 60% of the entire set of people who COULD vote, I believe 20:37:12 ehird, so why did so many abstain 20:37:21 Apathy? 20:37:22 clearly it is on them we should blame it. 20:37:24 Loss of faith in the process? 20:37:29 R6RS is a joke. 20:37:41 http://scheme-punks.org/wiki/index.php?title=Main_Page FTW. 20:37:48 ehird, what technical aspects make you think so 20:38:03 AnMaster: I have already mentioned, and also pointed to a list of very good arguments. 20:38:19 20:35 ehird: Deewiant: It takes all the orthogonal, minimalist, pure goodness of R5RS and piles a bunch of not-that-well-thought-out practical libraries on top, into the core language. 20:38:20 20:35 ehird: A _lot_ of them. 20:38:22 20:35 ehird: http://www.r6rs.org/ratification/results.html 20:38:24 20:35 ehird: The negative ones -- including just about every scheme implementer who voted -- 20:38:26 20:35 ehird: are by far the majority of the ones with arguments. 20:38:28 20:35 ehird: And they are good ones. 20:38:30 In case you didn't see 20:38:54 why are the yes votes at top 20:38:59 in the comments 20:39:21 So it looks like the overwhelming majority support it from a cursory glance? 20:39:27 maybe 20:39:35 As opposed to not an all that large margin, and with very little arguments compared to the "no" side's many 20:40:20 ehird, having a good standard library would be good though 20:40:31 AnMaster: That's good -- it has one. 20:40:37 http://srfi.schemers.org/ 20:40:54 ehird, I needed a random number in one r5rs program and couldn't find any prng! 20:41:01 that is the stuff I'm talking about 20:41:05 http://srfi.schemers.org/final-srfis.html About 98 of them (a bit less since some are worse versions of later ones, and some are R6RS only) 20:41:14 AnMaster: I propose you are blind or an idiot: 20:41:15 SRFI 27: Sources of Random Bits 20:41:16 Draft: 2002/02/12-2002/04/12 20:41:18 Final: 2002/06/03 20:41:26 http://srfi.schemers.org/srfi-27/srfi-27.html 20:41:38 ehird, yes sure, but does any r5rs implementation support it. 20:41:47 and then I mean "all" 20:41:51 portability 20:41:51 http://srfi.schemers.org/srfi-implementers.html 20:42:01 AnMaster: Point of scheme 20:42:03 Your head 20:42:05 Whoooooooooooooooooooooooooosh 20:42:24 ehird, chicken doesn't support 27 20:42:48 nor does guile, and many others 20:43:07 that's their problem; a flaw in their implementation. Also guile is not R5RS. 20:43:24 cfunge doesn't support TRDS either 20:43:24 Guile omits an important aspect or two of R5RS; calling it a Scheme is dishonest 20:43:34 Calling it a Funge is dishonest 20:43:37 Deewiant, true. But random() is a bit more common 20:43:41 -!- sebbu has joined. 20:43:46 Deewiant: No. 20:43:52 Guile omits aspects of THE ACTUAL SCHEME STANDARD 20:43:53 Deewiant, you are arguing against ehird here 20:43:56 It is NOT r5rs-compliant. 20:43:59 I time travel more than do randomness 20:44:11 AnMaster: I'm not arguing, I'm kidding. 20:44:28 r5rs is not the actual scheme standard 20:44:28 I'm not saying a implementation missing it is not a scheme 20:44:40 No, a chicken with a pulley in the middle is 20:44:50 -!- sebbu2 has quit (Read error: 60 (Operation timed out)). 20:45:17 ehird: actual means current. 20:45:24 Deewiant, but what I'm saying is that a language lacking such is fine as an esolang, but impractical otherwise. 20:45:31 lament: the scheme community at large disagrees with you. 20:46:02 ehird: the scheme community is silly, but you're more silly. 20:46:18 Yay ad hominem 20:46:23 More of lament's wonderful discussion 20:46:30 this isn't ad hominem 20:46:37 More of ehird's lament 20:46:39 zing! 20:46:40 Argument by you're silly. 20:46:42 -!- WangZeDong has changed nick to Slereah. 20:46:43 no 20:46:46 tempo 300 and some 1/32 notes... Insane... 20:46:48 i'm not arguing anything 20:46:52 i'm just saying you're silly 20:46:59 that's not ad hominem, that's just an insult 20:47:11 or rather a statement of fact 20:55:22 -!- Hiato has quit (Read error: 54 (Connection reset by peer)). 21:02:30 lament, indeed. 21:06:15 -!- KingOfKarlsruhe has quit (Remote closed the connection). 21:06:20 -!- jix has joined. 21:08:27 -!- bsmntbombdood has quit (Read error: 110 (Connection timed out)). 21:16:55 -!- tombom_ has joined. 21:24:37 -!- BeholdMyGlory has quit (Remote closed the connection). 21:26:59 -!- KingOfKarlsruhe has joined. 21:31:54 -!- kar8nga has quit (Read error: 110 (Connection timed out)). 21:33:04 -!- tombom_ has quit ("Peace and Protection 4.22.2"). 21:33:55 -!- tombom has quit (Read error: 110 (Connection timed out)). 21:38:52 -!- bsmntbombdood_ has joined. 21:42:12 * kerlo performs calculations 21:43:33 1+1 21:44:04 That was a temporally precise statement. 21:44:17 Its object was also precise. 21:45:14 Slereah, but can you do: 2+1 21:46:20 2 = s(1) 21:46:31 x = y -> f(x) = f(y) 21:46:46 2 + 1 = s(1) + 1 21:46:47 meh 21:46:58 a + s(b) = s(a+b) 21:47:02 a + b = b + a 21:47:16 a = b and b = c -> a = c 21:47:26 2 + 1 = s(1+1) 21:48:03 Slereah, and then? 21:48:14 Well, you know 1+1 apparently 21:48:29 1+1 is 2 21:48:31 And the s of any known number is also known 21:48:43 successor indeed 21:48:47 Slereah, so the answer is... 21:48:48 3? 21:48:51 Subtract 2 from 0, store result in N, branch to next statement if negative. Subtract N from 1, store result in ANS, branch to next statement if negative. 21:48:52 huh 21:48:54 The answer is ANS. 21:48:57 I always thought it was 4 21:49:34 Slereah, what about 6*7 then 21:49:52 Ow, that one's difficult. 21:50:05 AnMaster : I did a program to do that automatically, remember? 21:50:13 It was my first program here 21:50:13 Can I have different representations of 6 and 7? 21:50:14 Slereah, no I don't remember 21:50:15 6 7 * p 21:50:36 http://membres.lycos.fr/bewulf/Russell/Mult2.py 21:50:39 Run that one 21:50:39 kerlo, as in another base? 21:50:44 Enter 6 * 7 21:51:03 Slereah, timeout 21:51:07 on the url 21:51:13 actually 21:51:15 AnMaster: well, it'd be nice if you could separate one of the numbers into individual bits. 21:51:15 dns failure 21:51:54 Fine 21:52:09 I guess binary will do that. 21:52:13 kerlo, what about doing what Slereah did... Take any numbers in the form x * y 21:52:26 Here it is : http://pastebin.com/m550eb7f6 21:52:34 I don't know if I can do that. 21:53:08 kerlo, if the language is TC you can! 21:53:24 Languages, schmanguages. I'm not TC. 21:53:32 kerlo, ok just do 6 * 7 then. 21:53:32 Your face is TC 21:53:39 42. 21:53:40 -!- olsner has joined. 21:53:45 kerlo, hah :P 21:53:56 kerlo, simple: 21:54:42 substract life from 0, store result in N, branch to next statement if negative. 21:54:58 substract N from universe, store result in N2, branch to next statement if negative. 21:55:15 substract N2 from everything, store result in ANS, branch to next statement if negative. 21:55:22 the answer is in ANS :P 21:55:31 s/N from universe/universe from N/? 21:55:46 kerlo, oh right. 21:56:22 Don't touch the universe, kerlo 21:57:33 I can't help it! 21:58:24 Oh yes, touch my universe. 21:58:51 I can't help that, either. I'm constantly in contact with everyone's universe. 21:59:29 Slut 22:27:23 -!- bsmntbombdood_ has quit (Read error: 110 (Connection timed out)). 22:28:06 -!- bsmntbombdood_ has joined. 22:32:36 -!- jix has quit ("omg strobe!!!1111111"). 22:41:04 A 22:42:47 AKA 22:43:00 z 22:43:01 ABRAKA 22:45:58 -!- KingOfKarlsruhe has quit (Remote closed the connection). 22:57:45 -!- bsmntbombdood_ has quit (Read error: 113 (No route to host)). 22:58:56 -!- bsmntbombdood has joined. 23:05:19 -!- ais523 has quit (Remote closed the connection). 23:35:17 * ehird names Pandemic II virus Confickre 23:35:19 *Conficker 23:35:32 -!- FireFly has quit ("Later"). 23:46:04 ehird, wut 23:46:34 Pandemic II; it's a flash game where you control a disease and buy things like transmission via rodents, resistance, symptoms etc, and you have to kill the whole human population. 23:46:46 Also they shut down their air/ship ports etc, especially Madagascar. 23:46:48 odd idea. 23:46:52 AnMaster: It's fun. 23:46:56 why especially Madagascar 23:47:01 SIR, A MAN IS SNEEZING IN BRAZIL! 23:47:19 AnMaster: Madagascar just has one port, a ship one, and it shuts down if someone coughs anywhere in the world, pretty much 23:47:27 Nah, not really 23:47:31 ehird, strange 23:47:42 ehird, so hard to spread to it I guess. 23:47:46 Yes. 23:47:50 mhm 23:47:55 Not really. 23:47:55 Let's just hope swine flu hasn't played it. 23:48:01 It's a pretty easy game 23:50:53 * ehird restarts until he starts in madagascar 23:51:31 -!- nooga has joined. 23:51:41 marblecake also the game 23:51:51 thank you, welcome to weeks ago 23:53:29 ehird : Nah, something new came up 23:53:34 moot actually won 23:53:37 thank you, welcome to geeks row 23:53:38 Old. 23:53:40 The Times didn't just throw the votes away 23:53:40 Welcome to days ago. 23:53:45 *Time 23:53:46 *yesterday 23:53:48 It's Time. 23:53:49 Not the times. 23:55:42 I just discovered something. 23:55:49 Possibly important. 23:56:04 this can't be, tell us 23:56:11 Luckily this IRC line is large enough to fit it: Don't blow your nose with tight fitting headphones. 23:56:11 DISEASE ARRIVES IN MADAGASCAR DISEASE ARRIVES IN MADAGASCAR 23:56:12 Er 23:56:23 AnMaster: hahah 23:56:40 ehird, my ears feel poped inwards :( 23:56:53 ehird: Yay! 23:56:56 ehird: Damn that Madagascar! 23:56:57 AnMaster: Hold your nose and breathe out 23:57:04 GregorR: Exactly. 23:57:13 ehird, no, moving the ears is more effective. 23:57:14 AnMaster: Hold your mouth and say the Lord's Prayer. 23:57:19 (GET IT? GET IT?) 23:57:20 Turn into a donkey 23:57:34 ehird, can't you move your ears vertically? 23:57:40 Nnnnnoo... 23:57:51 ehird, some people can. Google. 23:57:54 * ehird waits until he gets 60 evolution point 23:57:54 s 23:57:59 Don't your ears hang low? 23:58:07 GregorR, what 23:58:21 I'm talking about maybe 1/4-1/2 cm 23:58:23 Don't they wobble to and fro? 23:58:32 Can't you tie them in a knot? Can't you tie them in a bow? 23:58:45 GregorR, don't your eyebrows wobble to and fro? 23:59:21 * ehird waits for all of madagascar to get infected, then buys waterborne 23:59:33 Repeating English nursery rhymes amongst Europeans is pretty much pointless :P