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