←2009-03-04 2009-03-05 2009-03-06→ ↑2009 ↑all
00:01:20 <comexk> ugh
00:01:31 <comexk> copy + pasting glibc's strchr and remnoving checks leads to lower performance
00:01:55 <ehird> comexk: add more compiler switches
00:02:07 <ehird> -O3 -fomit-crucial-operations -fnuclear-weapons-on-invalid-memory-access
00:02:18 <ehird> -funsafe-addition
00:02:22 <comexk> I was about to copy that then I read the rest
00:02:32 <ehird> ?
00:02:35 <ehird> oh
00:02:36 <ehird> lol
00:03:46 <comexk> inlining significantly reduces time
00:03:49 <comexk> that's nice
00:04:08 <ehird> comexk: how fast is it?
00:04:46 <ais523> funroll-loops may save you time on that sort of code, you could profile to find out
00:06:58 <ehird> comexk: show us the generated asm
00:06:59 <ehird> (-S)
00:07:28 <ehird> also
00:07:31 <ehird> comexk: % 59
00:07:33 <ehird> slooow
00:07:39 <comexk> ehird: it's multiplicified
00:07:43 <ehird> ah
00:07:51 <ehird> anyway, generated asmmy!
00:07:55 <comexk> funroll helps, ftracer doesn't
00:08:05 <comexk> 208ms including java overhead and copy time for a 6mb string
00:08:08 <ehird> comexk: you are using -O3 right
00:08:15 <ehird> also, that's insanely fast
00:08:27 <ehird> asm asm asm :P
00:09:11 <ehird> also won't that crash on invalid inputs
00:09:13 <comexk> sec
00:09:18 <ehird> well I guess not since %59
00:09:43 <comexk> ehird: only if the output length is not divisible by 4, maybe, and I can fix that
00:09:53 <ehird> comexk: ASMMMMMM
00:09:54 <comexk> sec
00:10:26 <comexk> sorry, disassembledhttp://pastie.org/407791
00:10:34 <comexk> I don't know x86 :<
00:10:44 <comexk> for the same code except using custom strchr
00:10:54 <ehird> ais523: err, that's a bit long isn't it?
00:10:59 <ehird> inefficient looking, at least
00:11:03 <ehird> lots of movs
00:11:08 <comexk> you mean comex:?
00:11:11 <ehird> i guess its the unrolling & inlining
00:11:14 <ehird> comexk: no, you don;'t know asm
00:11:14 <ehird> :P
00:11:24 <ehird> 00000d16nopw%cs:0x00000000(%eax,%eax)
00:11:28 <ehird> i wish that meant 'wide nop'
00:11:55 <comexk> what does it mean?
00:12:15 <ais523> heh, it seemed to have changed the modulo into a multiplication by 0x22b63cbf
00:12:15 <ehird> fucked if I know
00:12:17 <ais523> magic numbers ftw
00:12:26 <ehird> hmm
00:12:31 <ehird> is 0x22b63cbf a power of two?
00:12:35 <ais523> no
00:12:36 <ehird> if it is... yo bitshift?
00:12:39 <ehird> ais523: aw
00:12:40 <ais523> powers of 2 are very simple in hex
00:12:45 <ehird> oh, of course
00:12:45 <ehird> hmm
00:12:54 <ehird> you WOULD get better performance from a bitshift, right?
00:13:00 <ehird> its just a matter of finding out which...
00:13:04 <comexk> bitshift won't work by definition because you will get just some of the characters
00:13:21 <comexk> 0x12345678 << 8 will discard 12
00:13:31 <ais523> 0x22b63cbf * 59 is 0x800000005, by the way
00:13:35 <comexk> with % 59 you get unique results from all 27 possibilities
00:13:42 <ehird> comexk: left bitshift is multiplying by 2**n
00:13:42 <ais523> so I strongly suspect that there are gcc shenanigans involved in there somewhere
00:13:43 <comexk> though I don't know if there are better values
00:13:50 <comexk> ehird: yeah, and you will discard 12
00:14:01 <comexk> the first byte I mean
00:14:05 <ehird> comexk: so find another constant
00:14:20 <comexk> I mean, 0x12345678 is my four bytes
00:14:42 <comexk> shifting it by any amount will discard the first bits, and is very unlikely to give me a unique 'hash'
00:14:50 <ais523> the thing that worries me most are those jumps in the middle of the loop
00:15:05 <ais523> jumps can take something like 60 or 70 cycles nowadays if the branch prediction screws up
00:15:11 <ais523> as the processor has to flush the entire pipeline and try again
00:15:20 <ehird> ais523: strchr, probably
00:15:23 <ais523> they only take about 2 cycles if the branch prediction is correct, though
00:15:29 <ehird> the silly thing is that he accesses the 4 characters one at a time
00:15:33 <ehird> then does it AGAIN in one block later
00:15:34 <ehird> that's just stupid
00:15:42 <ehird> he should inline the strchr, going 4 at a time, and save the access of the first block
00:15:43 <ehird> for the next part
00:15:54 <ais523> I'd suggest using an algorithm such as first char * 16 plus second char * 8 plus third char * 4 plus fourth char * 2
00:16:02 <ais523> which can be implemented in 8 addition instructions, so 8 cycles
00:16:33 <ehird> comexk: do what I said for strchr :|
00:17:00 <comexk> will that work?
00:17:01 <comexk> c1: error: invalid option ‘cpu=core2’
00:17:01 <comexk> cc1: error: unrecognized command line option "-fearly-inlining"
00:17:06 <comexk> and why the fuck did I suddenly get that
00:17:16 <ehird> comexk: what I said?
00:17:18 <ehird> why wouldn't it work
00:18:27 <comexk> __builtin_expect helps
00:18:33 <comexk> ehird: what are you expecting me to return from strchr
00:18:35 <comexk> (which I do have inline)
00:18:54 <ehird> well, two values, and since you're inlining it, just put it in the function tiself
00:18:56 <ehird> basically
00:19:41 <ehird> read 4 chars at a time using the int * trick, (to see how to use that to do strchr see the glibc explanation & link in http://www.stdlib.net/~colmmacc/2009/03/01/optimising-strlen/) and save the first block after reading it (since that's what you'll be processing anyway)
00:19:46 <comexk> stop pasting that
00:19:46 <comexk> :p
00:19:50 <ehird> i didn't
00:19:52 <ehird> i explained it
00:20:04 <comexk> ehird: but I'm going one character at a time and wait fuck I'm dumb
00:20:14 <ehird> i agree!
00:20:15 <ehird> :P
00:20:18 <comexk> I know the space will be here or later
00:20:56 <ehird> O RLY
00:21:06 <comexk> why is -mtune=core2 not working
00:21:08 <comexk> it should
00:21:12 <comexk> I blame apple
00:21:17 <ehird> comexk: you can do it as multiple &s, I think
00:21:18 <ehird> read the first block
00:21:30 <ehird> then & 000space0
00:21:32 <ehird> 0space000
00:21:33 <ehird> and so on
00:21:52 <ehird> wait
00:21:56 <ehird> comexk: what's the shortest morse code?
00:22:09 <ehird> i have an idea
00:22:12 <ehird> ah, 1
00:22:31 <comexk> sec
00:22:32 <ehird> comexk: so, the space is either in [1], [2], [3] or [4]
00:22:41 <ehird> now, you've already just said 0-3
00:22:43 <ehird> *read
00:22:55 <ehird> so you just have to do 3 bitwise ands
00:23:00 <ehird> to know if you have a space and where it is
00:23:05 <ehird> ais523: confirm?
00:23:31 <ais523> I'm not entirely sure exactly what you're planning
00:23:37 <ais523> but the general details sound plausible
00:23:49 <ehird> ais523: instead of doing the strchr then reading from the int* cast
00:23:53 <ehird> read from the int* cast, because
00:23:57 <ehird> the max is 4 chars
00:23:59 <ais523> oh, yes
00:24:01 <ehird> so you don't even have to read more than the machine word
00:24:04 <ehird> ais523: and, it can't be the first char
00:24:07 <ehird> since the minimum is 1
00:24:08 <ehird> SO
00:24:10 <ais523> that's pretty much what I was expecting you'd do
00:24:10 <ehird> you just do some &s
00:24:15 <ehird> with 0s and a space inbetween
00:24:18 <ehird> specifically, 3 of them
00:24:21 <ehird> to account for all the possibilities
00:24:23 <comexk> ah, MUCH faster
00:24:30 <ehird> comexk: did you use what I described?
00:24:36 <ehird> and it worked? woo I'm not an idiot
00:24:39 <comexk> only problem being that it doesn't work
00:24:42 <ehird> lol
00:24:44 <comexk> no, I was implementing while you were talking
00:24:47 <ehird> pastie the C?
00:24:56 <ehird> ais523: so, would mine work well?
00:24:57 <ehird> i think so
00:25:18 <ais523> I'm not sure of the details, but I'm pretty sure something like that could work
00:25:55 <ehird> ais523:
00:26:03 <comexk> ah, the input which contains .-.-.- is fucking it up otherwise it's working
00:26:05 <ehird> 0x00320000, 0x00003200, 0x00000032
00:26:08 <comexk> what is .-.-.- anyway
00:26:14 <ehird> read the first block from the int*
00:26:19 <ehird> then & by those in order
00:26:22 <ehird> see?
00:26:24 <ais523> comexk: it's an abbreviation code
00:26:28 <ehird> if you get your input back
00:26:30 <ais523> given that it's at least 6 bytes, it's not a single letter
00:26:32 <ehird> i.e. 0x00320000 or w/e
00:26:32 <comexk> whatever, fuck that
00:26:34 <ehird> then the spacei s there
00:26:36 <ehird> get it ais523?
00:26:53 <ais523> ah, ok, but I don't like the "if you get your input back"
00:26:57 <ehird> comexk: that means you replace the strchr with *3* pairs of bitwise-and and equality checks
00:26:58 <ais523> that has "if" in
00:27:04 <ehird> ais523: it beats strchr
00:27:10 <ais523> my preferred method would be to use arithmetic to set all of the word past the 0 to some known value
00:27:11 <ehird> which goes through every character individually
00:27:13 <ehird> and checks it
00:27:20 <ais523> that gives you 26 different values, which you then make a perfect hash out of
00:27:27 <ais523> and importantly, there's no branching involved at all
00:27:33 <ehird> huh?
00:27:47 <ehird> anyway comexk implemnt my algorithm it'd work.
00:28:04 <ais523> comexk: apparently .-.-.- is full stop
00:28:06 <ais523> which is not a letter
00:28:08 <ehird> wait
00:28:08 <ehird> ais
00:28:09 <ehird> ais523:
00:28:14 <ehird> you can do it with ONE AND
00:28:20 <ais523> which one are you planning?
00:28:26 <ehird> ais523: 0x00323232
00:28:27 <ais523> and does your method involve branching?
00:28:31 <ehird> yes, but only one brancha
00:28:32 <ehird> and
00:28:34 <ehird> strchr branches anyway
00:28:36 <ehird> so this is a huge improvement
00:28:40 <ais523> well, yes
00:28:51 <ais523> I'm not trying to get something better, though, but trying to figure out what the best is
00:28:51 <comexk> wtf
00:29:02 <ais523> comexk: are you sure your input only contains letters?
00:29:03 <comexk> why is this optimization working, it's not supposed to work
00:29:05 <comexk> ais523: in theory
00:29:08 <comexk> if(a & 0x20202020) {
00:29:12 <ais523> better use long longs rather than ints, if there's .-.-.- in your input
00:29:26 <ehird> long long? how efficient
00:29:31 <ehird> comexk: are you even listening to me
00:29:32 <ehird> sigh
00:29:34 <ehird> why do I try and help you
00:29:52 <ais523> ehird: long long beats branching easily, on a modern x86-compatible processor
00:29:55 <comexk> except ., -, and / all and with 0x20202020
00:30:02 <comexk> ehird: explain to me what I should do, clearly
00:30:08 <ehird> ffffffffff
00:30:09 <ehird> I did
00:30:12 <ehird> It's not my fault you can't read
00:30:24 <ais523> because add qword ptr's in the instruction set, and I strongly suspect it takes either 2 or 3 cycles
00:30:28 <ehird> ais523: care to explain my idea to him?
00:30:32 <ehird> since I evidently can't
00:30:53 <ais523> well, I still think your idea's suboptimal, despite being better than what's been mentioned so far
00:31:03 <comexk> WTF
00:31:05 <ais523> besides, morse groups terminate with / not NUL
00:31:07 <comexk> how come removing a check that always passes
00:31:08 <ehird> yes, well, while you're thinking of the optimal solution can you be my english->comex translator?
00:31:10 <comexk> slows it down
00:31:14 <ehird> also, NUL has nothing to do with it
00:31:14 <ehird> kthx
00:31:20 <ehird> mine doesn't do anything with NUL
00:31:21 <ais523> ehird: no, because I ought to be going home
00:31:30 <ais523> ehird: I thought you were using masking to detect where the end-of-string was?
00:31:34 <ehird> ...
00:31:35 <ehird> no
00:31:37 <ehird> i was replacing his
00:31:39 <ehird> strchr(s, ' ')
00:31:40 <ais523> oh
00:31:43 <ehird> with an efficient method to check for the space
00:31:50 <ehird> that also saved time just after
00:31:55 <ehird> comexk: pastie your C
00:31:59 <ehird> and I'll put my optimization in
00:32:01 <ais523> well, your efficient method finds the space, but does it return it in a usable format?
00:32:13 <ehird> ais523: y oudon't need the space, you just need to know where the space is
00:32:21 <ais523> ehird: agreed
00:32:25 <ais523> but your method returns a string with the space in
00:32:29 <ais523> rather than the position of the space
00:32:59 <ehird> irb(main):012:0> "%08x" % (0x11321111 & 0x00323232)
00:32:59 <ehird> => "00321010"
00:33:09 <ehird> -> space is at [1]
00:33:15 <ais523> ehird: fail
00:33:22 <ais523> space 0x20 = decimal 32
00:33:27 <ehird> *forehead*
00:33:30 <ais523> no wonder I couldn't understand what you were doing
00:33:36 <ehird> irb(main):013:0> "%08x" % (0x11201111 & 0x00202020)
00:33:36 <ehird> => "00200000"
00:33:39 <ehird> space is at [1]
00:33:43 <ais523> yep
00:33:46 <ais523> agreed
00:33:49 <ais523> that's what I thought you were doing
00:33:59 <ais523> but the problem is, how do you convert the string "00200000" into a usable form
00:34:00 <ais523> for the masking?
00:34:03 <comexk> if(!(a & 0x03000000)) s2 = s;
00:34:03 <comexk> else if(!(a & 0x030000)) s2 = s + 1;
00:34:03 <comexk> else if(!(a & 0x0300)) s2 = s + 2;
00:34:03 <comexk> else if(!(a & 0x3)) s2 = s + 3;
00:34:04 <comexk> else s2 = s + 4;
00:34:06 <comexk> that slows it down a lot :(
00:34:08 <comexk> and I don't know why
00:34:11 <comexk> over memory accesses
00:34:12 <ehird> comexk: you do ONE &
00:34:14 <ehird> not 4
00:34:15 <ais523> comexk: it would do, you have ifs in there, you even have elses
00:34:16 <ehird> also
00:34:20 <ehird> there can't be a space at position 0
00:34:30 <comexk> unfortunately there can
00:34:41 <ehird> balls.
00:34:47 <ehird> okay then, and by 0x20202020
00:34:48 <ais523> ehird: // is the traditional way to send a space character in Morse
00:34:49 <comexk> ais523: the alternative being strchr which contains all those things
00:34:54 <ais523> i.e. a zero-length string
00:34:54 <ehird> no
00:34:55 <ehird> not strchr
00:35:00 <ehird> you only need to do one memory read
00:35:04 <comexk> ehird: 0x20202020 will ALWAYS and
00:35:05 <comexk> brb
00:35:07 <ehird> ...
00:35:08 <ehird> no shit
00:35:10 <ehird> you use the result from the and
00:35:12 <ehird> not just checking it
00:35:19 <ais523> ehird: what do you /do/ with the result from the and?
00:35:22 <ais523> it won't magically fix your string
00:35:23 <ehird> ais523: err, the obvious?
00:35:26 <ais523> which is?
00:35:26 <ehird> it shows you where the space is
00:35:32 <ais523> yes, I know it shows you where the space is
00:35:34 <comexk> ehird
00:35:35 <comexk> problem is
00:35:36 <comexk> it doesn't
00:35:38 <ais523> but how do you change it into the masking of the string you need?
00:35:39 <comexk> this isn't 0x11
00:35:43 <comexk> this might be
00:35:43 <comexk> 0x2d
00:35:46 <comexk> 0x2e
00:35:48 <ehird> err so
00:35:50 <comexk> 0x2f
00:35:52 <comexk> all of which & 0x20
00:35:58 <ehird> ... no shit
00:36:28 <ais523> anyway, how come these strings are space-separated all of a sudden, Morse is normally separated with /
00:36:34 <ais523> is your teacher using an unusual encoding?
00:37:29 <ais523> ehird: what I mean is, even if your method does determine the location of the space (and it can do that, and against 0x0c rather than 0x20 because that's contained by dash and dot but not space)
00:37:35 <ais523> once you have the location, what do you do with it?
00:37:42 <ehird> ais523: comex's code
00:37:44 <ehird> just uses the location
00:37:53 <ais523> ehird: comex's code requires the location to be encoded as 0, 1, 2, 3, 4
00:37:58 <ais523> your code doesn't encode the location like that
00:38:00 <ehird> so change it to that
00:38:09 <ais523> err... comex's code uses a multiplication
00:38:28 <ais523> in other words, you need to convert your found-space into the position of the space so you can multiply by it
00:41:16 -!- ais523 has quit (Remote closed the connection).
00:47:01 <comexk> hmm
00:47:23 <comexk> but I still don't understand why REMOVING A BRANCH THAT ALWAYS GOES ONE WAY
00:47:24 <comexk> speeds it up
00:47:29 <ehird> branch prediction
00:47:34 <comexk> uh, I mean slows it down
00:47:46 <ehird> branch prediction
00:47:55 <comexk> __builtin_expect(it, 1) slows it down
00:47:59 <ehird> branch prediction
00:48:18 <comexk> ehird: why is it faster to predict the wrong thing
00:48:23 <ehird> butts
00:48:43 <comexk> well, it's not
00:48:51 <comexk> it's fastest without any prediction
00:48:59 <comexk> but this shouldn't matter.
00:49:15 <comexk> also, ehird: give me your code :p
00:49:23 <ehird> what code
00:49:29 <comexk> code to give me a position :p
00:49:38 <ehird> :| i just gave an algo
00:49:39 <ehird> not code
00:50:15 <comexk> how will anding with 20202020 help anything
00:50:21 <ehird> butts
00:50:25 * ehird tiredlazy
00:55:09 <comexk> holy shit this sped it up
00:55:14 <ehird> wut
01:04:00 -!- Azstal has joined.
01:04:36 <comexk> :/
01:04:43 <comexk> i don't think it's very easy to get access to jstring
01:05:05 <comexk> I'll try a memory dump
01:06:59 <comexk> also, GetStringUTFChars returns a const char
01:07:04 <comexk> so it's probably giving me an existing pointer
01:08:20 <comexk> I give up
01:08:23 <comexk> how do I make this faster
01:08:35 <comexk> I'll just go to sleep
01:21:01 -!- Asztal^_^ has quit (Read error: 110 (Connection timed out)).
01:38:48 -!- Asztal^_^ has joined.
01:53:45 -!- Azstal has quit (Read error: 110 (Connection timed out)).
02:33:57 -!- GreaseMonkey has joined.
04:18:44 -!- ab5tract has joined.
05:26:06 <GregorR> I want to hear a lounge version of O Fortuna.
05:44:27 -!- oklopol has quit (Read error: 110 (Connection timed out)).
05:44:48 -!- oklopol has joined.
05:51:45 <lament> hm, that could really work
05:54:34 <GregorR> You're singing it in your head now, aren't you? :)
05:54:37 <GregorR> I think it would be good.
05:54:39 <GregorR> In a weird way
05:55:01 <lament> yes
05:56:36 <lament> i'm not really singing in my head, i'm preparing the looper and the guitar and the bass to try to record the verse at least
06:45:33 * Robdgreat would love to hear that when it's done
06:57:09 <lament> with or without my crappy singing?
07:18:37 <Robdgreat> with should work
07:19:00 <Robdgreat> but ultimately it's your call
07:25:20 <lament> one sec
07:28:35 <lament> crap, all audio is in one channel, how do i fix this
07:30:23 <lament> ok got it
07:31:22 <bsmntbombdood> jeez hurry up
07:33:08 <lament> http://filebin.ca/qyxpp/ofortuna.mp3
07:35:50 <bsmntbombdood> wtf was that
07:36:46 * lament will appreciate more constructive feedback.
07:41:29 * lament pokes GregorR
07:45:34 -!- olsner has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:07:27 <ab5tract> lament: reminds me of 'Piggy' by NiN on Further Down The Spiral
08:30:35 -!- GreaseMonkey has quit ("Client Excited").
08:36:32 -!- tombom has joined.
08:50:44 -!- ab5tract has quit.
09:07:04 -!- impomatic has joined.
09:12:07 -!- impomatic has quit ("mov.i #1,1").
09:14:24 -!- Slereah has quit.
09:14:58 -!- Slereah has joined.
09:16:41 -!- olsner has quit ("Leaving").
09:27:10 -!- ais523 has joined.
09:42:01 -!- Slereah_ has joined.
09:54:25 -!- Slereah has quit (Read error: 110 (Connection timed out)).
09:59:14 -!- ais523 has quit (Read error: 104 (Connection reset by peer)).
10:01:35 -!- ais523 has joined.
10:07:33 -!- ais523 has quit (Read error: 104 (Connection reset by peer)).
10:07:36 -!- ais523_ has joined.
10:11:19 -!- oerjan has joined.
10:15:44 -!- ais523_ has changed nick to ais523.
10:31:29 -!- comexk has quit (Remote closed the connection).
10:32:23 -!- comex has joined.
10:32:50 -!- ais523_ has joined.
10:34:49 -!- ais523 has quit (Nick collision from services.).
10:34:51 -!- ais523_ has changed nick to ais523.
10:36:22 -!- lifthrasiir has quit (calvino.freenode.net irc.freenode.net).
10:36:31 -!- lifthrasiir has joined.
10:40:37 -!- oerjan has quit ("leaving").
10:45:07 -!- lifthrasiir has quit (calvino.freenode.net irc.freenode.net).
10:45:31 -!- lifthrasiir has joined.
11:54:52 -!- ais523 has quit (Remote closed the connection).
13:38:05 -!- ais523 has joined.
13:54:15 -!- ais523 has set topic: http://➡.ws/Ⱒ.
13:54:23 -!- ais523 has set topic: Logs: http://➡.ws/Ⱒ.
13:54:34 <ais523> there, we have the spidery ha in the log link now
13:54:45 <ais523> golfing the topic can be fun...
13:55:31 <Slereah_> How is it golfed?
13:56:06 <ais523> because it contains the same information as before
13:56:08 <ais523> but is shorter
13:56:26 <Slereah_> Does it?
13:56:34 <ais523> yep, it contains the link to the logs
13:56:44 <ais523> and a glagolitic capital letter spidery ha
13:56:56 <Slereah_> In short URL form and using ASCII->Unicode?
13:57:14 <ais523> in short URL form
13:57:16 <ais523> it's a unicode URL
13:57:56 <Slereah_> Though you can't actually click it or kopipeit
13:58:07 <fizzie> Sure you can. I just did.
13:58:11 <ais523> well, that's the fault of your client
13:58:17 <Slereah_> Firefox?
13:58:21 <Slereah_> Well, it is Firefox2.
13:58:51 <fizzie> But I'm surprised that the glagolitic capital letter spidery ha was free-for-taking at ➡.ws. Would have thought someone had already used it.
13:58:57 <MizardX> mIRC ... though I get to the wrong place
14:00:11 <AnMaster> ais523, err, I only see an arrow
14:00:11 <ais523> http://xn--hgi.ws/Ⱒ is what the URL should be translated to for non-Unicode-aware systems
14:00:13 <AnMaster> ->
14:00:17 <AnMaster> is how it looks
14:00:19 <AnMaster> in the url
14:00:20 <ais523> AnMaster: it's a Unicode arrow
14:00:28 <AnMaster> so what is the spidery thing?
14:00:31 <AnMaster> I don't see it
14:00:32 <MizardX> I get http://xn--7a3kss.ws
14:00:37 <ais523> it's a glagolitic capital letter spidery ha
14:00:46 <fizzie> Spidery HA is after the /, in the path part.
14:00:46 <Slereah_> Same here
14:00:58 <Slereah_> I get on that website and it does not redirect me at all
14:00:59 <AnMaster> ais523, is it a "glagolitic capital letter spidery ha" or an unicode arrow
14:01:00 <AnMaster> decide
14:01:01 <ais523> obviously there's a character encoding fail somewhere
14:01:04 <fizzie> AnMaster: There's both.
14:01:11 <AnMaster> no there ins't
14:01:13 <fizzie> AnMaster: It's [arrow].ws/[spidery ha].
14:01:16 <AnMaster> ah
14:01:16 <ais523> AnMaster: the URL is http:// unicode arrow .ws/ glagolitic capital letter spidery ha
14:01:25 <Slereah_> Spidery spidery
14:01:27 <AnMaster> that looks like [2C22] here
14:01:29 <AnMaster> ...
14:01:38 <ais523> same here, I don't have a spidery ha in my font
14:01:53 <fizzie> Well, me neither. But I trust it's the ha if ais523 says so.
14:02:09 <AnMaster> why the interest in that char?
14:02:14 <ais523> it comes out in mojibake on the clog logs
14:02:38 <ais523> my guess is that 7a3kss is the encoding of the mojibake, whereas hgi is the encoding of the correct unicode character
14:02:39 <fizzie> Whoops, I need to be elsewhere already. ->
14:03:51 <MizardX> Ah. If I copy it to chrome I get xn--hgi, but if I double-click it, I get xn--7a3kss
14:07:39 <AnMaster> hm, fast integer square root in C... anyone knows anything good?
14:07:51 <ais523> the newton algorithm is pretty fast
14:08:00 * AnMaster googles
14:08:11 <ais523> basically, start with 2
14:08:22 <ais523> well, x=2
14:08:31 <AnMaster> iterative?
14:08:33 <ais523> then change x to ((n/x)+x)/2
14:08:35 <ais523> yep, iterative
14:09:15 <MizardX> http://www.beyond3d.com/content/articles/8/
14:09:50 <AnMaster> that is float
14:09:59 <AnMaster> the target system doesn't have floating point hardware
14:10:02 <ais523> ah
14:10:02 <AnMaster> embedded target
14:10:25 <ais523> I'm sure there's an integer arithmetic version
14:11:55 * AnMaster finds a pdf from microchip named "fast integer square root"
14:12:52 <AnMaster> yay one avoiding slow division too
14:13:03 <MizardX> http://www.google.com/codesearch/p?hl=en#dl-KOTbXso4/libcs/isqrt.c&l=22
14:13:24 <AnMaster> libcs?
14:13:53 <ais523> ah, microchip
14:14:25 <MizardX> Here's one with only a for-loop: http://www.google.com/codesearch/p?hl=en#G1Uvi1prmwc/kernel2_4/drivers/media/video/omap/v4l2.c&l=189
14:14:27 <AnMaster> well my target isn't a microchip, but it is is still interesting
14:14:38 <AnMaster> I can't use the same asm, but the general idea should work I think
14:14:45 * AnMaster goes to experiment
14:16:05 <AnMaster> MizardX, that seems to work on the same model basically.
14:16:20 <AnMaster> same idea. slightly different implementations
14:25:36 <ais523> well, I don't know for certain that's a spidery ha, I just copied it from the old topic
14:27:01 <MizardX> Character 0x2C22 ... I don't have any font that supports it. :)
14:28:22 <MizardX> >>> unicodedata.name(u'\u2C22')
14:31:50 <comex> nice
14:33:46 <comex> too bad http://➡.ws/λ is already taken (and doesn't point to anything haskell)
14:56:13 <ehird> comex: that domain is still stupid
14:56:15 <ehird> as discussed before
14:57:38 -!- ehird has set topic: Ⱒ GLAGOLITIC CAPITAL LETTER SPIDERY HA | http://tunes.org/~nef/logs/esoteric/.
14:57:58 <ehird> 14:33 comex: too bad http://➡.ws/λ is already taken (and doesn't point to anything haskell)
14:58:00 <ehird> yes it do
14:58:00 <ehird> es
14:58:14 <ehird> johnnowak does Haskell and concatenative langs like factor
14:58:15 <ehird> :P
14:58:32 <AnMaster> ehird, what is wrong with ➡.ws ?
14:58:36 <AnMaster> I like it, so did ais523
14:58:40 <AnMaster> or does I guess
14:58:51 <ais523> I think it's a bad idea for general use
14:58:54 <ehird> the whole purpose is to subvert the twitter length limit, but it counts in bytes, not characters
14:58:58 <ais523> but very funny for a #esoteric topic
14:59:03 <ehird> so the makers are complete idiots
14:59:07 <ehird> who buy domains and advertise them without thinking
14:59:16 <AnMaster> ehird, err what?
14:59:27 <ehird> also, a tiny url is mainly useful apart from twitter to write down
14:59:27 <AnMaster> what has twitter got to do with it
14:59:37 <ehird> AnMaster: oh shut the heck up
14:59:48 <AnMaster> ehird, what?
15:00:05 <ehird> i'm tired of being expected to explain 5 billion things to you every time I say something
15:00:17 <AnMaster> there is nothing about twitter on http://➡.ws
15:00:28 <AnMaster> you aren't making any sense
15:00:29 <AnMaster> *shrug*
15:00:51 <AnMaster> bbl
15:01:22 <ais523> AnMaster: there is something about twitter on http://➡.ws, but only on the results page after you've worsened a URL
15:01:53 <ehird> and, besides, the other purpose is to write it down or tell people irl.
15:01:56 <ehird> good luck typing those urls
15:02:11 <ais523> ehird: you're missing the point
15:02:14 <ais523> which is to make a funny topic
15:02:21 <ehird> I never said the topic wasn't funny
15:02:31 <ais523> URL redirection services can be used to make a point, just as much as they can be used to shorten things
15:02:32 <ehird> I just saw comex's message at the start of my quicklog
15:02:33 <ehird> and replied to it
15:02:37 <ehird> before seeing the context
15:03:32 -!- Hiato has joined.
15:11:28 <ehird> oh, I just realised that the creators were quite young when they made INTERCAL
15:11:40 <ais523> interesting
15:11:43 <ehird> I was expecting them to be bearded like they are now, I guess that explains why INTERCAL _isn't_ popular
15:11:46 <ais523> I suppose they must have been, as they're still in work now
15:11:58 <ehird> just finished freshman year final exams, sez don woods
15:11:59 <ais523> and that explains why INTERCAL wasn't popular back in 1972 but has become more popular since
15:12:01 <ehird> (http://www.computerworld.com.au/article/251892/-z_programming_languages_intercal)
15:12:54 <ehird> so, if I have my american educational system right,
15:13:00 <ehird> late teens/early 20s?
15:14:29 <ehird> http://www.diku.dk/hjemmesider/ansatte/jespera/doc.html oh god the comic sans it burns
15:19:05 <ehird> ais523: also, do jumps -really- cost 60 cycles?
15:19:12 <ehird> that's just painful...
15:19:18 <ais523> it depends on which way they go
15:19:34 <ais523> basically, branch prediction is the processor predicting in advance which way the jump will go
15:19:44 <ais523> if it guesses wrong, you have to flush the pipeline and that takes ages
15:19:54 <ehird> ais523: how often does it get it right?
15:20:00 <ais523> quite a lot, nowadays
15:20:06 <ais523> especially if jumps mostly go the same way
15:20:11 <ais523> and even more with profile-guided optimisation
15:20:17 <AnMaster> ehird, it depends on how long the pipeline is
15:20:19 <ais523> that's one of the main purposes of that optimisation
15:20:29 <AnMaster> ehird, on a pentium 4 a mispredicted branch is *very* expensive
15:20:37 <ehird> did the RISC-y sort of processors do jumps better?
15:20:39 <AnMaster> since it had such a long pipeline
15:21:12 <ais523> ehird: it's nothing but pipeline length and prediction quality that affects the jump
15:21:13 <oklopol> yeah riscs do better
15:21:21 <ehird> oklopol: i'll trust you <3
15:21:24 <ais523> for instance, on a PIC microcontroller, the pipeline has length 2 so jumps only take 2 cycles
15:21:25 <oklopol> they generally have shorter pipelines
15:21:27 <AnMaster> ehird, there are some CPUs with "delayed branch" stuff, basically they continue executing n instructions after the branch instruction even when jumping (iirc n was/is usually 1 or 2)
15:21:36 <ais523> and as oklopol says, you can likely get away with a shorter pipeline on a RISC
15:21:42 <AnMaster> true
15:22:08 <ehird> 15:21 AnMaster: ehird, there are some CPUs with "delayed branch" stuff, basically they continue executing n instructions after the branch instruction even when jumping (iirc n was/is usually 1 or 2)
15:22:12 <ehird> that sounds rather dangerous for IO :D
15:22:16 <AnMaster> ais523, delayed branches are another interesting way to solve it. It potentially reduces the issues to zero if you can reorder
15:22:16 <ais523> ehird: delayed branch is just telling the compiler to use software to sort out what most processers do in hardware
15:22:22 <ais523> *processors
15:22:28 <ehird> ah
15:22:31 <AnMaster> indeed
15:22:35 <ehird> presumably not as well
15:22:36 <ais523> and it gives the same result as the hardware version would do
15:22:45 <ehird> since hardware tends to be faster...
15:22:59 <ais523> well, it slows down the compilation but not the execution
15:23:04 <oklopol> ehird: it's not nearly as dangerous for io as it is for exceptions
15:23:11 <ehird> heh
15:23:30 <oklopol> and all kindsa data hazards
15:23:38 <ais523> but yes, there are lots of subtleties, it's really easy to screw up
15:23:47 <oklopol> and why would you start talking about something i'm actually interested in right when i'm about to leave
15:23:48 <AnMaster> I think VLIW and delayed branch slots are both great ideas.
15:23:54 <ehird> oklopol: sry I will talk mor ewhen you return.
15:23:56 <oklopol> damn you all to germany!
15:23:57 <oklopol> ->
15:24:04 <AnMaster> hah
15:24:08 <ehird> i'm rather upset jumps are so slow
15:24:14 <ehird> i don't like my cpu :<
15:24:17 <AnMaster> ehird, not if they are correctly predicted
15:24:27 <ais523> well, it's more that non-jumps can be sped up more easily then jumps
15:24:38 <AnMaster> ehird, anyway, Intel Core is *fast* at mispredicted jumps compared to Pentium 4
15:24:50 <ais523> and AnMaster's right, a correctly predicted jump hardly costs anything, usually 1 or 2 cycles
15:24:55 <ehird> i bet a functional-tuned cpu for lisp would get it right because it'd be more structured than 'jmp' :<
15:25:02 <AnMaster> for some specific work loads a Pentium 4 is *worse* than a *slower* Pentium 3
15:25:13 <AnMaster> due to the high cost for stuff like branch misprediction
15:25:19 <ais523> unfortunately, you can't also predict jumps correctly, if you could it would defeat the point of having if statements in the first place
15:25:29 <AnMaster> ais523, yes indeed
15:25:29 <ais523> an unconditional goto, by the way, is fast because it's always trivial to predict
15:25:51 <ehird> we just need to tie a crystal ball to our cpus
15:25:58 <ehird> perfect branch prediction & halting problem solved to boot
15:26:10 <ais523> some processors, like the PIC, are primitive enough that they don't even try to predict unconditional jumps
15:26:13 <ais523> and so waste cycles when jumping
15:26:23 <AnMaster> ehird, a crystal ball is slow. You need L1/L2 cache for the crystal ball lookups
15:26:29 <ais523> but on modern hardware, you don't need to worry about it
15:26:31 <AnMaster> which would defeat the point
15:26:37 <ehird> AnMaster: ok then, the beating heart of a dead wise oracle
15:26:42 <ehird> much more efficient
15:26:48 <ais523> well, crystal is made from silicon
15:26:53 <ehird> dead & wise, not "dead wise" as in slang that is
15:26:57 <AnMaster> ais523, however delayed branch slots does solve the issue if you can reorder some. Sure there are cases where you can't, and have to put in NOP
15:27:00 <ais523> so I'd suggest embedding the processor inside the crystal ball
15:27:01 <ehird> ais523: oracles's hearts are made from silicon too
15:27:21 <ais523> AnMaster: delayed branch slots are great, I agree
15:27:26 <ais523> I was planning to implement them in INTERCAL
15:27:33 <AnMaster> hah!
15:27:41 <ais523> which is obviously ridiculous as INTERCAL's far too high a level to gain any benefit
15:27:47 <ais523> but I think they could be useful for debugging purposes
15:27:52 -!- FireFly has joined.
15:28:02 <AnMaster> ais523, anyway if you had a delay of 40 like ehird talked about then delayed branch slots would be bloody annoying
15:28:04 <ais523> INTERCAL is low level, but delayed branch slots are slightly lower level than asm
15:28:16 <ehird> AnMaster: ais523 claimed comex's branch was taking ~60 cycles
15:28:16 <AnMaster> it only works great with a delay of 1-2
15:28:19 <ehird> which is crazy as fuck
15:28:24 <ais523> and yes, but I'm sure you can find something else to do for 40 cycles
15:28:33 <AnMaster> ok 60 then
15:28:33 <ais523> or however many it is
15:28:38 <AnMaster> anyway it varies depending on CPU
15:29:04 <ais523> hmm... pentium 4 has a pipeline length of 31, according to Wikipedia
15:29:46 <AnMaster> ais523, hm what about mispredicted branch + IL1 miss ?
15:29:50 <AnMaster> that would be very slow
15:29:54 <ais523> ooh, nasty
15:29:57 <AnMaster> possibly also L2 miss
15:30:06 <ais523> comex's code didn't have much chance of an L1 miss, though, it was hardly using any memory
15:30:09 <AnMaster> then you would hit a few hundred cycles right?
15:30:26 <AnMaster> ais523, well DL1 and IL1 are luckily separate..
15:30:38 <ehird> so, just to put it into context,
15:31:00 <ehird> how long do 100 cycles take on this 2.1ghz intel core 2 duo, on average? :P
15:31:01 <AnMaster> btw, where is the code comex wrote?
15:31:16 <ehird> AnMaster: http://pastie.org/407770
15:31:17 <ehird> so far
15:31:19 <ehird> we're still improving it
15:31:24 <ehird> it's a morse code decoder
15:31:28 <ehird> we're trying to eliminate the strchr atm
15:31:29 <AnMaster> I see
15:31:38 <ehird> AnMaster: his prof told him to optimize some java code
15:31:45 <ehird> so he's writing it in C and linking it with Java Native Interface
15:31:55 <ehird> using tricks like
15:31:57 <ehird> int a = *((int *) s);
15:32:04 <ehird> to read 4 characters (the max morse cod ehe's processing) in one go
15:32:05 <AnMaster> I see
15:32:13 <ehird> does that mean 'I don't see'?
15:32:23 <AnMaster> not in this case
15:32:38 <AnMaster> I still don't see what the algorithm is though...
15:32:45 <ehird> just morse code decoding
15:32:50 <ehird> AnMaster: stuff[] is a perfect hash table
15:32:55 <AnMaster> ah
15:33:02 <AnMaster> now that explains a lot
15:33:05 <ehird> and the mask removes stuff after the space, essentially
15:33:15 <ehird> but since the space can be determined just from the 'a' there
15:33:20 <ehird> we're trying to figure out how to do it the quickest way
15:33:23 <AnMaster> what is the space for?
15:33:26 <ehird> (since strchr will do the 4 accesses and branch on each one)
15:33:28 <ehird> AnMaster: separate the codes
15:33:32 <AnMaster> mhm
15:33:34 <ehird> ..-.- ...- .-...
15:33:35 <ehird> and stuff
15:33:38 <AnMaster> right
15:34:02 <ehird> but he has two branches there, and up to 5 hidden in strchr
15:34:09 <AnMaster> hm
15:34:09 <ehird> so we're trying to reduce those, and fold them into each other
15:34:10 <ehird> ais523: 15:30 ehird: how long do 100 cycles take on this 2.1ghz intel core 2 duo, on average? :P
15:34:26 <AnMaster> ehird, how long did you say max length was
15:34:28 <ais523> this is actually surprisingly like writing INTERCAL
15:34:38 -!- MigoMipo has joined.
15:34:39 <AnMaster> and do you need to fail in a good way on bad input?
15:34:41 <ehird> AnMaster: 4 characters, so that's why we use an int
15:34:44 <ehird> and no, he doesn't
15:34:47 <AnMaster> ah
15:34:51 <ehird> also, whatever you say we've probably tried :P
15:34:52 <ais523> and 100 cycles at 2.1 GHz is 100/2.1 ns which is just under 50 nanoseconds
15:34:58 <AnMaster> ehird, it may be possible to use SIMD then
15:35:00 <AnMaster> *may*
15:35:18 <ehird> ais523: Oh.
15:35:24 <AnMaster> depends on alignment though
15:35:26 <ehird> Er, that's not so bad then.
15:35:30 <AnMaster> so probably not a good idea
15:35:42 <ehird> AnMaster: we need the actual code to be portable
15:35:44 <AnMaster> ehird, depends on how much data you need to process
15:35:45 <ehird> since java is portable
15:35:50 <AnMaster> hrrm ok
15:35:54 <ehird> ofc, he's going to get marked badly for, y'know, not using java but there you go
15:35:59 <AnMaster> ehird, then it isn't. It assumes int == 32 bits
15:35:59 <ehird> AnMaster: also, he's testing it on 6mb strings
15:36:05 <ehird> also, yes
15:36:10 <ehird> but that's universally true on modern systems.
15:36:24 <ehird> a system in which it isn't probably doesn't run java
15:36:29 <AnMaster> iirc there are systems with int == 64 bits
15:36:50 <AnMaster> don't remember which system
15:36:59 <AnMaster> only a vague memory of reading those existed
15:37:17 <AnMaster> probably some HPC stuff
15:37:19 <ehird> your personal anecdotes aren't too useful :D
15:37:32 <AnMaster> ehird, was it supposed to be?
15:37:36 <ehird> dunno
15:37:47 <AnMaster> ehird, anyway there is int32_t in C99
15:38:14 <AnMaster> ehird, btw how did you calculate the perfect hash?
15:38:21 <AnMaster> or how did comex rather I guess
15:38:24 <ehird> I'm not sure, ais523 did that
15:38:29 <AnMaster> oh?
15:38:32 <AnMaster> how ais523?
15:38:33 <ehird> I told comex about the *((int*)s) trick though
15:38:40 <ais523> let me read backlog
15:38:50 <ehird> AnMaster: his original code was ridiculously bad, take a look: http://pastie.org/407681
15:38:50 <AnMaster> ehird, well, that could be slow. If it isn't aligned
15:39:04 <ais523> it was comex who did the perfect hash, not me
15:39:20 <AnMaster> ehird, 1) some systems will SIGBUS on non-aligned int. IIRC Alpha for example. Not sure about MIPS, ARM, PPC and such
15:39:26 <ehird> nobody actually cares
15:39:30 <AnMaster> 2) even on x86, reading non-aligned int is slower
15:39:32 <ehird> it has to work on most systems,
15:39:34 <ehird> and be fast on x86
15:39:36 <AnMaster> not sure how much slower
15:39:38 <AnMaster> but yes slower
15:39:46 <ehird> his code takes something like 300ms on a 6 megabyte string now, iirc, and that _includes_ the overhead of the Java bridge and the like
15:39:52 <ais523> x86 can certainly manage misaligned accesses
15:40:05 <ais523> also, does his code work?
15:40:07 <AnMaster> ais523, yes it can. But it is still slower than aligned access
15:40:17 <ehird> ais523: he broke it recently IIRC
15:40:21 <ehird> but the last working version :P
15:40:31 <ehird> AnMaster: but
15:40:33 <ehird> it's faster than
15:40:37 <ehird> s[0], s[1], s[2], s[3].
15:40:45 <AnMaster> probably
15:40:59 <ehird> although the strchr does that anyway
15:41:03 <ehird> thus why we're trying to eliminate it
15:41:05 <ehird> or at least i am
15:41:18 <AnMaster> that strchr. I think you could do that faster with testing against a bitmask or something.
15:41:24 <ehird> yes
15:41:28 <ehird> that was what I was suggesting
15:41:30 <ehird> bitmasking a
15:41:34 <ehird> but I couldn't figure out what the right bitmask was
15:41:37 <ehird> and what to do with the result
15:41:55 <AnMaster> ehird, take a look at strlen in glibc. It is pretty insane. That is the generic C version. Each CPU also has an even crazier asm implementation
15:42:04 <ehird> that's where I got the int * trick from
15:42:08 <ehird> via http://www.stdlib.net/~colmmacc/2009/03/01/optimising-strlen/
15:42:14 <AnMaster> ehird, ah you have seen the bitmasking in glibc then?
15:42:26 <ehird> ofc, strlen() is pointless since you should use length-tagged strings.
15:42:35 <AnMaster> yes
15:42:45 <ehird> if I could do anything to glibc, I'd add a 1 second wait for every strlen call :P
15:42:49 <ais523> ehird: the principle of searching for a NUL is still useful, though
15:42:57 <ehird> and modify gcc to never, ever optimize out a strlen
15:43:01 <ehird> ais523: strchr(s,0)
15:43:04 <ehird> if you _must_ :P
15:43:14 <ais523> well, I was thinking of strchr in general
15:43:19 <ais523> although notice that strchr stops on NUL
15:43:25 <ais523> some things are faster for NUL-termination
15:43:41 <ehird> yes, but in general strings should be length-tagged
15:43:46 <ais523> personally, I think one of the better methods for storing strings is to both length-prefix and nul-terminate
15:43:49 <ehird> just about every HLL does that, and their string handling is great
15:43:58 <ehird> ais523: that can work
15:46:18 <AnMaster> ehird, you can do length tagged strings in C
15:46:30 <ehird> i know
15:46:33 <ehird> but its a pain
15:46:37 <ehird> because libraries don't like it
15:46:41 <AnMaster> there are at least two libraries with macros for it
15:46:41 <ehird> and you can';t use the stdlib
15:46:44 <AnMaster> that I know of
15:46:48 <AnMaster> probably a lot more exists
15:46:59 -!- impomatic has joined.
15:47:02 <ehird> in C, using non-null-terminated strings is pretty painful
15:47:12 <impomatic> Hi :-)
15:47:12 <ais523> if you're doing both length tag and nul-terminate, then you can use most of the read-only stdlib functions
15:47:15 <ais523> hi
15:47:15 <AnMaster> ehird, just consider it a generic byte buffer
15:47:22 <ais523> besides, memchr = strchr for length-prefixed strings
15:47:29 <AnMaster> ais523, yes indeed
15:47:37 <AnMaster> there exists quite a few mem* functions
15:47:38 <ais523> and likewise with the other mem* functions
15:47:43 <AnMaster> that are *FASTER* than str* ones
15:47:51 <AnMaster> because they don't need to check for end all the time
15:47:57 <ehird> actually
15:48:01 <ehird> comex switches to using memchr
15:48:03 <ehird> and it was slower
15:48:05 <AnMaster> memcpy() is faster than strcpy() for example
15:48:09 <AnMaster> ehird, that's strange
15:48:10 <ehird> maybe the \0 checking helped branch prediction :P
15:48:19 <AnMaster> no idea
15:48:23 <ais523> yep, most CISC processors can do branch prediction perfectly for for loops
15:48:32 <ais523> but most processors aren't CISC nowadays
15:48:32 <AnMaster> ais523, interesting
15:48:45 <ais523> they're RISC-core, disguised as CISC using microcode
15:48:57 <AnMaster> ais523, but can they still branch predict?
15:49:17 <AnMaster> branch predict perfectly I mean
15:49:23 <ais523> well, I've worked with a DSP before
15:49:30 <ais523> that branch-predicted for-loops perfectly
15:49:34 <ais523> as long as you didn't change the control variable
15:49:53 <ais523> not only that, but it didn't even spend any cycles on the decrement-and-test such loops normally have
15:50:23 <AnMaster> ais523, at least some x86 use microcode. I'm pretty sure AMD64 does for some instructions. I have a pdf somewhere around here documenting type of execution, with those in microcode marked "VectorPath", other ones marked "DirectPath"
15:50:24 <AnMaster> iirc
15:50:33 * AnMaster searches his desktop
15:50:42 <AnMaster> ah there it is
15:51:03 <ais523> I think all modern x86-compatibles use microcode
15:51:11 <AnMaster> indeed. Instruction latencies for the AMD64 ISA (k8 family)
15:51:17 <ais523> DSPs are weird, though, they have some very specific CISC instructions
15:51:55 -!- Judofyr has joined.
15:52:12 <AnMaster> ais523, even with microcode x86 is pretty CISC in the core. Just consider all the core SIMD instructions for example
15:52:28 <ais523> are those non-microcode/
15:52:30 <ais523> I'm surprised
15:52:39 <ais523> and suddenly realise why ARM uses so much less power
15:52:46 <ehird> I don't like computers
15:52:50 <ehird> They don't work very well
15:52:51 <ehird> :(
15:53:15 <AnMaster> From "Legend for table C.1": Decode type Shows the method that the processor uses to decode the instruction—either DirectPath Single (DirectPath), DirectPath Double (Double), or VectorPath.
15:53:31 <AnMaster> I think it was clarified elsewhere in the pdf
15:54:07 <AnMaster> yep
15:54:22 <AnMaster> http://rafb.net/p/nVH4iJ51.html
15:55:54 <ehird> ahem
15:55:57 <ehird> don't use rafb.net
15:56:18 <ehird> for people reading this sometime after tomorrow: http://pastie.org/408374
15:56:22 <AnMaster> ehird, it is the one that loads fastest here. pastebin.ca take a lot of time to load. Same for all the others
15:56:30 <ehird> pastie.org is always quick for me
15:56:35 <AnMaster> ehird, not for me
15:56:47 <AnMaster> rafb takes maybe 1 second to load. pastie.org around 5
15:56:54 <ehird> hmm
15:57:08 <AnMaster> I guess there is much more design on pastie.org
15:57:15 <AnMaster> rafb has a very minimalistic design
15:57:19 <ehird> your browser will cache the css.
15:57:36 <ehird> well, I'm tempted to just say tha ta few more seconds now beats expiry in the future, but I'll look for something faster
15:57:52 <ais523> ehird: that CSS expires, think of the logreaders!
15:58:02 <ehird> lol wut
15:58:16 <AnMaster> :D
15:58:29 <ehird> AnMaster: http://paste.lisp.org/?
15:58:33 <ehird> about as minimalist as rafb
15:58:38 <ehird> irritating captcha though
15:58:42 <ehird> well
15:58:45 <ehird> it always says lisp
15:58:47 <AnMaster> indeed
15:58:47 <ehird> so you can easily script that
15:59:01 <AnMaster> ehird, really? greasemonkey tends to slow down stuff
15:59:13 <ehird> you don't really need greasemonkey for that
15:59:17 <comex> best captcha ever
15:59:33 <ehird> comex: well, you have to target it specifically
15:59:37 <AnMaster> ehird, I use paste.lisp.org when I want to highlight erlang
15:59:38 <ehird> most spambots just generically spam everything
15:59:40 <ehird> so it'd trip them up
16:00:15 <AnMaster> ehird, it does load quite fast. But rafb does load even faster
16:00:22 <AnMaster> 1 second vs. 3 or such
16:00:31 <ais523> if it takes more than 50 nanoseconds, it's too slow!
16:00:36 <ehird> AnMaster: http://pastey.net/?
16:00:43 <ehird> loads very fast for me, and has ids going back to 2006 (I just checked)
16:01:00 <ais523> I suggest you use paste.eso-std.org
16:01:05 <ehird> yes!
16:01:19 <AnMaster> ehird, hm 2 seconds
16:01:22 <ais523> still parked
16:01:26 <ehird> it will give you vaginal herpes on your iso standards. or at least, that's what it claims.
16:01:27 <AnMaster> err didn't eso-std expire?
16:01:31 <ehird> AnMaster: so?
16:01:35 <ehird> you can still use it!
16:01:45 <AnMaster> well the pastes are gone.
16:01:53 <AnMaster> the urls no longer valid
16:01:57 <AnMaster> THINK OF THE LOGREADERS!
16:01:59 <ehird> http://expired.revenuedirect.com/park.php?domain_name=<your text here>&site_id=20788
16:02:05 <ehird> then give us that link
16:02:06 <AnMaster> never let your pastebin expire
16:02:15 <ehird> also, nobody actually used it
16:02:19 <ais523> I did
16:02:20 <AnMaster> ehird, you did iirc
16:02:23 <AnMaster> and ais523 did
16:02:25 <ehird> ais523: okay, like thric
16:02:27 <ehird> e
16:02:30 <ehird> until anmaster told you not to
16:02:35 <ais523> I used it more than ehird, I think
16:02:43 <AnMaster> ehird, fixing that download bug might have helped
16:02:50 <AnMaster> and THINK OF THE LOGREADERS!!
16:02:51 <ehird> not a bug
16:02:52 <ais523> that wasn't a bug, that was correct
16:03:02 <ais523> doing things which are unusual but correct is very eso
16:03:13 <ais523> incidentally, Microsoft have come up with their own way of doing that
16:03:18 <ehird> indeed
16:03:23 <ehird> i linked to that article yesterday
16:03:24 <ais523> they wrote a standard, made it an RFC, and are now complying with it
16:03:33 <AnMaster> ais523, um really?
16:03:36 <AnMaster> details?
16:03:57 <ehird> http://drplokta.livejournal.com/109267.html
16:04:15 <ais523> ah, I was going to ask ehird if he had the link, I couldn't find it
16:04:24 <AnMaster> huh, http://pastey.net/ thinks Erlang means Ericsson Language. It actually doesn't
16:04:37 <AnMaster> it is a reference to a person named Erlang
16:04:40 <ehird> AnMaster: it does and it doesn't
16:04:41 <ehird> it's both
16:04:44 <AnMaster> same as Haskell is named after someone
16:04:48 <ehird> they named it because of both connotations
16:04:53 <ehird> even though only one is official
16:05:05 <ehird> "Keep my history for at least [99999999] days" —Firefox
16:05:07 <AnMaster> ehird, true. But according to one of the original developers it was primarily due to the person
16:05:09 <ehird> I should become the U.S. archivist.
16:05:46 <AnMaster> ~273972 years?
16:05:51 <ehird> yes.
16:05:56 <AnMaster> and yes that was using 365 and integer division
16:05:57 <ehird> I don't intend to be using Firefox by that t ime.
16:06:00 <AnMaster> so probably off by a bit
16:06:45 <AnMaster> ehird, personally I have it set to one week
16:06:51 <AnMaster> I don't like to keep history around
16:06:52 <ehird> AnMaster: DATA LOSS AAAAAAAAAGH
16:06:54 <ehird> NO NO NO NO NO NO NO
16:06:57 <ehird> YOU MUST PRESERVE ;_;
16:07:03 <AnMaster> ehird, No. I'm paranoid
16:07:07 <AnMaster> that is the reason
16:07:12 <ehird> So encrypt it :P
16:07:14 <AnMaster> ehird, I do
16:07:20 <AnMaster> /home is encrypted
16:07:32 <ehird> I have a huge obsessive aversion to deleting anything.
16:07:42 <ehird> probably because of my logreading tendencies
16:07:48 <AnMaster> ehird, I have a huge obession with having more than 3 GB free space on my disk
16:07:51 <AnMaster> I do have backups of course
16:07:58 <AnMaster> on tape
16:07:59 <ehird> Eh, just transfer old stuff to a backup drive.
16:08:02 <ehird> Lol, tap.e
16:08:03 <ehird> *tape
16:08:09 <ehird> Want to survive a nuclear attack?
16:08:09 <AnMaster> ehird, it lasts.
16:08:17 <ehird> disks last pretty well y'know
16:08:27 <AnMaster> ehird, ever had a disk fail?
16:08:31 * AnMaster has
16:08:33 <ehird> Yes.
16:08:41 <ehird> Backup your backups.
16:08:45 <ehird> To Xzibit's body.
16:08:51 <AnMaster> huh?
16:08:59 <ehird> Xzibit is the origin of the yo dawg meme.
16:09:06 -!- AnMaster has set topic: Ⱒ GLAGOLITIC CAPITAL LETTEmhmR SPIDERY HA | http://tunes.org/~nef/logs/esoteric/.
16:09:09 <AnMaster> err
16:09:12 <AnMaster> wth
16:09:12 <ehird> LETTEmhmR
16:09:15 <ehird> leave it like that :D
16:09:22 <ehird> (I also don't keep backups. Yet.)
16:09:23 <AnMaster> my kb2OPJħßj strs
16:09:29 <ehird> AnMaster: indeed, it does str.
16:09:33 <AnMaster> ah better...
16:09:37 <AnMaster> keyboard went strange
16:09:39 <AnMaster> no idea why
16:09:50 -!- AnMaster has set topic: Ⱒ GLAGOLITIC CAPITAL LETTER SPIDERY HA | http://tunes.org/~nef/logs/esoteric/.
16:09:50 <FireFly> Nice topic
16:09:54 <AnMaster> fixed it
16:09:56 <FireFly> :<
16:09:57 -!- ehird has set topic: Ⱒ GLAGOLITIC CAPITAL LETTEmhmR SPIDERY HA | http://tunes.org/~nef/logs/esoteric/.
16:09:59 <ehird> Fixed it.
16:10:00 <FireFly> :>
16:10:04 <AnMaster> ...
16:10:25 <AnMaster> anyway. Where was I
16:10:28 <AnMaster> right
16:10:34 <ais523> FireFly: sometimes I fly around in a spaceship?
16:10:41 <FireFly> Oh, you do?
16:10:48 <ais523> it's a reference to eso-std.org
16:10:52 <ais523> which was only ever placeholder text
16:10:54 <ehird> ais523: now _that's_ obscure
16:10:56 <ehird> also, no
16:10:59 <ehird> well.
16:11:00 <ais523> "sometimes I fly around in a spaceship :>"
16:11:01 <ehird> in variou forms.
16:11:04 <AnMaster> ehird, backups on tape may not survive a nuclear attack
16:11:08 <ehird> but it had infrastructure set up/
16:11:09 <AnMaster> nor do I think anything I have will
16:11:11 <ehird> it was just never used :P
16:11:19 <ais523> AnMaster: will you survive a nuclear attack?
16:11:23 <ais523> just keep a backup in your pocket
16:11:29 <AnMaster> I live in a house based on the log technology
16:11:30 <ehird> backup yourself in your pocket
16:11:31 <ais523> that way, if you survive the attack probably so will the backup
16:11:36 <ehird> INFINITE BACKUPS.
16:11:39 <comex> hey, I recognized it
16:11:41 <ehird> you can never die.
16:11:42 <ehird> ever.
16:11:46 <ais523> comex: wow
16:11:59 <ehird> since it would take infinite time to destroy all the copies of yourself
16:12:00 <ais523> it was pretty obscure...
16:12:07 <AnMaster> ais523, that would require fitting 500 GB in my pocket
16:12:08 <AnMaster> how
16:12:20 <ais523> flash memory's getting better all the time
16:12:26 <FireFly> MicroSDs are small
16:12:28 <ais523> I have an 8 GB memory stick in my pocket at the moment
16:12:30 <comex> depends on the size of your pocket
16:12:32 <AnMaster> ais523, and wear out quickly with daily backups
16:12:39 <FireFly> There are 32 gig SDHCs IIRC
16:12:39 <ehird> er
16:12:41 <ais523> well, my pocket-backup isn't daily
16:12:45 <ehird> its for a nuclear attack AnMaster
16:12:48 <ais523> and it's mental-incremental
16:12:49 <AnMaster> currently I have incremental daily backups
16:12:51 <ehird> i'm sure you could lose a month
16:13:02 <ais523> as in, I back something up if I think it needs backing up and I remember it changes
16:13:06 <FireFly> I'd be happy to live
16:13:17 <ais523> every now and then I'll tarball all the backup-requiring bits of my home dir and store that on the USB stick
16:13:18 <ehird> FireFly: pfft, you and your logic
16:13:27 * FireFly likes his logic
16:13:29 <ehird> my disaster plan: grab backup drive, run.
16:13:34 <AnMaster> ehird, anyway I keep them in a safe. That is metal. That should at least reduce EMP *a bit*
16:13:40 <ehird> do not perform step 2 until step 1 is complete.
16:13:51 <ais523> incidentally, radioactivity has a much larger effect on fibre optic cables than both other electronic stuff and humans
16:13:52 <FireFly> My disaster plan: null
16:13:52 <FireFly> :<
16:13:55 <ehird> AnMaster: okay, listen, if there's an EMP attack
16:13:59 <ehird> you're fucked anyway
16:14:00 * FireFly doesn't do backups, but I should
16:14:03 <AnMaster> ehird, yes
16:14:08 <ehird> like, as in, death imminent :P
16:14:09 <comex> me too
16:14:12 <ais523> FireFly: definitely, most people only learn that lesson until they've already lost one set
16:14:20 <FireFly> And I havn't been there
16:14:21 <ais523> ehird: surely it depends on how near the EMP attack is?
16:14:28 <AnMaster> and how strong
16:14:28 <ehird> ais523: I've lost data before, but it wasn't vital
16:14:36 <ehird> (Just some music, the drive partially made some files vanish)
16:14:50 <ais523> how did the drive manage that?
16:14:50 <ehird> ais523: considering it would wipe out infrastructure...
16:14:54 <ehird> also, dunno
16:14:56 <ehird> it was in my old computer
16:14:58 <ehird> very dusty
16:14:58 <AnMaster> CD ROM should be a pretty good backup
16:14:59 <ehird> bashed around a lot
16:15:02 <ehird> dropped a few times
16:15:04 <ais523> I'm sufficiently old I've lost data due to bad sectors on floppy disks
16:15:05 <ehird> never maintained
16:15:06 <ehird> etc
16:15:09 <AnMaster> and I don't mean CD-R. But CD-ROM
16:15:14 <AnMaster> quite a difference
16:15:25 <ehird> AnMaster: not really
16:15:27 <ais523> the second computer I used didn't have a sufficiently large hard drive to store the things I did, so I stored everything on floppies instead
16:15:28 <AnMaster> ais523, I have too
16:15:30 <ehird> you can snap a disk trivially
16:15:40 <ehird> I've done it in seconds
16:15:45 <AnMaster> ehird, well assuming it is stored in a dry protected place
16:15:48 <ehird> disk splinters everywhere :|
16:15:52 * impomatic backs up to memory sticks
16:15:55 <ehird> I was kind of stupid and tired.
16:15:57 <AnMaster> ehird, I mean, EMP wouldn't be much of an issue
16:16:01 <ais523> ehird: it's relatively hard to snap them accidentally, it's easy but not easy to do accidentally
16:16:09 <AnMaster> indeed
16:16:16 <ehird> my hands stung a bit after snapping that disc :D
16:16:18 <ais523> impomatic: anyway, I had to spend ages cleaning up after your quit message last time
16:16:27 <FireFly> I'm not really evolving as fast as the technology does. I'm fine with my 512 MB Mp3 player, I don't need no more
16:16:27 <ais523> it was threatening to overwrite the logs
16:16:29 <AnMaster> uh
16:16:35 <AnMaster> ais523, what was that quit message?
16:16:42 <ais523> AnMaster: a redcode quine
16:16:48 <AnMaster> hah
16:16:49 <ais523> that ran itself immediately after printing
16:16:56 <ais523> known as an "imp"
16:16:58 <impomatic> What quit message?
16:17:00 <ais523> thus presumably impomatic's username
16:17:13 <impomatic> Aha :-)
16:17:27 <ais523> and I'm not sure I knew enough offhand redcode to write an imp-gate to stop it
16:17:39 <impomatic> I forgot about that. Cool that the logging software runs redcode
16:17:52 <impomatic> jmp #0, <-5 should stop it next time
16:17:53 <ais523> I don't think it does
16:17:59 -!- jix has joined.
16:18:02 <ehird> ais523: clog rebooted yesterday or the day before
16:18:07 <ehird> and the mysterious nef was online
16:18:11 <FireFly> It was yesterday, yeah
16:18:15 <ehird> for the first time since 2000
16:18:17 <ehird> IIRC
16:18:20 <ehird> or 2004 or something
16:18:20 <ais523> but I'm trying to be sure
16:18:22 <ehird> ages ago, anyway
16:18:30 <ais523> you never know when the logging software might suddenly become Turing-complete
16:18:40 <impomatic> I have a proper redcode Quine actually, 170 instructions. I just need to recompile the MARS to run programs longer than 100 lines :-)
16:18:53 <ehird> clog is pretty good, it's pretty stable
16:18:55 <ais523> that needs a recompile? I thought the limit was just there to stop people cheating
16:18:57 <impomatic> Who's nef?
16:19:02 <ehird> impomatic: see log link
16:19:02 <ais523> impomatic: the person who keeps the logs
16:19:07 <ais523> apart from that, we don't know anything about them
16:19:15 <ais523> no idea why they're logging the channel, for instance
16:19:18 <ehird> ais523: apparently the tunes.org server admin administers it now
16:19:22 <impomatic> Oh, I see :-)
16:19:25 <ehird> also, lament or someone asked
16:19:43 <FireFly> Wait, we don't know _why_ they're here, logging our channel? ;o
16:20:06 <impomatic> I've finished Redcode Forth. It's currently doing well on the programming reddit. There's also an article on there about OISC.
16:20:49 <ais523> wow, I read proggit from time to time but somehow I missed that
16:21:11 <ais523> <orbat> This is completely pointless and has no real world application. I love it!
16:21:18 <impomatic> Well it's handy to have logs as evidence! :-)
16:21:18 <ais523> only one comment, I may as well copy it here
16:21:21 <ehird> a while ago I was going to link impomatic to an article I saw on reddit last year about someone implementing a bunch of algorithms like from TAOCP in redcode, but then I clicked the link again and saw it was him :D
16:21:25 <ais523> haha
16:21:34 <ais523> did you link him anyway?
16:21:36 <ais523> I would have
16:21:40 <ehird> haha, not that I recall
16:21:44 <impomatic> Where's that? ;-)
16:21:52 <ehird> impomatic: it just linked to impomatic.blogspot.com
16:22:02 <impomatic> I implement another ever now and again.
16:22:49 <ehird> org euclid+2
16:22:50 <ehird> euclid mod.ab #a, #b
16:22:50 <ais523> impomatic: I like your descriptions of esolangs, very clear
16:22:51 <ehird> mov.x euclid, euclid
16:22:53 <ehird> jmn.a euclid, euclid
16:22:55 <ehird> I didn't realise that was so simple
16:22:56 <impomatic> I ought to finish off Heap sort. It's about 70 instructions though, 4 times longer than anything else.
16:23:11 <impomatic> Quicksort and Combsort are both under 20 instructions
16:23:12 <ais523> how long is mergesort in redcode, I wonder?
16:23:32 <impomatic> I might tackle merge sort.
16:23:39 <ais523> I love redcode, actually, it's a sort of anti-esolang
16:23:46 <ehird> it occurs to me that sorting arrays is a pretty rare operation.
16:23:53 <impomatic> I haven't quite figured in-place mergesort
16:23:55 -!- Judofyr has quit (Remote closed the connection).
16:24:01 <ehird> and most of the time your values have a trivial mapping to integers, so you should just use one of the non-comparison sorts
16:24:04 <ehird> like, wossname, bucket sort?
16:24:21 <ais523> yep
16:24:41 <ais523> anyway, recently I was sorting a large list of words ordered by the words with letters sorted into alphabetical order
16:24:48 <ais523> sort of a lookup table for anagrams
16:24:50 <ehird> letters have a trivial isomorph to integers.
16:24:53 <ais523> so there are uses
16:24:53 <ehird> :P
16:24:56 <ais523> letters do, but words don't
16:25:00 <ehird> oh, true
16:25:06 <ais523> or, they do, but they're sufficiently large that bucket sort would be very inefficeint
16:25:07 <ehird> still, that's quite a rare cas
16:25:07 <ehird> e
16:25:09 <ais523> *inefficeint
16:25:24 <ehird> If I was making a standard library, I would have 'sort : (a -> int) -> [a] -> [a]'
16:25:35 <ehird> and 'genericSort : {comparable a} [a] -> [a]'
16:25:42 <ehird> or similar
16:27:34 <ehird> also, it turns out that strongly typing OOP duck-typing is easy.
16:27:48 <ehird> for instance:
16:27:49 <ehird> hello : 'a = {(+) : 'b -> 'c} -> 'b -> 'c
16:27:50 <ehird> hello a b = a + b
16:28:01 <ehird> trying to figure out how to do that with multi dispatch
16:29:03 <ais523> ehird: does that collapse into a '_a sort of type?
16:29:10 <ais523> or does it stay fully polymorphic?
16:29:18 <ehird> fully polymorphic
16:29:23 <ehird> assuming + is a message, ofc.
16:29:25 <ais523> pretty impressive
16:29:30 <ehird> ocaml pretty much does the same
16:29:32 <ais523> and yes, that's pretty clear from your syntax
16:29:42 <ehird> for multi dispatch, well, it's harder
16:29:45 <ehird> because you dispatch on all arguments
16:29:47 <ehird> here's my attempt:
16:30:07 * ais523 suddenly wonders what unassignable compiled into ocaml would look like
16:30:09 <ehird> hello : { (+) : 'a -> 'b -> 'c }. 'a -> 'b -> 'c
16:30:09 <ehird> hello a b = a + b
16:30:31 <ehird> so { } is a "context", basically meaning 'for the multi dispatch methods satisfying...'
16:30:44 <ehird> ais523: oh, I might try that
16:30:46 <ehird> wouldn't be hard
16:30:50 <ais523> I doubt it would be
16:33:25 <ehird> ais523: unfortunately,
16:33:25 <ehird> avg : { length : 'a -> 'b; (/) : 'b -> 'c -> 'd; sum : 'a -> 'c } 'a -> 'd
16:33:25 <ehird> avg lst = length lst / sum lst
16:33:31 <ehird> you pretty much end up repeating the function body
16:33:46 <ais523> that's to be expected
16:33:53 <ehird> OMG
16:33:59 <ais523> why the OMG?
16:34:00 <ehird> The new version of D
16:34:02 <ehird> is 100% open source
16:34:06 <ehird> fully buildable dmd
16:34:08 <ais523> wasn't the old version?
16:34:13 <ehird> ais523: not all of it
16:34:22 <ehird> the frontend and some of the backend, iirc
16:34:26 <ehird> but there was some code from other places
16:34:30 <ehird> that couldn't be relicensed
16:34:37 <ehird> but finally it's fully open source
16:37:50 <ehird> gr, this is irritating
16:42:47 <ehird> why is this brokennn
16:43:39 <ehird> Oh.
16:43:44 <ehird> Grah.
16:43:49 <ehird> Depends on gnu sed, I think.
16:44:03 <ehird> ifdef LIB_PACK_NAME
16:44:04 <ehird> FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | sed -e 's/^\(.\)/\U\1/')
16:44:06 <ehird> endif
16:44:09 <ehird> Why must people not test on BSD
16:44:39 <ais523> does BSD sed have arbitrary limits
16:44:51 <ehird> ais523: is that a reference
16:44:51 <ehird> ?
16:45:25 <ais523> that's a backrefence, yes
16:45:30 <ais523> I thought all seds did that, though
16:45:36 <ehird> i meant
16:45:41 <ehird> 16:44 ais523: does BSD sed have arbitrary limits
16:45:44 <ehird> is that a reference to something
16:45:49 <ais523> no, it isn't
16:46:01 <ehird> % sed -e's/^\(.\)/\U\1/'
16:46:01 <ehird> a
16:46:02 <ehird> Ua
16:46:04 <ais523> some old versions of sed couldn't handle more than a certain amount of text at once
16:46:08 <ehird> thus causing my Usexplib problem
16:46:25 <ais523> \U is a perlism for translating into uppercase, I wonder if GNU sed has it too?
16:46:34 <ehird> ah, yes
16:46:36 <ehird> definitely
16:46:39 <ehird> since it should be Sexplib
16:46:49 <ehird> now, I'd loathe to install gsed, and I can't modify omakefile
16:46:54 <ehird> err, ocamlmakefile
16:46:58 <ehird> so ... hm.
16:52:24 <ehird> ais523: any suggestions>
16:53:03 <ais523> write your own wrapper for sed that specifically traps that line, and put it higher up on your PATH?
16:53:27 <ehird> I would not be surprised to find more gstupidity.
16:53:42 <ais523> well, replace it with an s2p followed by perl layer, then
16:53:48 <ehird> Maybe I should create /usr/local/hell.
16:53:51 <ehird> Containing gnu tools.
16:53:52 <ais523> a sort of perl-sed which is more likely to be GNU-sed compatible
16:53:59 <ehird> And tell godi to put it on its path.
16:54:06 <ais523> you seem to really dislike gnu tools for some reason
16:54:07 <ais523> bloar/
16:54:09 <ais523> *bloat?
16:54:33 <ehird> I'd dislike them less if software didn't rabidly depend on them when I preferred bsd tools
16:54:52 <ehird> Sort of like how Windows would be a bad OS but not really that bad if it wasn't so ubiquitous
16:55:18 <ehird> [ehird:~] % s2p -e 's/^\(.\)/\U\1/' >x.pl
16:55:18 <ehird> [ehird:~] % perl x.pl
16:55:19 <ehird> sexplib
16:55:21 <ehird> Usexplib
16:55:27 <ais523> ugh
16:55:33 <ais523> that really is a bad sed script, then
16:57:24 <ehird> Hmm...
16:57:41 <ehird> install gsed as /opt/local/bin/sed, then alias sed='/usr/bin/sed' in zsh?
16:59:11 -!- BeholdMyGlory has joined.
17:00:16 -!- Judofyr has joined.
17:02:44 * ais523 is very impressed with impomatic's print-in-decimal code
17:03:38 <ais523> it's a pretty simple algorithm, just everything looks more impressive when written in redcode for some reason
17:03:43 <ehird> Is FP implemented?
17:03:51 <ais523> floating point, no
17:03:56 <ehird> Function Programming.
17:04:01 <ehird> Backus's apology for Fortran.
17:04:02 <ehird> http://en.wikipedia.org/wiki/FP_programming_language
17:04:05 <ais523> oh
17:04:21 * ais523 misread wikipedia as esolang somehow
17:04:24 <ehird> :D
17:04:47 <impomatic> ais523: which print in decimal algorithm? I think there are 3 on there. Recursive, interative, and one which can also do any number base
17:05:27 <ais523> the one in your forth program
17:05:32 <ais523> I was just shocked at how short it was
17:05:35 <ais523> in a lang looking like asm
17:05:39 <ais523> redcode does that to me
17:05:50 <ehird> redcode is far superior to x86...
17:05:53 <ehird> Scary.
17:06:04 <ais523> I imagine it would be a real pain to implement in hardware
17:06:26 <ehird> Conventional programming languages are growing
17:06:26 <ehird> ever more enormous, but not stronger. Inherent defects
17:06:27 <ehird> at the most basic level cause them to be both fat and
17:06:29 <ehird> weak: their primitive word-at-a-time style of program-
17:06:31 <ehird> ming inherited from their common ancestor--the von
17:06:33 <ehird> Neumann computer, their close coupling of semantics to
17:06:35 <ehird> state transitions, their division of programming into a
17:06:37 <ehird> world of expressions and a world of statements, their
17:06:39 <ehird> inability to effectively use powerful combining forms for
17:06:41 <ehird> building new programs from existing ones, and their lack
17:06:43 <ehird> of useful mathematical properties for reasoning about
17:06:45 <ehird> programs.
17:06:47 <ehird> Yikes, flood.
17:06:49 <ehird> Sorry.
17:06:51 <ehird> Didn't know PDF linebreaks were, y'know, real.
17:07:26 <ais523> pdf is a strictly presentational language
17:07:34 <ehird> Yeah.
17:07:35 <ehird> I hate pdfs.
17:07:40 <impomatic> x86 http://assemb.atspace.com/printdec.txt
17:07:41 <ais523> my client warns me about unexpected linebreaks in what I'm pasting, it's usual
17:07:48 <ehird> So does mine
17:07:52 <ehird> but it doesn't tell me how many
17:07:57 <ehird> just shows me a multi line edit form
17:07:57 <ais523> I mean, there are quite often unexpected linebreaks
17:08:02 <ehird> and I entered it away too quick
17:08:06 <ehird> impomatic: impressive
17:08:07 <ais523> and mine just gives me a line count with a yes/no option
17:08:26 <ehird> erm
17:08:27 <ehird> impomatic:
17:08:28 <ehird> call printdec
17:08:31 <ehird> shouldn't that be
17:08:32 <ehird> jmp printdec?
17:08:36 <ehird> it's a tail recursion...
17:08:58 <ais523> did impomatic write that one, I wonder?
17:09:04 <ehird> yes
17:09:04 <ais523> ah, yes
17:09:13 <ehird> the main page is in the style of corewar.co.uk, and his name is on it
17:09:28 <ehird> also, he's right here y'know
17:09:36 <ais523> yes, I nkow
17:09:41 <ehird> I nkow too
17:09:41 <ais523> I saw the name
17:09:46 <ais523> *know
17:09:53 <ais523> and was wondering if it was impomatic
17:09:56 <ehird> nkow: To nkep in a ow sort of way.
17:10:12 <impomatic> No, can't be changed to printdec. Yes, that's another of my pages! :-)
17:10:13 <ais523> that's, like, a double abbreviation
17:10:32 <ehird> hmm
17:10:42 <ehird> why can't call at a tail position be turned into a jump...?
17:10:54 <ehird> also, is that PUTCHAR for dos or linux or?
17:11:03 <ais523> ugh, the first Google result for nkep is actually the correct meaning
17:11:07 <impomatic> DOS
17:11:28 <ais523> although the fifth version is the one that actually defines it
17:11:29 <ehird> ais523: for me, it suggests nkdep, and shows the top two sesults for that
17:11:32 <ais523> *result
17:11:34 <ehird> before the agora results
17:11:39 <ais523> well, yes, but those don't count
17:11:55 <ais523> wow, http://jmcteague.com/mediawikiold/index.php?title=Nkep&redirect=no looks so much like vandalism
17:12:04 <ehird> [[So you are denying the existence of nonsensical action? Over 50
17:12:05 <ehird> million idiots in this world prove you wrong every day.]]
17:12:07 <ehird> --bobthj
17:12:11 <ais523> but "nkeplwgplxgioyzjvtxjnncsqscvntlbdqromyeyvlhkjgteaqnneqgujjpwcbyfrpueoydjjk" bears a strong resemblence to its actual definition
17:12:16 <AnMaster> impomatic, err, why does using DOS prevent you from jumping?
17:12:18 <ehird> I wonder what politically motivated thing he's referring to.
17:12:27 <ehird> AnMaster: SCROLLBACK.
17:12:32 <ehird> <ehird> also, is that PUTCHAR for dos or linux or?
17:12:35 <ehird> ais523: that isn't vandalism
17:12:36 <AnMaster> ah
17:12:38 <ehird> that's iammars's site
17:12:43 <ais523> ehird: I know
17:12:46 <ehird> ah
17:12:52 <ais523> that's why I said it /looked/ like vandalism
17:12:56 <ais523> even though I know it's probably not
17:13:04 <ais523> on the other hand, if someone did vandalism that string, would you ever know?
17:13:12 <ais523> *vandalise
17:13:14 <ehird> vandalism is a verb! :D
17:13:25 <impomatic> The routine builds a list of digits on the stack, which are then popped off and printed.
17:13:38 <ais523> ah, so it's non-tail recursin
17:13:50 <ehird> ah
17:13:54 <ehird> but
17:14:00 <ehird> hmm
17:14:02 <ehird> oh right
17:14:06 <ehird> you need call's stack effects
17:14:16 <impomatic> It can be made iterative, but that is 2 bytes longer.
17:14:36 <AnMaster> you could make an iterative one that iterates backwards. I wrote one, The max space you may need is rather trivial to calculate iirc.
17:14:39 * AnMaster looks for the code
17:15:13 <AnMaster> right. My code is for any base 0-36 and in C
17:15:18 <AnMaster> err
17:15:20 <AnMaster> 1-36
17:15:33 <ehird> .. the whole point is to be short.
17:15:49 <impomatic> Not bases <= 0 ? :-(
17:15:57 <ehird> minus bases rock
17:15:58 <ais523> everyone loves negative bases
17:16:05 <ais523> besides, bases 0-36 and in C is trivial
17:16:06 <AnMaster> http://rafb.net/p/o7Da1r12.html
17:16:08 <ehird> although you need negative digits
17:16:11 <ehird> -> negative strings
17:16:11 <ais523> because there's a standard library function for doing that
17:16:18 <ais523> umm.... 2-36, probably
17:16:23 <ais523> what does base 0 mean, anyway?
17:16:28 <ehird> AnMaster: http://pastie.org/408471
17:16:28 <ais523> even base 1 = unary is dubious
17:16:38 <AnMaster> ais523, I just followed BASE spec
17:16:39 <ehird> ais523: highly dubious, base 1 is useless
17:16:41 <ehird> it's all 0
17:16:48 <AnMaster> ehird, make an automatic rafb repaster bot
17:16:50 <ais523> ehird: agreed
17:16:50 <AnMaster> :P
17:16:58 <ehird> AnMaster: It'll do that, then spam you with messages.
17:17:04 <ehird> /notices, to be precise.
17:17:11 <ehird> Your choice
17:17:12 <AnMaster> ehird, I can ignore them easily
17:17:19 <AnMaster> *shrug*
17:17:22 <ehird> Not if it makes 100 clones over proxie.
17:17:23 <ehird> proxies.
17:17:29 <AnMaster> ehird, anyway, I need to paste from command line.
17:17:34 <AnMaster> as in wgetpaste
17:17:47 <ehird> so? you can script that trivially
17:17:50 <ais523> ehird: then we just get freenode to ban oyu
17:17:56 <ais523> for spamming someone with 100 proxies
17:17:57 <AnMaster> ehird, yes, I already have a working script
17:18:01 <AnMaster> ais523, indeed
17:18:01 <ehird> ais523: so I use a proxy :P
17:18:20 -!- Slereah has joined.
17:18:23 <ais523> AnMaster: you write hex in lowercase?
17:18:39 <AnMaster> ais523, why shouldn't I?
17:18:48 <ehird> ais523: negative bases digit sets use your negative strings
17:18:48 <ehird> :D
17:18:51 <ais523> no real reason, I'm just surprised
17:18:56 <ais523> ehird: haha!
17:19:01 <AnMaster> ais523, BASE is RC/Funge, so it isn't that well defined anyway
17:19:19 <ais523> what does it define bases 0 and 1 as?
17:19:38 <AnMaster> ais523, reflect iirc. in mycology BASE is *all* UNDEF
17:19:46 <ais523> hahahaha!
17:19:54 <ais523> so what's the point of testing it, then?
17:19:57 <ais523> to see what it does?
17:20:17 <AnMaster> ais523, yes, and it is partly UNDEF because there is no way the program can verify it itself
17:20:26 <AnMaster> since it only goes to output
17:21:00 -!- jix has quit (Connection timed out).
17:21:17 <AnMaster> ais523, anyway my implementation is CCBI compatible, though different code. IIRC CCBI used some D string format stuff which could do any base
17:21:32 <ais523> wow, is that underspecified
17:21:41 <ais523> "Output n in base b"
17:21:57 <AnMaster> ais523, well, it doesn't say iirc what range is valid
17:22:02 <ais523> no, it doesn't
17:22:06 <ais523> what I just wrote is the /entire definition/
17:22:12 <AnMaster> indeed
17:22:21 <AnMaster> ais523, and that could vary a lot
17:22:40 <AnMaster> base 2-16 are pretty well defined, by common practise. But apart from that...
17:22:54 <ehird> meh, that's not too unspecified
17:23:29 <impomatic> My 8086 code for IEEE multiplication is more accurate than my processor. The processor rounds incorrectly about 1 time in 3 billion
17:23:42 <AnMaster> impomatic, um, for specific values I guess?
17:24:07 <AnMaster> impomatic, also that isn't strange. x87 is using 80 bits internally
17:24:38 <AnMaster> impomatic, use SSE2 to do it, and you will get IEEE iirc
17:24:43 <impomatic> I didn't check the range of values... just ran it for a day and then compare some of the discrepancies.
17:25:18 <AnMaster> impomatic, this was using float or double?
17:25:23 <AnMaster> also what specific CPU?
17:25:26 <impomatic> I checked the results by hand and re-read the spec and it turns out the processor is wrong.
17:25:52 <AnMaster> as well as, what exact instructions were you using for the CPU floating point
17:26:11 <AnMaster> and what FPU flags did you have set... If you used x87
17:26:26 <ehird> yeah impomatic can remember all these minute details from years ago
17:26:28 <ehird> who can't
17:26:40 <AnMaster> I didn't know it was years ago
17:26:52 <ehird> he said 8086
17:26:58 <ehird> that's not very modern
17:27:10 <AnMaster> ehird, I know people using C64 for fun these days
17:27:18 <AnMaster> for nostalgia
17:27:19 <AnMaster> and such
17:27:27 <AnMaster> ehird, your point was?
17:27:36 -!- Slereah_ has quit (Connection timed out).
17:27:40 <ehird> 8086 isn't very nostalgaic
17:27:45 <ehird> it's just an old x86
17:27:50 <AnMaster> the first one
17:27:50 <ehird> nothing much special
17:27:56 <ais523> 8086 makes me nostalgic for the old versions of DOS
17:28:01 <AnMaster> see!
17:28:04 <ehird> that's DOS nostalgia
17:28:09 <ehird> not 8086 nostalgia
17:28:16 <impomatic> Intel Celeron 600Mhz, can't be more specific. Single precision.
17:28:16 <ais523> yes, I know
17:28:25 <AnMaster> ais523, wasn't it FOS back then rather?
17:28:28 <ais523> but the 8086 is a nostalgia-trigger for me
17:28:30 <ais523> AnMaster: ?
17:28:37 <AnMaster> Floppy Operating System
17:28:38 <impomatic> I prefer Z80
17:28:38 <AnMaster> ;P
17:28:46 <ehird> A floppy is a disk.
17:28:55 <AnMaster> impomatic, "Intel Celeron 600Mhz" != "8086"
17:28:56 <AnMaster> ...
17:29:05 <AnMaster> and then ehird's argument is even more void
17:29:07 <ehird> (So is an HD. A cd-rom is a disc though.)
17:29:14 <ehird> AnMaster: no, because that's even less special
17:29:21 <ehird> and so less nostalgiac
17:29:40 <AnMaster> ehird, I use a Pentium 3 as a file server.
17:29:49 <ehird> well, you're bonkers.
17:30:10 <AnMaster> ehird, No I'm just not rich
17:30:25 <ehird> yes but pentium 3?
17:30:38 <AnMaster> ehird, yes, I had one around. A waste to throw it away
17:30:39 <ais523> ehird: file servers don't need a fast processor
17:30:43 <ehird> true
17:30:48 <ehird> but a pentium 3 in _anything_...
17:30:52 <AnMaster> indeed. All it does is serve NFS from two IDE disks
17:30:58 <AnMaster> ehird, better than Pentium 4
17:31:02 <ais523> I think I have some even older computers lying around
17:31:08 <ais523> I've got a computer which used to run windows 3.1
17:31:14 <AnMaster> ais523, I have some old world macs.
17:31:18 <ais523> but both the Windows and the DOS on there have died to bitrot
17:31:23 <ehird> a pentium 3 isn't better than a pentium 4...
17:31:25 <AnMaster> well one pre-PPC
17:31:30 <AnMaster> ehird, it is. in fact.
17:31:36 <ehird> i disagree.
17:31:38 <AnMaster> ehird, consider the pipeline stall
17:31:44 <ehird> that's one aspect.
17:31:44 <AnMaster> see logs from today
17:32:19 <AnMaster> ehird, Pentium 4 also stalls badly at context switch
17:32:38 <AnMaster> just FYI
17:33:08 <impomatic> I have about 40 old computers lying around. Several Z80 computer (z80, amstrad, msx) a few 6502, 6809 machines, one 8085 and others I haven't got a clue about.
17:33:20 <impomatic> I have a Hektor II and a Cray OWS :-)
17:33:29 <AnMaster> oh and stalls a bit at syscall() too, it was worse when linux used interrupts, with 2.6 kernels it uses SYSENTER/SYSEXIT SYSCALL/SYSRET (forgot which is intel and which is amd)
17:33:39 <AnMaster> which stalls less badly on Pentium 4
17:34:03 <AnMaster> impomatic, CRAY! :D
17:34:19 <ais523> this laptop's a celeron M, I have no idea if that's good or bad
17:34:22 <AnMaster> ehird, in any case a P4 uses more power than a P3 too
17:34:31 <AnMaster> and finally
17:34:36 <AnMaster> I don't have a P4
17:34:47 <AnMaster> I did have one years ago. it overheated in the end
17:34:50 <ehird> i had a p4 way back.
17:34:50 <AnMaster> even with a huge fan
17:34:54 <ehird> it sucked!
17:34:59 <AnMaster> yes
17:35:02 <AnMaster> p4 sucks
17:35:05 <ehird> i also had 15 inches.
17:35:07 <ehird> of monitor, that is.
17:35:09 <AnMaster> ...
17:35:12 <AnMaster> afk food
17:35:18 <ehird> AnMaster: all my previous processors sucked too, though.
17:35:23 <ehird> the p4 was a mild improvement.
17:37:01 <ehird> Huh, I knew haskell in 2007.
17:39:08 <impomatic> The Cray isn't a supercomputer, although it's the size of a washing machine, has 12 huge fans and 8 processors.
17:39:21 <ehird> impomatic: However, it CAN execute an infinite loop in 6 seconds.
17:48:11 <GregorR> Sure, but so can your FACE.
17:48:29 <ehird> :'(
17:49:20 <ais523> ehird: 2 seconds according to answers.com
17:49:39 <ehird> no, 6
17:49:43 <ehird> was the original
17:49:59 <ais523> the same search let me find this: http://stackoverflow.com/questions/367571/detecting-infinite-loop-in-brainfuck-program
17:50:14 <ais523> which is interesting, and also contains some really stupid beliefs about infinite loops
17:50:22 <ais523> "EDIT: I do know that the halting problem is unsolvable in general, but I was not sure whether there did not exist special case exceptions. Like, maybe Matlab might function as a Super Turing machine able to determine the halting of the bf program. I might be horribly wrong, but if so, I would like to know exactly how and why."
17:50:43 <ehird> stack overflow is a hilarious cesspool of people with slightly less intelligence than jeff atwood
17:50:57 <ais523> that doesn't mean it can't be interesting, if maybe in a perverse sense
17:51:13 <ehird> "SECOND EDIT: I have written what I purport to be infinite loop detector. It probably misses some edge cases (or less probably, somehow escapes Mr. Turing's clutches), but seems to work for me as of now. In pseudocode form, here it goes:"
17:51:14 <ehird> x_x
17:51:23 <ehird> ais523: Interesting like a freakshow...
17:51:40 <ehird> " Call bfexec recursively with subprog"
17:51:42 <ais523> doesn't that fail on +[>+]?
17:51:43 <ehird> That will never go wrong.
17:51:46 <ehird> ais523: Yes.
17:52:39 <GregorR> Hahaha, that fails spectacularly :P
17:52:49 <GregorR> It'll also call this an infinite loop: +>++<[>]
17:53:07 <ais523> most of the answers are surprisingly sane
17:53:27 <ehird> The worst part is that you can actually have a good crack at a halting detector for BF, allowing for uncertainty for tricksy programs.
17:53:37 <GregorR> The sad part is, there /are/ specific cases where infinite loops are detectable, but this poor sap will never understand the distinction between "general" and "specific" at all :P
17:53:41 <ais523> I'd like to see a usually-right halting oracle for BF
17:53:43 <ehird> GregorR: snap
17:53:51 <ehird> ais523: not usually-right
17:53:59 <ehird> just right-a-good-portion-of-the-time-in-non-tricksy-cases
17:54:18 <ehird> http://research.microsoft.com/en-us/um/cambridge/projects/terminator/
17:55:32 <ais523> I still like the idea of being able to submit a program with an automatically verifiable proof it always halts
17:55:42 <ais523> or always spends a finite time between asking for input
17:55:47 <ais523> or something like taht
17:56:01 <ehird> also, the halting problem is neatly sidestepped by going slightly subturing
17:56:18 <ehird> enough to express most things, but you can only loop forever if given infinite input from the outside environment
17:56:36 <ehird> (if you want to run a program that requires infinite livelihood, pipe something like 'yes' to it)
17:56:43 <ehird> or rather, that'd be optimised out
17:56:46 <ehird> but that's the basic idea
17:57:34 <ehird> ais523: the last answer: "I have created a truly marvelous program to do this, which this textbox is too narrow to contain. "
17:58:55 <ehird> ais523: same user answered with befunge on another question
17:58:59 <ehird> http://stackoverflow.com/questions/62188/stack-overflow-code-golf/
17:59:05 <ehird> using '1' as a befunge stack overflow
18:00:02 <ais523> ?
18:00:12 <ehird> ais523: 1 pushes 1 to the stack
18:00:14 <ehird> then it loops
18:00:14 <ais523> you need to have a very small stack to do that
18:00:17 <ais523> oh
18:00:17 <ehird> so it pushes infinite 1s
18:00:19 <ais523> clever
18:00:20 <ehird> eventually overflowing the stack
18:00:22 <ais523> '1' not '1@;
18:00:25 <ais523> * '1@'
18:01:29 <ais523> that befunge solution is clever, even though it's a different sort of stack
18:01:47 <ais523> shortest stack overflow I can think of in INTERCAL is (1)DO(1)NEXT
18:01:55 <ais523> that beats most of the submissions there
18:02:31 <ehird> ais523: Ruby/Perl `$0`
18:02:41 <ais523> is that, technically speaking, a stack overflow?
18:02:43 <ehird> system stack overflow!
18:02:47 <ais523> it's an ingenious infinite recursion
18:02:50 <ais523> but it's overflowing something else I think
18:02:52 <ehird> ais523: yes, because `` returns a value
18:02:56 <ehird> you could do
18:03:04 <ehird> puts `$0` + " and " + `$0`
18:03:05 <ehird> in ruby
18:03:07 <ais523> yes, but it's a different stack each tiem
18:03:13 <ais523> ah, it's a number-of-stacks overflow
18:03:17 <ais523> a stack stack overflow!
18:03:17 <ehird> ais523: it's the stack of process children
18:03:19 <ais523> yep
18:03:20 <ehird> which is more of a tree
18:03:22 <ehird> but still
18:04:09 <ais523> someone wrote a compile-time soverflow in C++
18:04:11 <ais523> *overflow
18:04:16 <ais523> I don't think it's a stack overflow, though
18:04:20 <ehird> http://stackoverflow.com/questions/62188/stack-overflow-code-golf/63812#63812
18:04:24 <ehird> now _that's_ cool
18:04:25 <ais523> it's a type-complexity-overflow
18:04:55 <ais523> heh, that's ingenious, a non-looping stack overflow
18:05:08 <AnMaster> back
18:06:00 <ehird> grr, the Scheme submissions are stupid
18:06:03 <ehird> they're tailcalls
18:06:18 <ehird> and all Scheme standards mandate TCO
18:07:03 <ehird> irssi:
18:07:05 <ehird> /eval $L
18:07:13 <AnMaster> about infinite recursion. You can detect trivial cases of finite/infinite. In fact compiler do that to optimise better.
18:07:33 <AnMaster> GCC can warn you about loops it can't decide about
18:07:33 <ehird> thanks, we only said that 5 times before you.
18:07:33 <AnMaster> oh right
18:07:49 <AnMaster> ehird, I'm still reading scrollback. My comment memory is rather small
18:07:56 <AnMaster> so I can't wait until I read it all
18:08:02 <ehird> the IRC equivalent of ais523's agora posting
18:08:10 <ehird> except IRC lines are a lot easier to read ahead on..
18:08:58 <ehird> ais523: how do you declare something at the gprolog prompt?
18:09:00 <ehird> I forget
18:09:07 <ais523> use assert
18:09:13 <ais523> you need an extra pair of parens due to precedence
18:09:21 <ais523> but you write assert((head :- body)).
18:09:21 <ehird> uncaught exception: error(existence_error(procedure,assert/1),top_level/0)
18:09:27 <ais523> sorry
18:09:28 <ais523> assertz
18:09:38 <ais523> (or asserta to declare it at the start of the program)
18:10:09 <ehird> | ?- assertz((a(X) :- assertz(X))).
18:10:23 <ais523> did that work?
18:10:27 <ais523> I don't see why it wouldn't have
18:10:33 <ehird> it did
18:10:39 <ehird> ooh, another one small as the befunge one
18:10:40 <ehird> intel 4004
18:10:41 <ehird> CALL $
18:10:44 <ehird> -> ascii , 0101 0000
18:10:49 <ehird> a lot faster too :P
18:10:53 <ehird> http://stackoverflow.com/questions/62188/stack-overflow-code-golf/597372#597372
18:11:13 <ais523> a Prolog stack overflow would be a:-a,b.
18:11:18 <AnMaster> <ais523> a stack stack overflow! <-- possible in Funge-98.
18:11:25 <ais523> although you need to set compiler flags not to error on the undefined command b
18:11:25 <AnMaster> and in a different meaning
18:11:29 <ehird> ais523: or just
18:11:32 <ehird> p:-p
18:11:37 <ais523> that's tail-recursion
18:11:44 <ehird> gprolog doesn't optimize it
18:11:47 <ehird> Fatal Error: global stack overflow (size: 16385 Kb, environment variable used: GLOBALSZ)
18:11:53 <ais523> WOW IT IS RUBBISH
18:11:58 <ehird> LOL
18:12:04 <ais523> how can any prolog interp not optimise tail-recursion?
18:12:06 <ehird> that was unexpected
18:12:06 <AnMaster> if { can't allocate another stack in the stack-stack it is required to reflect though, so it doesn't fail at overflow
18:12:28 <ais523> it's the only general way to do looping in prolog
18:12:37 <ais523> apart from assert/retract in a backtrack loop, which is insanely ugly
18:12:38 <ehird> [ehird:~] % GLOBALSZ=-1 gprolog
18:12:38 <ehird> Fatal Error: global stack overflow (size: 1 Kb, environment variable used: GLOBALSZ)
18:13:00 <ehird> ais523:
18:13:04 <ehird> p :- print(hi), p
18:13:05 <ehird> works
18:13:06 <ehird> just not p :- p
18:13:30 <ehird> wait, no
18:13:32 <ais523> ok, that's even weirder
18:13:33 <ehird> it just takes longer to overflow
18:14:15 <ais523> anyway, gprolog's the only interp for any language I know of, other than OIL which doesn't count, which can crash because it's run out of strings
18:14:30 <ehird> hahahaha
18:14:30 <ais523> I mean, running out of strings is a dubious concept anyway
18:15:28 <AnMaster> ais523, it has a fixed size string pool?
18:15:37 <ais523> yes
18:16:24 <AnMaster> technically current erlang versions can run out of atoms. But the limit is a few millions iirc, and someone said it will most likely go away in the next major release
18:17:03 <AnMaster> + you can change the limit with some obscure command line option iirc
18:17:44 <AnMaster> "The maximum number of atoms is 1048576." (in R12B-5)
18:18:13 <AnMaster> http://www.erlang.org/doc/efficiency_guide/advanced.html#9.2
18:18:19 <ais523> ehird: try running setof(Property,atom_property(Atom,Property),PropertyList). at the gprolog repl
18:18:26 <ais523> and use ; to run through the results
18:18:29 <ehird> ... is that russel's paradox?
18:18:32 <ais523> no
18:18:38 <ais523> it returns the string pool, and data about it
18:18:43 <ehird> ha
18:18:52 <ais523> really amusing is that some of the strings in the pool are filenames on the computers where it was defined or edited
18:18:55 <AnMaster> ais523, that seems strange
18:19:01 <ehird> Atom = '/home/diaz/GP/src/src/BipsPl/dec10io.pl'
18:19:01 <ehird> PropertyList = [needs_quotes,hash(458243),length(39)] ?
18:19:18 <AnMaster> ais523, strange...
18:19:37 <ais523> AnMaster: GNU Prolog is crazily reflective
18:19:54 <ehird> | ?- setof(Property,X,Y).
18:19:54 <ehird> uncaught exception: error(instantiation_error,setof/3)
18:19:56 <AnMaster> yeah
18:19:56 <ehird> o_O
18:20:02 <ais523> even more so than the standard portable version, which is also crazily reflective
18:20:05 <ais523> ehird: why is that o_O?
18:20:10 <ehird> idungeddi
18:20:13 <ehird> t
18:20:21 <ais523> that's "for all commands, run that command and return the set of results"
18:20:31 <AnMaster> ais523, still don't you think running out of atoms is a bit funny?
18:20:36 <ais523> AnMaster: yes I do!
18:20:43 <ehird> 18:20 ais523: that's "for all commands, run that command and return the set of results"
18:20:43 <ehird> so?
18:20:45 <ehird> i tshould do it!
18:21:03 <ehird> would work in my language
18:21:04 <ehird> > x
18:21:06 <ehird> x = 0
18:21:07 <ehird> x = 1
18:21:09 <ehird> (forever)
18:21:13 <ehird> x = {}
18:21:15 <ehird> x = {0}
18:21:17 <ehird> x = {1}
18:21:18 <ehird> (forever)
18:21:20 <ehird> x = {0,0}
18:21:22 <ehird> (etc)
18:21:26 <AnMaster> ..
18:21:27 <ais523> most Prolog interpretations have some restrictions on what they can do
18:21:36 <ais523> insane things are very easy to write in Prolog
18:22:24 <ehird> I'd also have (crash = 1/0)
18:22:29 <ehird> for error reporting. :P
18:22:41 <ais523> surely running all commands would cause an exception before long?
18:22:48 <ehird> ais523: ooh, that's a good idea
18:22:49 <AnMaster> ais523, the reason erlang can run out of atoms currently is that for speed reasons it maps each atom to an integer internally. Type tagged in some way of course.
18:22:53 <ais523> in fact, how did you know it didn't work?
18:22:53 <ehird> then
18:23:00 <ais523> maybe the first command it ran caused an instantiation_error
18:23:07 <ais523> AnMaster: same reason in Prolog
18:23:15 <ais523> except the pool seems smaller
18:23:21 <ehird> isa(crasher(x), _)
18:23:25 <ehird> crasher is all functions
18:23:33 <ehird> although I'm not sure that would be valid code
18:24:03 <ehird> ah, no
18:24:05 <ehird> that'd just define x
18:24:06 <ehird> not crasher
18:24:08 <ais523> eval(_) should work
18:24:14 <ehird> eval(x) would work
18:24:16 <AnMaster> ais523, it also has some lookup table for it. Anyway the limit is too large for any sane program to hit. Oh and atoms are in the current version never removed from said table. Plans are to change that in the future.
18:24:18 <ehird> but it'd just evaluate boring things
18:24:19 <ehird> like ''
18:24:21 <ehird> '\0'
18:24:21 <ehird> etc
18:24:24 <ehird> you'd want
18:24:37 <AnMaster> ais523, that is garbage collect the atom ids.
18:24:39 <ehird> some sort of
18:24:49 <ais523> wow, it seems that Erlang copied some of the deficiencies of Prolog as well as some of its advantages
18:24:56 <ehird> isa(x,string); try(eval(x), 'error')
18:25:05 <AnMaster> ais523, How do you mean?
18:25:05 <ehird> note: cannot distinguish errors from programs outputting 'error' :P
18:26:09 <ehird> http://blog.wolfram.com/2009/03/05/wolframalpha-is-coming/ <- Puh leez.
18:26:13 <AnMaster> ais523, oh and erlang seems more useful in "real world". I mean from what I understood, and I may be wrong, Prolog is a bit like Scheme: both languages are very nice and such, but aren't very easy to use for anything practical.
18:26:19 <AnMaster> at least in a portable way
18:26:34 <ehird> "You've got a Turing complete language and a toy model of complexity. That oracle will practically write itself!" --reddit.
18:26:52 <ehird> scheme is very practical.
18:26:57 -!- olsner has joined.
18:26:58 <ehird> just not for networked applications, or the like.
18:27:15 <ehird> there are plenty of standalone, {file,keyboard}-to-{file,stdout} programs
18:28:05 <ehird> ais523: "We're making early access available to a few select individuals. Contact us for information »"
18:28:05 <Slereah> I will totally write "dong" in it
18:28:11 <ehird> you must apply :P
18:28:17 <AnMaster> um
18:28:21 <AnMaster> what is NKS?
18:28:27 <AnMaster> in that link ehird posted
18:28:35 <ehird> new kind of science, Wolfram's ego in book form.
18:28:44 <AnMaster> ah
18:28:44 <AnMaster> right
18:29:00 <ehird> although the classification book is more generous, let's say "dead tree".
18:29:07 <ehird> s/more/too/
18:29:25 <Slereah> Oh you.
18:31:05 <ehird> http://www.theonion.com/content/node/34168
18:31:24 <AnMaster> <ehird> http://blog.wolfram.com/2009/03/05/wolframalpha-is-coming/ <- Puh leez. <-- so, what do you think about it?
18:31:48 <ehird> AnMaster: Wolfram is pioneering his revolutionary new "Masturbate direct to a web page" technology.
18:32:03 <AnMaster> ehird, cuil fail?
18:32:13 <ehird> Oh, cuil is at least amusing.
18:32:18 <ehird> This will probably just be pathetic.
18:32:21 <AnMaster> ah
18:32:57 <ais523> I actually knew it was coming, but had to keep it a secret
18:33:14 <Slereah> Really, reading about it
18:33:23 <Slereah> It sort of reminds me of EsCo :o
18:33:26 <Slereah> Iunno why
18:33:29 <ehird> ais523: LOL, since when
18:33:33 * impomatic wonders why the corewar subreddit has been banned :-(
18:33:38 <ehird> impomatic: o_O it has?
18:33:39 <ais523> for ages
18:33:44 <Slereah> Let's torture ais523 for more secrets
18:33:53 <ehird> ais523: how could you keep the excitement in you?!
18:34:07 <AnMaster> ais523, how did you know about it?
18:34:18 <AnMaster> Slereah, good idea
18:34:30 <ais523> one of the wolfram people was talking to me and showing it off
18:34:37 <ais523> I even suggested a couple of changes
18:34:40 <Slereah> So... what does it do?
18:34:48 <AnMaster> ais523, does it fail badly?
18:34:48 <ehird> Slereah: it searches KNOWLEDGE ITSELF!!!!!!!1111111
18:34:50 <ais523> read the wolfram blog description
18:34:58 <Slereah> So it's wikipedia?
18:35:01 <ais523> no
18:35:02 <AnMaster> :D
18:35:09 <impomatic> http://www.reddit.com/r/corewar/
18:35:11 <AnMaster> ais523, it actually works?
18:35:16 <ehird> it's like wikipedia but useless!
18:35:21 <AnMaster> ais523, it works well?
18:35:28 <ehird> impomatic: I'd try the feedback
18:35:29 <ais523> it's not really like wikipedia
18:35:34 <ais523> it's more like google calculator + insane
18:35:41 <ehird> + ego
18:35:49 <AnMaster> ais523, so is it fail or not?
18:35:58 <ehird> impomatic: you could start a new one called "raweroc" or something temporarily
18:36:11 <ehird> AnMaster: its failure status is covered by his NDA.
18:36:19 <ais523> why was corewar reddit banned, anyway/
18:36:24 <AnMaster> ehird, he didn't say so
18:36:25 <ehird> that;'s what he's asking
18:36:28 <ehird> AnMaster: it was a joke
18:36:44 <AnMaster> ehird, which line was a joke
18:36:44 <ais523> I didn't actually sign an NDA, it was an informal agreement
18:36:54 <ehird> 18:36 ehird: AnMaster: its failure status is covered by his NDA.
18:36:57 <ais523> but I didn't really see enough to tell much more about it than what's been announced
18:37:07 <impomatic> :-)
18:37:10 <ehird> ais523: with less hyperbole, I assume?
18:37:15 <AnMaster> ehird, ah ok. "It" could have meant one of ais523's comments too
18:38:13 <ehird> ais523: so, is it fail?
18:39:02 <ais523> you'll see
18:39:29 <ehird> you'd think that'd be a vague enough question to answer
18:39:45 * AnMaster agrees with ehird
18:39:49 <ais523> "All one needs to be able to do is to take questions people ask in natural language, and represent them in a precise form that fits into the computations one can do."
18:39:55 <ais523> from the Wolfram blog
18:40:07 <AnMaster> ais523, yes, that implies fail
18:40:12 <ehird> ais523: so it takes mathematica expressions?
18:40:15 <ehird> and EVALUATES THEM?!
18:40:15 <AnMaster> :D
18:40:27 <ais523> ehird: it is certainly capable of doing that
18:40:27 <ehird> holy shiiiiiiii
18:40:32 <AnMaster> wow
18:40:35 <ehird> can it make toast
18:40:39 <ehird> if it can, I'm sold
18:40:47 <AnMaster> will it cost money?
18:40:49 <AnMaster> or be free
18:40:54 <ehird> both
18:41:05 <ais523> no idea about that, they changed the name since I last saw it
18:41:07 <AnMaster> where did it say that?
18:41:13 * AnMaster looks for it in the blog
18:41:14 <ehird> what was it called? AMAZINGWIN?
18:42:14 <ais523> anyway, the biggest clue about what they expect it to be used for is "But if one’s already made knowledge computable, one doesn’t need to do that kind of natural language understanding.", I think
18:42:26 <ais523> or maybe "Pulling all of this together to create a true computational knowledge engine is a very difficult task."
18:42:32 <ehird> what the fuck does that mean
18:42:37 <ehird> it's so vague scigen could have made it
18:42:44 <AnMaster> scigen?
18:42:47 <ehird> http://en.wikipedia.org/wiki/SCIgen
18:43:14 <ais523> "Let’s say we succeed in creating a system that knows a lot, and can figure a lot out." is maybe an even better description
18:43:35 <ehird> ais523: they created strong AI?
18:43:43 <ehird> Enslaved 5 thousand chinese teenagers to answer the queries?
18:43:52 <ais523> nah
18:44:05 <ehird> Wolfram personally answers all input?
18:44:18 <ais523> anyway, they probably had a reason for not telling anyone what the hell it's about, so I'll shut up now
18:44:40 <Slereah> Get the thumbscrews, we'll get the truth out of him!
18:44:59 <ehird> ais523: I'm pretty sure the reason was "Wolfram is a megalomaniac theater director"...
18:44:59 <ais523> either that, or they just have insanely bad marketing
18:45:45 <ais523> yep, a web search about it reveals people saying, "that's too vague, it must just be an appetiser"
18:46:19 <AnMaster> wait
18:46:20 <ehird> http://motls.blogspot.com/2009/03/wolframalpha-central-brain-of-mankind.html
18:46:23 <ehird> "central brain of mankind"
18:46:23 <AnMaster> that sounds like Apple
18:46:23 <ehird> XDDD
18:46:29 <AnMaster> about future products
18:46:30 <AnMaster> vague
18:46:36 <AnMaster> rumors
18:46:43 <ehird> AnMaster: apple are _silent_ about future products, except via rumours
18:46:49 <AnMaster> ehird, ok true
18:46:52 <AnMaster> that is a difference
18:46:53 <ehird> and most often those rumours are ridiculously precise
18:47:05 <AnMaster> ehird, you mean intentionally leaked?
18:47:16 <ehird> possibly :P
18:48:22 <ehird> ais523: one question -- is it actually something new that works?
18:48:26 <ehird> surely that's vague enough to answer...
18:48:40 <ais523> that blog: "Once you'll be able to open www.wolframalpha.com, it will be ready to convert every question of yours, formulated in a natural language, into a well-defined computational format that represents the natural language."
18:48:48 <ehird> it's a NLP?
18:48:58 <ehird> English -> Mathematica...
18:48:59 <ehird> ?
18:49:02 <ais523> and "The Central Brain of Mankind will search all (so far only millions of lines of) possible algorithms, methods, statements, and all (so far only trillions) of curated data that exist on the Internet, combine them and recombine them in all conceivable ways, and answer your question."
18:49:07 <ais523> ok, I think that's clear enough
18:49:20 <ehird> it's clear if you deal in marketing bullshit and vagueities
18:49:28 <ais523> it compiles English into Mathematica, and then combines it with a massive database
18:49:42 <ehird> right, right, nothing special
18:49:48 <ais523> plus a few other miscellaneous things which probably they've dropped by now because they struck me as ridiculous ideas at the time
18:49:50 <AnMaster> wait
18:49:55 <ehird> specifically, the NLP is probably awful
18:49:56 <ais523> but they haven't been mentioned yet so I won't tell
18:49:57 <AnMaster> quantum computer?
18:49:57 <ehird> like terrible awful.
18:50:00 <ais523> AnMaster: no
18:50:04 <AnMaster> "combine in all possible ways"
18:50:19 <AnMaster> surely only a quantum computer could do that for such a large data set
18:50:25 <ehird> are they renting out google's servers? :P
18:51:08 <AnMaster> ehird, the TLA NLP means?
18:51:14 <AnMaster> (in this context)
18:51:24 <ehird> natural language probes.
18:51:28 <ehird> except with a different p
18:51:30 <AnMaster> probes?
18:51:32 <AnMaster> ah
18:51:33 <ehird> which I'm sure you can deduce
18:51:35 <AnMaster> processor?
18:51:37 <ehird> (hint: it's "parsing")
18:51:41 <AnMaster> ah
18:52:22 <AnMaster> wait, if this uses the internet, then the data isn't verified correct is it?
18:52:34 <AnMaster> that is one reason it will fail
18:52:41 <AnMaster> you won't know what is true and what is false
18:53:03 <ais523> I don't know where the dataset comes from
18:53:13 <AnMaster> ais523, btw, how comes you were told about this?
18:53:26 <ehird> he won the prize
18:53:32 <ais523> AnMaster: someone working on it was interviewing me
18:53:32 <ehird> presumably wolfram have spammed him ever since
18:53:35 <ais523> and decided to show it off
18:53:49 <AnMaster> mhm
18:54:00 <AnMaster> ais523, what did you say the name was back then?
18:54:07 <ais523> I didn't
18:54:13 <ais523> and there were at least two possibilities
18:54:17 <ais523> but they didn't choose either
18:54:24 <ais523> besides, does Wolfram's internal codename for something matter/
18:54:29 <AnMaster> would it hurt revealing them?
18:54:34 <ais523> probably
18:54:39 <AnMaster> oh?
18:54:40 <AnMaster> why?
18:54:55 <ehird> he was told not to.
18:54:55 <ais523> because there's no reason anyone should know it, really, and they might have a reason for people not to know it?
18:55:04 <ehird> err, what possible reason?
18:55:06 <AnMaster> mhm ok
18:55:19 <ais523> I don't know of a reason, but I don't specifically know that there isn't
18:55:30 -!- Judofyr_ has joined.
18:55:42 <AnMaster> we could help you find out ;P
18:56:02 <ehird> using wolfram|alpha
18:56:12 <ehird> "PARSE ERROR"
18:56:16 <ehird> "**RESET**"
18:56:17 <ehird> ""
18:57:01 <Slereah> :D
18:57:04 <ais523> actually, so ask it that when it does come out, I'd be amused to see the reply
18:57:18 <Slereah> Or "HOW IS BABBY FORMED"
18:57:25 <AnMaster> why in upper case?
18:57:31 <ehird> AnMaster: It's 80s technology!
18:57:39 <Slereah> Because capslock is cruise control for cool
18:57:42 <ehird> "GO TO HELL"
18:57:44 <AnMaster> ehird, wrong. It's because it is a REAL QUERY LANGUAGE
18:57:47 <ehird> "**RESET**"
18:58:17 <ais523> people typing with caps lock on should do it in lowercase
18:58:29 <ais523> this message and the previous were typed using caps lock
18:58:31 <Slereah> It's the next best thing to knowing how to use a search engine!
18:58:37 <AnMaster> ais523, shift
18:58:43 <ais523> yes, I know, that was obvious
18:59:31 <AnMaster> I think my old mac didn't lower case on shift + caps lock
19:00:02 <AnMaster> it only caused the non-letter keys to change (they were unaffected by caps lock)
19:00:06 <ehird> new macs don't either
19:00:10 <AnMaster> hm ok
19:00:24 <AnMaster> ehird, why? And I assume apple have a reason to change it?
19:00:27 <AnMaster> err
19:00:34 <AnMaster> have an option to change it*
19:00:48 <ehird> AnMaster: because if you hit the shift key instinctively for new sentences, yOU DON'T LOOK LIKE THIS. sEE?
19:00:50 <AnMaster> (never try writing two different things at once)
19:00:58 <ehird> also, no, it's not an option, it's a rather trivial thing really
19:01:12 <AnMaster> ehird, oh, like there is no option to change font
19:01:20 <ehird> what
19:01:33 <AnMaster> ehird, you can't change font size in Tiger iirc
19:01:42 <AnMaster> or was it typeface you couldn't change
19:01:45 <AnMaster> anyway, one of them
19:01:47 <AnMaster> for menus and such
19:02:05 <ehird> You know, your valid OS criticisms would be listened to more if you didn't say ridiculous vague things that on the mostpart aren't even legitimate criticisms.
19:02:10 <ehird> You do that with Windows too...
19:02:19 <AnMaster> ehird, err see above
19:02:22 <AnMaster> I did clarify
19:02:45 <AnMaster> as far as I remember you can't change either font, or size, in the menus in OS X 10.4
19:02:52 <AnMaster> I may be wrong
19:02:57 <AnMaster> since I don't use OS X often
19:03:03 <AnMaster> and if I am, please tell
19:03:20 <ehird> "the font"
19:03:22 <ehird> so very specific
19:03:30 <AnMaster> ehird, how is it unspecific?
19:03:52 <AnMaster> Change to Helvetica in the Apple Menu using the settings panels in OS X
19:03:53 <AnMaster> how
19:03:55 -!- jix has joined.
19:03:59 <AnMaster> or if it is Helvetica
19:04:02 <AnMaster> change it to Times
19:04:06 <ehird> oh, in the actual system.
19:04:09 <ehird> no, you can't do that.
19:04:14 <AnMaster> ehird, yes menus
19:04:17 <AnMaster> how was it vague
19:04:17 <ehird> well, you can.
19:04:18 <AnMaster> it wasn't
19:04:33 <AnMaster> ehird, not documented with standard tools
19:04:33 <ehird> using tinkertools
19:04:39 <ehird> AnMaster: so?
19:04:44 <ehird> who gives a shit apart from you?
19:05:14 <AnMaster> ehird, some old people can't see very well for example
19:05:19 <AnMaster> they would need larger font
19:05:20 <ehird> you can make fonts bigger.
19:05:32 <AnMaster> ehird, and possibly a clearer type
19:05:34 <AnMaster> typeface*
19:05:41 <ehird> lucida grande is very clear.
19:06:17 <AnMaster> ehird, for example I read recently there are some type faces optimised for people who are dyslectics. I don't think lucida grande is, but I may be wrong
19:06:36 <ehird> if I was dyslexic I'd probably use the speech features
19:06:48 <AnMaster> ehird, sure. But can you get it to read the menus?
19:06:55 <ehird> yes.
19:06:57 <ehird> everything
19:07:10 <ehird> blind people can use OS X just fine
19:07:23 <AnMaster> ehird, What about speech-to-text?
19:07:27 <ehird> yes
19:07:31 <ehird> it does speech recognition
19:07:33 <ehird> I've tested it
19:08:08 <AnMaster> I tried it. "Open Safari." *firefox opens*. "Close window." *system preferences pops up*
19:08:08 <AnMaster> and so on
19:08:15 <AnMaster> + it isn't available in Swedish
19:08:19 <ehird> works for me.
19:08:19 <AnMaster> only in English
19:08:24 <ehird> maybe your voice is unclear.
19:08:42 <AnMaster> ehird, still neither TTS or STT is available in Swedish
19:08:45 <AnMaster> in OS X
19:09:03 <ehird> oh well, swedes are dirty anyway. who cares about them.
19:09:28 <AnMaster> if you are trying to be funny you aren't succeeding
19:09:30 <AnMaster> bbl
19:09:48 <ehird> err, do you realise who you are? i could say that every time you speak :D
19:09:54 -!- Hiato1 has joined.
19:13:06 -!- Judofyr has quit (Read error: 110 (Connection timed out)).
19:13:36 <ehird> i wonder if snobol still exists
19:16:13 -!- Hiato1 has quit ("Leaving.").
19:20:12 <tombom> i love weird languages when people actually use them for real programs
19:20:35 <ehird> like java
19:20:40 <ais523> practical esolanging is always fun
19:20:53 <ais523> tombom: who are you, by the way?
19:20:58 <ais523> I don't think I've seen you here before
19:21:48 <tombom> oh nobody special, i'm new here
19:22:23 <ais523> what are you interested in, esolang-wise?
19:23:04 <fizzie> State-of-the-art text-to-speech in Finnish sounded better than I remembered it doing. (Some EU project people asked our speech group to answer a web-based speech synthesis listener-evaluation thing.)
19:23:13 <tombom> nothing special, i'm not massively into it. it's something interesting to code and i find the concepts pretty clever
19:24:49 <fizzie> Oh, and there was one hilarious section, where they had the speech synthesizer read completely nonsense sentences, because the aim in that part was just to evaluate isolated-word intelligibility, and context would've helped if it were real text. I'd paste some of the examples if they weren't in Finnish.
19:25:07 <ais523> ^ul (aS(:^)S):^
19:25:08 <fungot> (aS(:^)S):^
19:25:33 <ais523> ^ul ((^ul )SaS(:^)S):^
19:25:33 <fungot> ^ul ((^ul )SaS(:^)S):^
19:26:15 <impomatic> :-)
19:27:02 <impomatic> I keep meaning to add keymaker's quine to my underload page
19:28:31 <ais523> Underload is such a good language for quines
19:28:56 <fizzie> A more impolite person might, at this juncture, remark something about that being all it's good for. :p
19:29:12 -!- Hiato has quit (Read error: 110 (Connection timed out)).
19:29:15 <ehird> ^ul ((+ul )SaS(:^)S):^
19:29:15 <fungot> +ul ((+ul )SaS(:^)S):^
19:29:25 <ehird> Dog nabbit
19:29:31 <ehird> Ooh.
19:29:36 <ehird> If ! was the char for two interps
19:29:41 <ehird> then !ul ((!ul )SaS(:^)S):^
19:29:42 <ehird> would be a forkbomb
19:30:06 <ais523> if an interp can handle writing newlines
19:30:12 <ais523> then you could forkbomb even with different chars
19:30:18 <ais523> EgoBot used to be able to output newlines...
19:30:26 <ehird> I miss Egobot. <3
19:30:30 <ehird> GregorR: Psst.
19:31:13 <fizzie> Someone should golf the +ul/^ul loop shorter; I don't think I've seen shorter than
19:31:16 <fizzie> ^ul (^ul )(+ul )(~:SaS~aSaS(:^)S):^
19:31:16 <fungot> +ul (+ul )(^ul )(~:SaS~aSaS(:^)S):^
19:31:28 <ais523> that's the shortest symmetrical one I know
19:31:38 <ais523> asymmetrical can be shorter
19:32:15 <ehird> asymmetrical?
19:32:29 <ais523> as in, one just tells the other to run a cat with its own source code
19:32:35 <fizzie> ^ul (^)(+)(~:S(ul )SaS~aSaS(:^)S):^
19:32:35 <fungot> +ul (+)(^)(~:S(ul )SaS~aSaS(:^)S):^
19:32:44 <fizzie> That seems to have the same amount of chars.
19:32:45 <ais523> ah, clever
19:33:19 <ehird> ^ul (+ul butts)S
19:33:20 <fungot> +ul butts
19:33:26 <ehird> ^ul ((+ul butts)S)^
19:33:26 <fungot> +ul butts
19:33:40 <ehird> ^ul ((+ul )SS):a~^
19:33:40 <fungot> +ul ((+ul )SS)
19:34:02 <ehird> Someone may continue.
19:35:51 <ais523> ^ul ((+ul )Sa(^ul )~*(:^)*a(S)*S):^
19:35:51 <fungot> +ul (^ul ((+ul )Sa(^ul )~*(:^)*a(S)*S):^)S
19:36:04 <ais523> is that shorter?
19:36:07 <ais523> that's an asymmetrical one
19:36:17 <ehird> hoorah
19:36:35 <fizzie> It seems to again have the same amount, heh.
19:37:13 <ehird> Maybe it's the THEORETICAL LIMIT
19:38:22 <ais523> well, there must be a theoretical limit
19:39:08 <ehird> ^ul ((+ul )SS):^
19:39:08 <fungot> +ul (+ul )SS
19:39:13 <ehird> ^ul ((+ul )SaS):^
19:39:14 <fungot> +ul ((+ul )SaS)
19:39:18 <ehird> ^ul ((+ul )SaS(:^)S):^
19:39:19 <fungot> +ul ((+ul )SaS(:^)S):^
19:39:26 <ehird> Almost, almost
19:39:30 <ehird> ^ul ((+ul )SaS(S)S):^
19:39:30 <fungot> +ul ((+ul )SaS(S)S)S
19:39:34 <ais523> you have to get it to prefix with ^ul when the +ul program is run, though
19:39:41 <ais523> so the ^ has to end up somewhere in the result
19:39:47 <ehird> oh, right
19:39:48 <ehird> darn
19:40:11 <fizzie> Yes, about outputting newlines to fork-bomb; underload is very difficult for that, since you can hardly input newlines in IRC.
19:40:31 <ais523> Underlambda will likely have sugar for output-newline
19:41:27 <ehird> ^ul (
19:41:27 <fungot> ...unterminated (!
19:41:28 <ehird> )S
19:41:37 <ehird> Bah, it should keep reading the IRC lines following.
19:41:38 <ais523> ^ul .
19:41:39 <fungot> ...bad insn!
19:41:44 <ais523> ^ul ...bad insn!
19:41:44 <fungot> ...bad insn!
19:41:51 <ehird> kimian
19:41:55 <ais523> Kimian quines FTW
19:42:07 <ehird> ^ul (...bad insn!)S
19:42:07 <fungot> ...bad insn!
19:42:17 <ehird> ^ul ((a)~:^):^
19:42:19 <fungot> ...out of time!
19:42:47 -!- Slereah_ has joined.
19:43:26 -!- impomatic has changed nick to ^ul.
19:43:40 <^ul> Hmmm...
19:43:45 <ehird> ^ul (hi!)S
19:43:45 <fungot> hi!
19:44:19 <fizzie> ^ul (:aSS:^):aSS:^ ...out of stack!
19:44:19 <fungot> (:aSS:^):aSS:^ ...out of stack!
19:44:41 <ehird> :DD
19:44:49 <ehird> beautiful
19:45:15 <fizzie> ^ul (:aSS(:^):^):aSS(:^):^ ...out of time!
19:45:15 <fungot> (:aSS(:^):^):aSS(:^):^ ...out of time!
19:45:27 <fizzie> The sense, it has none.
19:45:40 <ehird> ^ul S
19:45:40 <fungot> ...out of stack!
19:45:46 <ehird> Hmm.
19:45:50 <ehird> Shouldnt' that say underflow?
19:46:29 <ehird> ^ul ^
19:46:29 <fungot> ...out of stack!
19:48:02 <fizzie> Hm.
19:48:04 <fizzie> Yes.
19:48:27 <ehird> ^ul (:S^):S^
19:48:27 <fungot> :S^ ...out of stack!
19:48:44 <ehird> ^ul (::S^)::S^
19:48:44 <fungot> ::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^::S^ ...too much output!
19:48:54 <fizzie> Oh yes, that's the underflow message.
19:48:59 <ehird> ^ul (:::aSS^):::aSS^
19:49:00 <fungot> (:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(:::aSS^):::aSS^(::: ...too much output!
19:49:06 <ehird> ^ul (:::aSS^ ):::aSS^
19:49:06 <fungot> (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ (:::aSS^ ):::aSS^ ...too much output!
19:49:20 <ehird> ^ul (:::aSS^. In case you missed that: ):::aSS^
19:49:21 <fungot> (:::aSS^. In case you missed that: ):::aSS^. In case you missed that: (:::aSS^. In case you missed that: ):::aSS^. In case you missed that: (:::aSS^. In case you missed that: ):::aSS^. In case you missed that: (:::aSS^. In case you missed that: ):::aSS^. In case you missed that: (:::aSS^. In case you missed that: ):::aSS^. ...too much output!
19:49:37 <fizzie> ^ul (foooooo)(~:*~:^):^
19:49:37 <fungot> ...too much stack!
19:49:45 <fizzie> There's the stack overflow message, too.
19:50:16 <ehird> ^ul (butts)(:*S):^
19:50:17 <fungot> :*S:*S
19:50:21 <ehird> ^ul (butts)(*S):^
19:50:21 <fungot> butts*S
19:50:36 <ehird> ^ul (butts)(~*S):^
19:50:36 <fungot> ~*Sbutts
19:50:43 <ehird> ^ul (butts)(~*:S:^):^
19:50:44 <fungot> ~*:S:^butts ...out of stack!
19:51:05 <fizzie> fungot: What exactly do you mean with "butts out of stack"?
19:51:06 <fungot> fizzie: probably chicken or gambit. i think you're supposed to smile and notice i was only joking... also im sure it'll be the best way
19:51:18 <ehird> :D
19:52:11 -!- Slereah has quit (Read error: 110 (Connection timed out)).
19:53:11 -!- Asztal has quit (Remote closed the connection).
19:53:53 -!- Asztal has joined.
19:58:04 <ehird> http://funcall.blogspot.com/2009/03/not-lisp-again.html
19:58:58 -!- Asztal has quit (Remote closed the connection).
19:59:01 -!- Asztal has joined.
20:05:47 <ehird> back in ~1hr
20:08:07 -!- ^ul has quit ("spl #0,0 / mov.i #1,1").
20:11:10 -!- Judofyr_ has changed nick to Judofyr.
20:15:41 <AnMaster> back
20:18:02 -!- ais523 has quit (Remote closed the connection).
20:19:53 <AnMaster> <ais523> Kimian quines FTW <-- ?
20:20:14 <AnMaster> ehird, what are those?
20:25:00 <MizardX> An error message which produces itself when run.
20:31:42 <MizardX> ^ul ( )(*)(~:S:*a~a~*~a*^:Sa~a*~a*^:^):^
20:31:43 <fungot> * ** **** ******** **************** ******************************** **************************************************************** ******************************************************************************************************************************** ************************************************************* ...too much output!
20:33:51 <comex> btw
20:33:53 <comex> http://www.int80h.org/strlen/
20:39:16 <MizardX> ^ul (*)()(a~a*~a*^:S( )S:a~a*~a*^*a~a*~a*^:^):^
20:39:17 <fungot> * * ** *** ***** ******** ************* ********************* ********************************** ******************************************************* ***************************************************************************************** ********************************************************************************* ...too much output!
20:48:03 -!- tombom has quit ("Peace and Protection 4.22.2").
21:07:33 <AnMaster> ah
21:26:42 <AnMaster> comex, modern libc uses highly optimised strlen()
21:27:18 <AnMaster> for example glibc has different very fast optimised ones for i486, i586, i686 and so on
21:27:46 -!- Judofyr has quit (Remote closed the connection).
21:27:50 <AnMaster> scasb isn't fastest on modern x86
21:28:01 <AnMaster> rather a much more complex SIMD using variant is iirc
21:28:08 <comex> o_o
21:28:20 <comex> also, FUCK THIS
21:28:27 <AnMaster> comex, fuck what?
21:28:35 <comex> I just tried to watch an episode of the daily show and it showed me about 5 30-second ads
21:28:47 <AnMaster> huh
21:28:53 <comex> on their website
21:28:54 -!- MigoMipo has quit ("QuitIRCServerException: MigoMipo disconnected from IRC Server").
21:28:56 <AnMaster> fast forward?
21:29:00 <comex> you can't
21:29:06 <comex> after the end of one of them, I forgot to unmute in time, so I tried to go back ten seconds
21:29:35 <comex> I accidentally went back before the break, so it gave me a commercial and then I watched the last few seconds of the last part
21:29:48 <comex> after that, it gave me another commercial
21:30:03 <comex> and then I finally got to watch the show
21:30:06 <AnMaster> comex, anyway asm hacks for stuff like strlen, memcpy and so on are stupid on modern systesm
21:30:08 <AnMaster> systems*
21:30:19 <comex> why?
21:30:26 <AnMaster> because the libc includes highly optimised variants
21:30:27 <AnMaster> !
21:30:29 <AnMaster> as I said above
21:30:35 <AnMaster> using libc will be faster!
21:30:36 <comex> doesn't that count as asm hacks :p
21:30:41 <comex> just not ones you make yourself
21:30:43 <AnMaster> comex, not in your code
21:31:05 <comex> mmmm, not enough benefit in inlining? what if you call $function a million times
21:31:16 <AnMaster> comex, also your code will be more portable, you don't need one asm hack for x86, one for PPC and so on.
21:31:22 <AnMaster> as libc provides each
21:31:27 <AnMaster> comex, glad you asked
21:31:42 <AnMaster> comex, gcc has a builtin one anyway that it uses when possible
21:31:59 <AnMaster> so libc one actually only ends up used when you do stuff that needs the function to be called
21:32:03 <AnMaster> like function pointers
21:32:14 <AnMaster> or when you use -O0
21:32:21 <AnMaster> or possible sometimes else
21:32:36 <AnMaster> comex, for constant string literals, gcc will compute length at compile time
21:32:55 <comex> hmm
21:33:50 <AnMaster> comex, http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Other-Builtins.html#Other-Builtins
21:33:56 <AnMaster> that is a LOT of them
21:34:16 <AnMaster> comex, and there are other pages with other categories
21:34:23 <AnMaster> like vector builtins
21:34:29 <comex> also, what are you trying to convince me of
21:34:29 <AnMaster> sync built ins
21:34:31 <AnMaster> and so on
21:34:33 <comex> :p
21:34:49 <AnMaster> comex, that doing stuff like in <comex> http://www.int80h.org/strlen/ is counter productive
21:34:52 <AnMaster> on modern systems
21:35:04 <comex> http://pastie.org/408758
21:35:27 <AnMaster> comex, looks like the one yes
21:35:27 <comex> indeed, quite unlike what that optimizing strlen article says
21:35:30 <AnMaster> for i686
21:35:34 <comex> that's x86_64
21:35:39 <AnMaster> ah right
21:35:44 <AnMaster> and I tell you the glibc one is faster
21:36:00 <AnMaster> for various reasons
21:36:04 <comex> and I believe you, which makes me wonder why doing it manually is faster
21:36:07 <AnMaster> ah yes I should have seen it was x86_64
21:36:11 <AnMaster> had I read it properly
21:36:18 * AnMaster sees rax now
21:37:05 <AnMaster> comex, in any case gcc uses a builtin when it deems it better
21:37:12 <AnMaster> which mean code is inlined
21:37:21 <AnMaster> other compilers do it too
21:37:25 <AnMaster> like icc and so on
21:37:32 <comex> AnMaster: so is there any builtin for "scan forever for a certain character"
21:37:44 <comex> no, I mean manually as in asm stuff versus scasb
21:37:46 <AnMaster> http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Other-Builtins.html#Other-Builtins
21:37:51 <AnMaster> The ISO C90 functions abort, abs, acos, asin, atan2, atan, calloc, ceil, cosh, cos, exit, exp, fabs, floor, fmod, fprintf, fputs, frexp, fscanf, isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit, tolower, toupper, labs, ldexp, log10, log, malloc, memchr, memcmp, memcpy, memset, modf, pow, printf, putchar, puts, scanf, sinh, sin, snprintf, sprintf, sqrt,
21:37:51 <AnMaster> sscanf, strcat, strchr, strcmp, strcpy, strcspn, strlen, strncat, strncmp, strncpy, strpbrk, strrchr, strspn, strstr, tanh, tan, vfprintf, vprintf and vsprintf are all recognized as built-in functions unless -fno-builtin is specified (or -fno-builtin-function is specified for an individual function). All of these functions have corresponding versions prefixed with __builtin_.
21:37:55 <AnMaster> that lists strchr
21:37:59 <AnMaster> which I assume is what you want
21:38:03 <comex> no, it's not
21:38:07 <comex> I don't want to stop at a null byte
21:38:22 <comex> though I suspect the speed difference is negligible
21:38:34 <AnMaster> comex, hm. memchr with size set to max pointer - start address :P
21:38:47 <comex> AnMaster: if you saw the discussion yesterday, memchr was slower than strchr
21:38:52 <comex> with gcc -O3
21:39:53 <AnMaster> comex, how did the generated asm differ?
21:39:54 <comex> sometime I intend to look at gcc's internals
21:39:56 <comex> they must be crazy
21:39:58 <AnMaster> that caused it
21:39:58 <comex> AnMaster: didn't look :p
21:40:01 <AnMaster> hm ok
21:40:05 <AnMaster> comex, then it is hard to know why
21:40:43 <AnMaster> comex, also how much slower?
21:40:46 <AnMaster> did it matter?
21:41:21 <AnMaster> comex, glibc has rawmemchr... not portable
21:41:32 <AnMaster> and not a builtin
21:41:55 <comex> about 10ms :u
21:41:56 -!- atrapado has joined.
21:41:57 <comex> maybe 20
21:42:17 <AnMaster> mhm
21:42:24 <AnMaster> comex, for how many calls?
21:42:31 <AnMaster> also rawmemchr if you don't need portable
21:42:36 <comex> about, uh, a few million or so :u
21:42:41 <comex> I think
21:42:46 <comex> also not a builtin
21:43:03 <AnMaster> comex, that doesn't prevent inline sometimes...
21:43:18 <AnMaster> comex, some stuff expand to macros
21:43:27 <AnMaster> in *certain cases*
21:43:34 <AnMaster> comex, glibc headers are pretty insane
21:43:52 <AnMaster> as for gcc internals... Ask ais
21:43:54 <AnMaster> he worked on them
21:44:01 <AnMaster> when me made gcc-bf
21:44:17 <comex> uh, I'm scared
21:44:23 <comex> and for all this icc is still faster :u
21:44:40 <AnMaster> comex, not on my AMD CPU
21:44:53 <AnMaster> comex, btw I see one very very stupid thing on http://www.int80h.org/strlen/
21:44:58 <AnMaster> subecx, ecx; ECX = 0
21:45:03 <AnMaster> that is very stupid
21:45:13 <AnMaster> everyone knows xor is the fastest way to zero a register on x86
21:45:24 <AnMaster> xor it with itself
21:45:40 <AnMaster> that is even specially optimised in some x86 cpus
21:45:54 <AnMaster> sub with itself is slower
21:46:11 <AnMaster> at least in some cases
21:46:13 <AnMaster> iirc
21:48:07 <comex> hey, even I knew to notice that :p
21:48:31 <comex> though I still don't know shit about x86 and it seems to me that there's a lot more shit than, say, ARM
21:48:33 <comex> :u
21:48:49 <comex> yeah, I know, not risc
21:48:58 <AnMaster> comex, so I wouldn't trust that page too much. But it looks similar to the glibc implementation for i386...
21:49:22 <comex> AnMaster: why does x86 use push and pop so much anyway?
21:49:24 <AnMaster> comex, actually modern x86 are RISC on the inside. They run CISC in microcode...
21:49:40 <AnMaster> comex, register starved. x86 doesn't have a lot of registers
21:49:41 <comex> thought I read somewhere that that used to be true but not so much anymore
21:49:48 <comex> AnMaster: why?
21:50:19 <comex> is there a reason?
21:50:22 <AnMaster> comex, iirc: 1) making register memory is expensive 2) the original 8086 and even some later models were made to be cheap
21:50:32 <AnMaster> x86_64 double the register count after all
21:50:49 <AnMaster> oh and you can't add more registers as you go without breaking existing stuff
21:50:58 <AnMaster> due to the changes needed
21:51:16 <comex> you mean like x86_64 did :p
21:51:16 <AnMaster> well, not add general purpose ones that is
21:51:33 <AnMaster> comex, yes it did as I said above. But it did break everything else too by going 64-bit
21:51:38 <comex> why can't arguments be passed in r8-r15 now :u
21:51:46 <AnMaster> what?
21:51:59 <AnMaster> I don't remember x86_64 calling convention on the top of my head...
21:52:29 <AnMaster> I do know some asm, but I'm far from an expert. I prefer high level stuff. Like Scheme.
21:52:40 <lament> scheme is pretty low-level
21:52:47 <lament> car? cdr? wtf is this bullshit.
21:52:47 <AnMaster> lament, compared to?
21:53:06 <lament> AnMaster: compared to modern high-level languages like C#.
21:53:29 <AnMaster> lament, car? well the modern world are based on those :P
21:53:41 * AnMaster ducks
21:54:15 <AnMaster> anyway I know enough asm and quite a bit of C. And modern glibc uses very optimised routines for stuff like memcpy, strlen, strcpy and so on
21:55:04 <comex> also, backwards syntax is annoying
21:55:09 <comex> mov source, dest
21:55:10 <comex> fuck that
21:55:12 <comex> :u
21:55:28 <comex> (in the sense that 'mov source, dest' is backwards.)
21:55:47 <AnMaster> comex, I prefer AT&T syntax
21:56:09 <AnMaster> mostly I deal with asm as it shows up from objdump
21:56:13 <AnMaster> or gcc
21:56:17 <AnMaster> I don't code much in asm
21:56:20 <AnMaster> why would I
21:56:29 <AnMaster> compilers tend to do a great job a lot of the time
21:56:33 <comex> what can I use to assemble x64 anyway
21:56:45 <AnMaster> comex, well, there is gas
21:56:47 <comex> oh, I guess nasm supports it now
21:56:48 <AnMaster> the GNU asm
21:56:54 <AnMaster> comex, there is yasm
21:56:57 <AnMaster> and finally nasm
21:57:02 <AnMaster> but gas is best certainly
21:57:03 <comex> ...for a year and a half
21:57:07 <AnMaster> I mean it is a nice syntax
21:57:15 <AnMaster> compared to the horrible intel syntax
21:57:24 <AnMaster> comex, ^
21:58:18 <jix> i prefer the intel syntax
21:58:45 <jix> it's closer to the arm syntax.. which was the first assembly language i really used
21:59:28 <jix> but for x86 the at&t syntax is easier to handle by automated tools
21:59:35 <jix> because it's more verbose
21:59:48 <jix> but for coding in it it's too verbose imho
22:01:04 <AnMaster> comex, I checked other stuff on http://www.int80h.org... the site is utter bullshit in many places.
22:01:10 <AnMaster> I would recommend not using it
22:01:54 <AnMaster> it seems to suggest a syscall convention where you push arguments rather than fill them in the registers is "faster".
22:01:58 <AnMaster> which is utter bullshit
22:02:32 <oklopol> no justification for it?
22:03:38 <AnMaster> oklopol, well it suggests it on freebsd, so I guess it talks about linux emulation layer. But really, use some macro or wrapper to use whatever the system prefers
22:03:52 <AnMaster> for example linux doesn't use interrupt for system calls nowdays
22:03:53 <AnMaster> at all
22:03:58 <AnMaster> nor does freebsd afaik
22:04:20 <AnMaster> on recent x86 they both use SYSCALL/SYSRET or SYSENTER/SYSEXIT
22:04:29 <AnMaster> one of those pairs is for intel, the other for amd
22:04:33 <AnMaster> forgot which was which
22:08:32 <AnMaster> in any case at least the linux kernel injects this with a fake dynamic library on x86
22:08:48 <AnMaster> it decides at boot if it should use the intel one or the amd one
22:09:06 <AnMaster> libc then calls this for system calls
22:09:08 <AnMaster> very fast
22:13:17 -!- jix has quit ("...").
22:29:16 <fizzie> The AMD64 ABI calling convetion does use some of the extra registers for argument-passing; namely it does rdi, rsi, rdx, rcx, r8 and r9 for integer and pointer arguments. More than six function parameters is probably rather rare anyway.
22:31:16 <AnMaster> fizzie, it seems useful if the other ones were kept for local scratch I guess
22:31:29 <AnMaster> and more than 6 does happen, but the norm is fewer
22:31:43 <AnMaster> fizzie, also iirc it passes some other stuff in registers too
22:31:50 <AnMaster> according to an elaborate schem
22:31:52 <AnMaster> scheme*
22:42:03 -!- atrapado has quit ("Abandonando").
23:14:52 <ehird> 21:34 AnMaster: comex, that doing stuff like in <comex> http://www.int80h.org/strlen/ is counter productive
23:14:57 <ehird> get it in your head
23:15:00 <ehird> THIS IS #ESOTERIC
23:31:45 -!- olsner has quit ("Leaving").
23:39:04 <ehird> Had to powercycle my machine there; it decided putting the fans on full was an excellent idea.
23:39:10 <ehird> It does that once in a while, I wonder why?
23:39:46 <ehird> 23:33:08 <lament> http://filebin.ca/qyxpp/ofortuna.mp3
23:39:49 <ehird> i like it
23:48:27 <kerlo> My dad is asking me to model a ball of gas in a vacuum held together by gravity at equilibrium.
23:48:48 <ehird> Tell him to fuck off. Or, you know, do it.
23:50:30 <kerlo> But eh.
23:53:23 <ehird> Why does he want you to
23:55:11 <lament> ehird: yay, constructive feedback <3
23:55:35 <ehird> 23:55 JuanDaugherty: brainfuck is offensive ... as a waste of time and resources
23:55:38 <ehird> --#haskell
23:57:26 <lament> he's on #squeak, #lisp, and #haskell, and he's talking about waste of time and resources?
23:57:32 <lament> pot. kettle.
23:57:53 <ehird> 23:57 JuanDaugherty: I didn't say I had a right not to be offended, just that I find it offensive as a concept and a reality
23:58:10 <ehird> 23:58 JuanDaugherty: it's to computing like bleeding is to medicine
23:58:23 <ehird> so ridiculous so funny :DD
←2009-03-04 2009-03-05 2009-03-06→ ↑2009 ↑all