←2009-02-26 2009-02-27 2009-02-28→ ↑2009 ↑all
00:00:04 -!- upyr[emacs] has quit (Remote closed the connection).
00:04:44 -!- psygnisfive has quit (Remote closed the connection).
00:51:18 -!- GreaseMonkey has joined.
01:29:57 -!- Dewi has joined.
02:43:19 -!- Sgeo has joined.
02:48:52 -!- psygnisfive has joined.
04:17:12 <Sgeo> Bye all
04:17:50 -!- Sgeo has quit ("Leaving").
04:28:06 -!- psygnisf_ has joined.
04:29:16 -!- rodgort has quit (brown.freenode.net irc.freenode.net).
04:29:17 -!- Robdgreat has quit (brown.freenode.net irc.freenode.net).
04:29:18 -!- ehird has quit (brown.freenode.net irc.freenode.net).
04:29:20 -!- GregorR has quit (brown.freenode.net irc.freenode.net).
04:29:29 -!- ehird has joined.
04:29:29 -!- GregorR has joined.
04:30:16 -!- psygnisfive has quit (Remote closed the connection).
04:30:37 -!- Robdgreat has joined.
04:30:37 -!- rodgort has joined.
04:32:09 -!- psygnisf_ has changed nick to psygnisfive.
04:48:36 -!- psygnisfive has quit (Remote closed the connection).
04:49:58 -!- psygnisfive has joined.
05:21:52 -!- ab5tract has joined.
05:26:08 -!- Slereah has quit (brown.freenode.net irc.freenode.net).
05:26:08 -!- bsmntbombdood has quit (brown.freenode.net irc.freenode.net).
05:26:23 -!- Slereah has joined.
05:26:23 -!- bsmntbombdood has joined.
05:48:51 <oklopol> netspplitting is so impolite.
05:51:00 <kerlo> It's very polite, actually.
05:51:27 <kerlo> The tradition of netsplitting from royalty dates back to the Roman Empire.
05:53:59 <bsmntbombdood> ...practically
07:45:04 -!- ab5tract has quit.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:52:27 -!- GreaseMonkey has quit ("Client Excited").
08:56:13 <AnMaster> it was a small split anyway
08:56:18 <AnMaster> (on this side)
09:12:39 -!- MigoMipo has joined.
09:49:25 -!- ais523 has joined.
10:30:01 -!- ais523 has quit ("meeting in RL").
10:45:46 -!- MigoMipo has quit ("QuitIRCServerException: MigoMipo disconnected from IRC Server").
11:24:06 -!- ais523 has joined.
11:47:43 -!- BeholdMyGlory has joined.
12:29:06 -!- BeholdMyGlory has changed nick to FireFly.
12:29:20 -!- FireFly has changed nick to BeholdMyGlory.
13:16:27 -!- Hiato has joined.
13:32:02 -!- ais523_ has joined.
13:34:41 -!- ais523 has quit (Nick collision from services.).
13:34:43 -!- ais523_ has changed nick to ais523.
15:00:35 -!- ehird has left (?).
15:00:39 -!- ehird has joined.
15:47:39 <ehird> http://farm1.static.flickr.com/36/114732870_bab0bdae2c_b.jpg
16:01:04 <AnMaster> ehird, what is up with that * ...
16:01:36 <AnMaster> well I can see it is related to the last person (a woman) but I don't get it stil..
16:01:39 <AnMaster> still*
16:01:51 <AnMaster> is it trying to me funny
16:01:55 <AnMaster> s/me/be/
16:02:01 <AnMaster> cold fingers..
16:02:23 <ehird> "all print *men"
16:02:38 <AnMaster> yes
16:02:40 <ehird> it's attached to 'men'
16:02:42 <AnMaster> ehird, I see both *
16:02:44 <ehird> yes
16:02:54 <AnMaster> still I don't see why it uses "men" then
16:03:15 -!- Xeanalyth has joined.
16:03:21 <AnMaster> apart from that, Helvetica is rather nice
16:04:08 <ehird> it's a joke
16:04:10 * Xeanalyth peeks in for the first time...
16:04:15 <ehird> hi Xeanalyth
16:04:18 <ais523> hi Xeanalyth
16:04:21 <ehird> what brings you here?
16:04:22 <AnMaster> ehird, right, not very funny one though
16:04:24 <Xeanalyth> hi there, ehird and ais523
16:04:25 <ais523> what brings you here?
16:04:27 <AnMaster> and hello Xeanalyth
16:04:28 <ehird> AnMaster: it's an ad, ads aren't funny :P
16:04:33 <ehird> ais523: GET OUT OF MY MIND
16:04:35 <AnMaster> ehird, ah right
16:05:01 <Xeanalyth> ehird: ... been IRCing for years, never thought to look for esoteric chans before now :)
16:05:11 <ehird> wait lemme guess
16:05:15 <ehird> you think it's esoterica right
16:05:16 <AnMaster> that is esoteric programming
16:05:18 <ehird> sorry to disappoint
16:05:20 <ehird> what AnMaster said :P
16:05:20 <Xeanalyth> ehird: Lol
16:05:28 <Xeanalyth> ehird: I'm a student of the western mystery tradition.
16:05:33 <AnMaster> Xeanalyth, we are about stuff like weird programming languages
16:05:34 <ehird> yepppp, not the channel for you.
16:05:45 <ehird> hmm, our topic is unhelpful again
16:05:46 <AnMaster> same word used for it..
16:05:55 -!- AnMaster has set topic: Esoteric programming! | Don't use rafb.net for pasting because they delete pastes. Think of the log-readers. Logs: http://tunes.org/~nef/logs/esoteric/.
16:06:00 <ais523> !ul (aS(:^)S):^
16:06:01 -!- ehird has set topic: Esoterica. As in programming languages. Not mysticism. Don't use rafb.net for pasting because they delete pastes. Think of the log-readers. Logs: http://tunes.org/~nef/logs/esoteric/.
16:06:03 <ais523> ^ul (aS(:^)S):^
16:06:04 <fungot> (aS(:^)S):^
16:06:09 <AnMaster> ehird, that works too
16:06:10 <Xeanalyth> ahh i see :)
16:06:18 <ehird> sorry to disappoint :<
16:06:18 <ais523> well, it's a case of #esoteric on a programming server
16:06:19 <Xeanalyth> that could be just as interesting :)
16:06:24 <ais523> which is why it's about esoteric programming languages
16:06:32 <ehird> Xeanalyth: that's what they all say, they rarely come back though :P
16:06:40 <Xeanalyth> hehe
16:06:42 <AnMaster> hm? "programming server", I guess you could call freenode
16:06:47 <AnMaster> call freenode that*
16:06:49 <ehird> AnMaster: err, that's exactly what it is :P
16:07:01 <AnMaster> ehird, no, it is a network, more than one server
16:07:06 <AnMaster> though that is nit picking
16:07:18 <ehird> Xeanalyth: see this nitpicking? half of the channel traffic is that.
16:07:19 <ehird> just warning you.
16:07:34 <AnMaster> not really, I would guess around 39% at most :P
16:07:39 -!- ehird has set topic: Esoterica. As in programming languages. Not mysticism. Don't use rafb.net for pasting because they delete pastes. Think of the log-readers. Logs: http://tunes.org/~nef/logs/esoteric/?C=N;O=D.
16:07:45 <ehird> (putting sorting in the log links so today comes at the top)
16:07:54 <AnMaster> ehird, good idea
16:08:00 <Xeanalyth> it's probably something my housemate would be more into.. he's more the pure coder... i'm a unix admin
16:08:11 <AnMaster> ais523, have you ever used hugetlb?
16:08:14 <ais523> AnMaster: no
16:08:17 <ehird> Xeanalyth: ah, unix administration. that would explain the esoterica.
16:08:26 <ehird> ls; vi; sacrifice goats
16:08:57 <AnMaster> I was planning to try using it for cfunge but found that at least on my machine I got an average of 2-3 TLB cache misses per run so I thought "not worth it"
16:08:59 <ehird> i see that joke livened up the channel!
16:09:12 <AnMaster> emacs!
16:09:32 -!- Xeanalyth has quit ("Changing server").
16:09:40 <AnMaster> ehird, see I *didn't* microoptimise there!
16:09:54 <ais523> AnMaster: and by doing so, you're violating the spirit of cfunge
16:10:11 <ehird> tut tut
16:10:14 <AnMaster> ais523, well not really, since it wasn't worth it
16:10:16 <ehird> I NoV AnMaster for not microoptimizing cfunge
16:10:17 <ais523> you should instead mathematically prove that by not doing that optimisation, the time you save on startup is more than the time you lose on not optimising
16:10:18 <ehird> AnMaster: ...
16:10:33 <ehird> AnMaster: BARELY ANY OF YOUR OPTIMIZATIONS ARE WORTH IT!
16:10:33 <ehird> >_<
16:10:34 <AnMaster> ais523, the real bottle neck is pushing strings on stack (when running mycology)
16:12:09 <AnMaster> even with stack growing down (tried that to see if it would help, didn't really) the auto vectoriser of GCC or ICC can't figure it out. Though I do have some vague ideas...
16:12:16 <ehird> omg omg omg omg omg
16:12:19 <ehird> "On Building a Stupidly Fast Graph Database"
16:12:23 <ehird> I THINK THIS IS FOR ME
16:12:23 <ais523> AnMaster: write the asm by hand?
16:12:40 <ehird> <33
16:12:44 <AnMaster> ais523, well as an optimised alternative: sure, I may. But it's tricky
16:12:54 <AnMaster> due to the strange alignment rules for SSE :)
16:12:55 <ehird> asm ain't tricky
16:12:57 <ehird> oh
16:13:26 <ais523> one of my favourite programming memories was on a piece of code which had to be amazingly efficient
16:13:31 <AnMaster> ehird, asm isn't tricky indeed, but when you have to care about alignment and unrolling to fit specific CPUs and such...
16:13:37 <AnMaster> ais523, oh?
16:13:41 <ais523> in particular, there was an interrupt handler which needed to operate in only a few processor cycles
16:13:42 <ehird> asm is mostly tedious
16:13:47 <ehird> since memorizing instructions is near-impossible
16:13:52 <AnMaster> ehird, indeed
16:13:52 <ais523> so I had the C open in one window, and the asm it compiled to open in another window
16:13:54 <AnMaster> RISC!
16:13:58 <ehird> OISC.
16:14:04 <AnMaster> well right...
16:14:04 <ehird> I can keep that shit in my head.
16:14:05 <ais523> and kept tweaking the C until the compiler generated the asm I wanted
16:14:13 <ais523> so it was like hand-coding the asm, only more readable and portable
16:14:13 <ehird> why not just use inline asm :P
16:14:26 <ais523> ehird: so other people on the project could see what the code was going
16:14:28 <ais523> *doing
16:14:32 <ehird> ha
16:14:36 <ais523> I ended up doing about 1/3 of the project, and it was a 10-person project
16:14:42 <AnMaster> I think using intrinsics might be the way to go here
16:14:43 <ehird> I actually have a project involving microoptimization
16:14:45 <ehird> but it's for a good cause
16:14:45 <ais523> quite a few of the other team members weren't particularly competent
16:14:53 <AnMaster> still need to bother about alignment though
16:15:01 <ehird> (and I _mean_ microoptimization)
16:15:02 <AnMaster> ehird, hm?
16:15:04 <AnMaster> detaisl?
16:15:06 <AnMaster> details*
16:15:31 <AnMaster> btw (one of google's own projects): http://code.google.com/p/mao/
16:15:37 <ehird> AnMaster: a highly efficient, uncomprimising (i.e. not like the Stalin compiler: a living environment with documentation, fully overridable core functions, etc) Scheme compiler
16:15:44 <ehird> (& interpreter, but it just compiles and runs in place, like SBCL)
16:15:51 <ehird> *uncompromising
16:15:52 <AnMaster> ehird, ah nice
16:15:56 <AnMaster> ehird, how much is done?
16:16:02 <ehird> 0. It's all in my head atm.
16:16:05 <AnMaster> ah
16:16:07 <ehird> but i think I can maybe someday compete with ocaml
16:16:10 <ehird> on some code
16:16:13 <AnMaster> heh
16:16:28 <ehird> (although even that is unneccessary; most of the time something as slow as Perl is fine)
16:16:28 <ais523> I was reading about the ocaml internals a few days ago
16:16:40 <ehird> but I aim to be able to write stuff you'd normally write in C
16:16:41 <AnMaster> ehird, Assuming you are using the best way to write it in both langs? And not just translating the algorithm?
16:16:46 <ehird> AnMaster: yes
16:16:54 <AnMaster> ehird, what about competing with C then?
16:16:59 <AnMaster> ais523, oh?
16:17:09 <ais523> it's quite interesting
16:17:15 <AnMaster> ehird, I mean when it comes to speed
16:17:22 <ais523> and comparable to C, not as fast but it can be within an order of magnitude
16:17:22 <ehird> AnMaster: Sufficiently Smart Compilers can only go so far. In Scheme, you can override the + function at runtime, and the rest of your program will use the new one.
16:17:25 <ehird> So you can't even inline arithmetic.
16:17:28 <AnMaster> ah
16:17:30 <AnMaster> ouch
16:17:33 <ehird> Arithmetic HAS to look up the function definition and call it.
16:17:40 <AnMaster> ehird, so you can't even constant fold?
16:17:40 <ehird> Of course, this makes your optimizations more elegant:
16:17:41 <ais523> ehird: JIT?
16:17:43 <AnMaster> that hurts
16:17:46 <ehird> you make function calls ridiculously fast
16:17:51 <ehird> and lookups too
16:17:52 <AnMaster> well JIT is a solution of course
16:17:58 <ehird> ais523: it is JIT, kind of
16:18:00 <ais523> I would certainly suggest JITted constant folding
16:18:02 <ehird> I'm not compiling to binaries
16:18:10 <ehird> I'm doing what SBCL does
16:18:12 <AnMaster> ais523, makes sense
16:18:14 <ais523> it may even be a good idea to generate two versions of the program
16:18:17 <ehird> kind of like JIT
16:18:22 <ehird> you compile a whole function/file at a time
16:18:22 <ais523> one assuming primitives don't change, one where they can
16:18:24 <ehird> but it's still in a REPL
16:18:30 <AnMaster> ais523, that is AOT not JIT right?
16:18:31 <ehird> ais523: that's not really practical though
16:18:38 <ais523> AnMaster: well, ok
16:18:40 <ehird> that makes the code size huge
16:18:50 <ehird> note: I'll probably have a way to do constant folding, somehow
16:18:53 <ehird> I'll think about it
16:19:00 <AnMaster> ehird, you were right about Xeanalyth, seems he didn't come back
16:19:03 <ehird> but I don't want to break ANY r5rs compliant program
16:19:04 <ehird> AnMaster: :)
16:19:23 <ehird> but, I think I can do it
16:19:34 <ehird> it'd be nice not to have to whip out C when generating, say, 5 billion factorials.
16:19:44 <ehird> (especially since in C for that you'd need gmp... *shudder*)
16:19:54 <AnMaster> ehird, I think JIT with constant fold, and if +- and such are redefined invalidate all JIT compiled code using it
16:20:01 <AnMaster> or something like that
16:20:11 <ehird> that doesn't work for compiling to a binary
16:20:18 <ehird> i think I can do it, but it will be hard
16:20:25 <AnMaster> ehird, <ehird> I'm not compiling to binaries
16:20:25 <AnMaster> ?
16:20:31 <ehird> well, I'm doing both
16:20:34 <AnMaster> ah
16:20:39 <ais523> AnMaster: he's compiling to decimals
16:20:40 <ehird> the primary compilation mode isn't binaries, but it will support them
16:20:43 <ehird> so it has to work for both
16:20:45 <ehird> ais523: groan.
16:20:47 <AnMaster> ais523, stop being oerjan
16:20:52 <ehird> AnMaster: but fyi, invalidating all compiled code will be hell
16:21:03 <AnMaster> ehird, not all compiled, all compiled with constant folding
16:21:13 <ehird> you'd override a core function, bam, wait 5 hours for the whole system and the REPL and every library and e-v-e-r-y-t-h-i-n-g to be recompiled
16:21:14 <AnMaster> I guess you would have a list or something somewhere
16:21:21 <ehird> AnMaster: well I'd hardly let that optimization be disabled
16:21:32 <ehird> you don't even really need constant folding anyway
16:21:36 <AnMaster> ehird, most programs won't redefine +-/* and such
16:21:36 <ehird> just define a macro that does the calculation
16:21:43 <ehird> (define foo (compile-time-eval (+ 2 2))
16:21:49 <AnMaster> ehird, so well if you get 5 hours you are doing stupid stuff
16:21:50 <ais523> maybe you could use some sort of JIT constant unfolding?
16:21:52 <ais523> store the constant
16:22:03 <ehird> ais523: i _have_ considered this y'know
16:22:03 <ais523> replace it with the code that generates it if the assumptions used to make it changed
16:22:04 <AnMaster> ais523, sounds like a good idea
16:22:05 <AnMaster> also
16:22:11 <AnMaster> what do you mean 5 hours
16:22:12 <ehird> the problem is the binary size would be hilariously stupid
16:22:16 <AnMaster> you wouldn't JIT it again directly
16:22:16 <ehird> AnMaster: ehird, so well if you get 5 hours you are doing stupid stuff
16:22:17 <ehird> no acceptable
16:22:18 <ehird> t
16:22:19 <AnMaster> only when you run into it
16:22:21 <ais523> actually, I just mentioned it because "constant unfolding" is such an amusing term
16:22:25 <ehird> AnMaster: err, no, that's not what I'm doing
16:22:28 <ehird> I just told you I'm not JITting
16:22:31 <ehird> you compile a whole unit at a time
16:22:35 <AnMaster> ah
16:22:36 <AnMaster> right
16:22:44 <AnMaster> JITing is probably better for this though...
16:22:52 <ehird> not for my use-case
16:22:57 <AnMaster> oh?
16:22:59 <ehird> yes :P
16:23:01 <AnMaster> well I guess inlining...
16:23:04 <ehird> common lisp is a lucky bastard
16:23:13 <AnMaster> but the Java JIT can do inlining and such
16:23:13 <ehird> it gets away with it because you can't modify the common-lisp package
16:23:14 <AnMaster> iirc
16:23:15 <ehird> etc
16:23:21 <AnMaster> heh
16:23:24 <ehird> so you can do all sorts of optimizations
16:23:44 <AnMaster> ehird, well mark a unit as "need to be-rejitted on next use" then
16:23:49 <AnMaster> :P
16:24:04 <ehird> and when the REPL loop ticks around,
16:24:05 <ehird> bam 5 hours
16:24:06 <AnMaster> fizzie, there? Will jitfunge implement IMAP? :D
16:24:14 <ehird> lol
16:24:21 <ais523> which one was IMAP again?
16:24:25 <AnMaster> IMAP allows overriding instructions
16:24:31 <ehird> in SBCL you can do:
16:24:31 <ehird> * (defun common-lisp:+ (&rest args) 6)
16:24:36 <ehird> and tell it to ignore the package lock
16:24:38 <ehird> but it has no effect
16:24:39 <AnMaster> like making / point to TURT p
16:24:41 <AnMaster> or whatever
16:24:41 <ehird> because + is inlined
16:24:44 <AnMaster> ais523, ^
16:24:44 <ehird> etc
16:24:47 <ehird> in compiled code
16:24:51 <ehird> sure, (+ ...) changes at the REPL
16:24:56 <ehird> but everything else has it inlined
16:25:00 <ais523> AnMaster: ah, ok
16:25:03 <ehird> that's not very clean :P
16:25:21 <ais523> Smalltalk has false become: true, which is brilliant
16:25:27 <ais523> I like the Prolog version even more, though
16:25:30 <ais523> because you can do it by mistake
16:25:37 <AnMaster> ais523, iirc it allows swapping core instructions too
16:25:42 <ais523> infiniteloop :- repeat, fail.
16:25:44 <ais523> is an infinite loop.
16:25:47 <ais523> infiniteloop :- repeat. fail.
16:25:56 <ais523> is not an infinite loop, and also redefines false to be true
16:25:59 <ehird> true become: false is beautiful because it's absolutely pointless
16:26:08 <ehird> the only use of become: is for future values
16:26:08 <ais523> yes, agreed
16:26:12 <AnMaster> can you *swap* true and false?
16:26:17 <ehird> AnMaster: yes
16:26:20 <ehird> it's something like
16:26:23 <AnMaster> btw, cfunge doesn't implement IMAP
16:26:24 <AnMaster> nor will it
16:26:27 <ais523> AnMaster: I know of no way to make true false in Prolog
16:26:29 <ehird> #(true false) becomeEveryInArray: #(false true)
16:26:36 <ais523> retract(true). would do it in some compilers
16:26:37 <AnMaster> ais523, hm ok
16:26:39 <ais523> *interps
16:26:48 <ehird> ais523: infiniteloop :- repeat. fail.
16:26:48 <ehird> 16:25 ais523: is not an infinite loop, and also redefines false to be true
16:26:48 <ais523> but most compilers don't let you alter the core definitions like that
16:26:50 <ehird> erm.
16:26:51 <ehird> it does?
16:26:53 <ais523> as they rely on it themself
16:26:58 <ais523> ehird: look at the full stop
16:27:00 <ais523> that's two instructions
16:27:03 <ehird> oh.
16:27:08 <ehird> that doesn't redefine false to be true
16:27:12 <ehird> fail is just a core function returning false
16:27:15 <ehird> false itself still exists
16:27:18 <ehird> you just can't get at it
16:27:23 <ais523> fail doesn't return false
16:27:23 <ehird> also, it's not false, it's No :P
16:27:25 <ais523> it doesn't return at all
16:27:34 <ehird> everything in prolog returns Yes or No
16:27:39 <ehird> that's how I explain it
16:27:42 <ais523> hmm...
16:27:45 <ais523> it's one way to think of it
16:27:53 <ais523> but return values in Prolog are done by unifying an argument
16:28:02 <ehird> yes
16:28:08 <AnMaster> ais523, in Erlang true and false are just like any atoms but that happens to be treated specially by some stuff. No way to redefine them
16:28:56 <ehird> incidentally, I figured out a language where = is both equality and setting, because they're the same thing.
16:30:25 <ehird> this works in it:
16:30:34 <ehird> foo > 2; foo < 5
16:30:38 <ehird> foo is then either 3 or 4.
16:30:40 <ais523> ehird: ah, ok
16:30:48 <ais523> = is both equality and setting in Prolog, too
16:30:49 <ehird> if you do (bar = foo+2), bar is either 5 or 6
16:30:55 <ehird> ais523: kindof
16:31:03 <ais523> and I think you're inventing a language along similar lines to Prolog
16:31:08 <ais523> but without the annoying restrictions
16:31:13 <ais523> you'll end up with Proud at this rate
16:31:14 <ehird> pretty much
16:31:18 <ehird> ais523: no, it's computable
16:31:27 <ehird> the fun thing is that every variable starts out in a superposition of EVERY VALUE EVER.
16:31:33 <ais523> well, you're not going all the way down the Proud path
16:31:36 <ehird> you know how in swi prolog, if you enter "X."
16:31:39 <ehird> you get "42"?
16:31:41 <ais523> but Proud uses exactly the same method
16:31:43 <ehird> as a joke error
16:31:45 <ais523> and no, I didn't know that
16:31:56 <ehird> ais523: it does something like:
16:31:58 <ais523> every variable in Proud starts out in a superposition of everything
16:31:59 <ehird> ?- X.
16:32:00 <ehird> ...
16:32:01 <ehird> ...
16:32:03 <ehird> %% 42
16:32:08 <ais523> not just integers
16:32:08 <ehird> %% (last release gives the question)
16:32:10 <ehird> ?-
16:32:16 <ehird> ais523: not just integers
16:32:17 <ehird> everything
16:32:19 <ehird> in mine too
16:32:19 <ais523> yep
16:32:25 <ais523> identical thought processes, there
16:32:26 <ehird> but yes, if you enter "foo" into my prompt
16:32:29 <ehird> you'll get
16:32:35 <ais523> but in Proud, you can do things like F(42) = 6
16:32:35 -!- psygnisfive has quit (Remote closed the connection).
16:32:40 <ehird> 1 or 2 or 3 or 4 or ... or "" or "\0" or ...
16:32:44 <ehird> etc
16:32:51 <ais523> and F becomes bound to the superposition of functions which return 6 given the argument 42
16:32:51 <ehird> ais523: that's exactly what mine does
16:32:56 <ehird> oh, no
16:33:01 <ehird> mine basically treats
16:33:02 <ehird> func(arg)
16:33:06 <ehird> as a variable
16:33:12 <ais523> oh, ok
16:33:14 <ehird> so you can do things like
16:33:19 <ehird> foo(n) > n
16:33:23 <ehird> foo(n) < (n**2)
16:33:27 <ais523> now I can see how you do that without solving the halting problem
16:33:34 <ehird> and foo(n) is the superposition of every value between n+1 and n**2
16:33:40 <ehird> well
16:33:41 <ehird> every integer
16:33:47 <ais523> but wouldn't a recursive definition lead to an infinite loop, though?
16:33:52 <ais523> foo(n) = foo(n+1)+1
16:33:53 <ehird> ais523: no
16:33:54 <ais523> foo(0) = 0
16:33:55 <ehird> foo = foo
16:33:57 <ehird> works just fine
16:34:01 <ehird> since a = a, obviously
16:34:04 <ais523> ehird: what about my last two lines, does that work?
16:34:04 <ehird> but
16:34:14 <ehird> ais523: foo(-1) works.
16:34:15 <ehird> it's 1.
16:34:19 <ehird> foo(3) loops forever.
16:34:41 <ais523> replace everything with an initcaps version, and what I wrote above does work in Proud
16:34:49 <ehird> how?
16:34:51 <ehird> what's the result?
16:34:53 <ehird> there is none
16:35:10 <ais523> the result is that Foo is bound to the superposition of all functions with those properties
16:35:32 <ais523> and there is only one, if you constrain N to be integer
16:35:46 <ehird> ah. mine's more intuitive :P
16:35:47 <ais523> so the result is the same as if you'd written Foo(N)=0-N
16:36:00 <ehird> wait
16:36:02 <ehird> that doesn't work
16:36:12 <ehird> that isn't consistent with that definition.
16:36:13 <ehird> ..
16:36:18 <ais523> why not?
16:36:22 <ehird> oh
16:36:23 <ehird> I see
16:36:26 <ehird> clever
16:36:29 <ehird> it inferrs the rest
16:36:33 <ehird> yeah mine just treats func(arg) as a place
16:36:35 <ehird> like variables
16:36:41 <ais523> it's not quite inference
16:36:41 <ehird> which lets you do constraint stuff but still be computable
16:36:47 <ais523> it's elimination, applied to infinite sets
16:36:49 <ais523> it comes to the same thing
16:36:51 <ehird> it acts as inference
16:36:51 <ehird> :P
16:37:13 <ehird> if I give my crazy arithmetic system to this language, foo(n) > foo(n) would give the Infinitiest Infinity
16:37:16 <ais523> my main confusion with Proud is that Russel's paradox is expressible
16:37:19 <ehird> (it's so big even itself can't match up with itself)
16:37:34 <ais523> I spent a while trying to figure out what a program that cared about it did
16:37:35 <ehird> ais523: how is it expressable in proud? I'll tell you what it'd do in mine
16:37:37 <ais523> in the end, I realised it simply failed
16:38:01 <ais523> ehird: I didn't work out the syntax for it
16:38:13 <ehird> well, make a rough one? surely it's easy
16:38:42 <ais523> but you can say Russell = findall(Set, not(member(Set,Set)))
16:38:56 <ehird> err, what a copout
16:39:00 <ais523> where findall finds all solutions in a limited environment
16:39:07 <ais523> I'm not sure how to specify the environment
16:39:10 <ais523> that doesn't fail, itself
16:39:12 <ehird> ais523: in my language you can do pony = russel()
16:39:19 <ehird> :P
16:39:34 <ehird> also, my language only uses = for very equality
16:39:37 <ais523> however, even though you can't tell whether Russel is in Russel, member(Russel,Russel) fails
16:39:42 <ehird> for contains you do it prolog style
16:39:45 <ais523> and that is very equality
16:39:51 <ehird> contains(foo,2)
16:39:57 <ehird> instead of foo = setswith(2)
16:40:08 <ais523> ah, ok
16:40:11 <ehird> i.e., most of the time, you only use = to specify an exact constant value
16:40:11 <ais523> Proud has return values
16:40:15 <ehird> yes
16:40:16 <ehird> well
16:40:18 <ais523> the syntax is more natural that way
16:40:20 <ehird> mine treats functions as variables
16:40:22 <ehird> like I said
16:40:24 <ais523> so does mine
16:40:30 <ehird> ais523: basically, (foo) as a statement means "foo is true"
16:40:31 <ehird> so
16:40:32 <ehird> foo > 2
16:40:33 <ehird> foo < 5
16:40:38 <ehird> contains(foo, 4587345435)
16:40:40 <ehird> stuff like that
17:07:08 -!- Leonidas has changed nick to Leonidas1880.
17:07:15 -!- Leonidas1880 has changed nick to Leonidas1980.
17:09:34 <ehird> http://code.google.com/p/doctype/wiki/ArticleHereComesTheSun <-- jesus.
17:12:06 -!- Leonidas1980 has changed nick to Leonidas.
17:17:12 -!- Hiato has quit (Connection timed out).
17:20:12 -!- oerjan has joined.
17:27:20 -!- sebbu2 has joined.
17:29:58 -!- sebbu has quit (Read error: 60 (Operation timed out)).
17:44:52 <AnMaster> ehird, wonder what that does if java is *NOT* installed
17:45:01 <ehird> nothing.
17:45:05 <ais523> what is it?
17:45:10 <ehird> http://code.google.com/p/doctype/wiki/ArticleHereComesTheSun
17:45:11 <AnMaster> <ehird> http://code.google.com/p/doctype/wiki/ArticleHereComesTheSun <-- jesus.
17:45:12 <AnMaster> that
17:45:17 <ais523> I didn't ask what the link was
17:45:20 <ais523> I asked what it was
17:45:20 <ehird> it's just text
17:45:22 <ehird> grah
17:45:23 <ehird> ais523!
17:45:26 <ehird> IRC is not your personal webbrowser!!
17:45:27 <AnMaster> <ehird> ais523: basically, (foo) as a statement means "foo is true" <-- what language?
17:45:31 <ehird> AnMaster: mine
17:45:36 <AnMaster> ehird, name?
17:45:38 <ehird> ais523: if you want to read a page, you could open it in a browser!
17:45:39 <ehird> AnMaster: none
17:45:53 <AnMaster> ehird, how much scrollback is needed for context?
17:45:59 <ais523> ehird: I inherently distrust browsers, I think
17:46:06 <ais523> I prefer asking questions over IRC, and getting responses as text
17:46:14 <ehird> AnMaster: 16:28
17:46:17 <ehird> and it's 17:46 now
17:46:19 <AnMaster> ais523, text/plain: http://code.google.com/p/doctype/wiki/ArticleHereComesTheSun
17:46:30 <ehird> ais523:
17:46:33 <ehird> Here's a small "gotcha" for web developers. There are a few "magic" properties on Mozilla's DOMWindow interface for supporting LiveConnect that will initialize the Java plugin and all the baggage that comes with it (which, with modern Java plugins, means launching java.exe as a subprocess). Looking up these properties on the window object is all it takes.
17:46:39 <ehird> For example, take the following sample page:
17:46:41 <ehird> <!DOCTYPE html>
17:46:42 <ehird> <html>
17:46:44 <ehird> <head>
17:46:46 <ehird> <script type="text/javascript">
17:46:48 <ehird> function sun() {}
17:46:50 <ehird> </script>
17:46:53 <ehird> </head>
17:46:54 <oerjan> from now on whenever ais523 asks what a link is we will say it's a goatse. deal? :D
17:46:54 <ehird> <body>
17:46:57 <ehird> </body>
17:46:59 <ehird> </html>
17:47:01 <ehird> Harmless, right? Actually it's not. It turns out that Mozilla Firefox treats window.sun as a magic LiveConnect property. (I tested with Mozilla Firefox 3.0.6 on Windows.) What's LiveConnect? It was introduced in Netscape 4 to allow plugins to be scripted. Accessing any magic LiveConnect property will start the Java plugin -- even if your code has nothing to do with Java. And starting the Java plugin will load a JVM. Oh, and did I mention that all of this
17:47:05 <ehird> will happen synchronously? As in, Firefox will stop loading your page and wait for the JVM to start up. And all you did was access window.sun.
17:47:09 <ehird> "But, but, but..." I hear you sputter. "I'm not accessing the window.sun property!" Ah, but you are. Declaring a global function is like assigning a property to the window object. (The property's value is the function itself.) In order to assign that property, Firefox first looks up the slot before reassigning it, and that lookup... launches a JVM. Synchronously.
17:47:14 <ehird> The list of these performance-killing magic LiveConnect properties is buried deep within the Mozilla source code. They are:
17:47:17 <ehird> java
17:47:18 <ehird> Packages
17:47:21 <ehird> netscape
17:47:22 <ehird> sun
17:47:24 <ehird> JavaClass
17:47:26 <ais523> well, I did read the article after you told me what it was
17:47:27 <ehird> JavaArray
17:47:29 <ehird> JavaMember
17:47:31 <ehird> In other words, don't define a window-level function called sun(). It will absolutely kill your page's performance, because at least one modern-day browser will think you want Java, because of a "feature" invented by Netscape in 1997.
17:47:34 <ehird> (Many thanks to Kelly Norton, who researched this issue and brought it to my attention.)
17:47:36 <ehird> Further reading
17:47:39 <ehird> LiveConnect on Mozilla Developer Center
17:47:39 <ais523> oerjan: heh
17:47:40 <ehird> LiveConnect on Wikipedia
17:47:42 <ehird> Open JVM integration in the Mozilla.org archives
17:47:54 <ehird> ais523: does that answer your question? :)
17:48:04 <ais523> ehird: relatively well, it's a bit crufty though
17:48:15 <ehird> Excellent. I shall now set up lynxbot.
17:48:24 <ais523> that would so get banned!
17:48:31 <ehird> And then we can all blame you
17:48:46 <ais523> well, no, because I wouldn't use a bot that's that bad an idea
17:48:56 <ehird> oh, it's not your choice
17:48:59 <ais523> maybe I should browse with w3m more often
17:49:01 <ehird> put a link in the channel? lynx -dump to IRC
17:49:07 <ehird> for those who won't use web browsers
17:49:33 <ehird> wonder if AnMaster's client autoignored me
17:49:45 <ais523> ehird: ctcp it and find out?
17:50:03 <ais523> or do clients respond to CTCPs even from people who are ignoring you?
17:50:19 <AnMaster> <ehird> that isn't consistent with that definition. <-- I have to agree, *tries to figure it out*
17:50:26 <ehird> AnMaster: it is
17:50:32 <ehird> what function is there that when you give it 0, you get zero,
17:50:36 <ais523> oklopol: MizardX: your clients are broken
17:50:36 <ehird> and when you give it N
17:50:38 <ehird> you get f(N+1)+1
17:50:47 <ehird> think about it
17:50:48 <ais523> they're missing out the word TIME in a CTCP TIME reply
17:50:57 <ais523> also, ehird's client is the only one that gave the timezone
17:51:05 <AnMaster> <ais523> foo(n) = foo(n+1)+1 <ais523> foo(0) = 0 <ais523> so the result is the same as if you'd written Foo(N)=0-N <-- hm...
17:51:07 <ehird> AnMaster: -3 -> f(-1)+1
17:51:12 <AnMaster> ah
17:51:13 <ehird> -> f(0)+1
17:51:18 <ehird> -> 3
17:51:26 <ehird> so, that definition holds for negative numbers
17:51:34 <ehird> what other function satisfies that laws, apart from foo(n) = 0-n?
17:51:37 <ehird> there isn't any
17:51:43 <ehird> so, to boot, you get behaviour for positive numbers too
17:51:43 <AnMaster> ais523, does mine give time?
17:51:45 <ehird> it's a clever trick
17:51:49 <AnMaster> ehird, ah hm yes...
17:51:52 <AnMaster> true
17:51:53 <ais523> and Ilari's, oklopol's, evenant's, MizardX's, and Leonidas's clocks are wrong
17:51:58 <AnMaster> ehird, it makes my head ache though
17:52:03 <ehird> ais523: also, ehird's client is the only one that gave the timezone
17:52:08 <ehird> i love my client.
17:52:32 <ais523> ehird: this one presumably isn't shareware?
17:52:37 <ehird> indeed.
17:52:40 <AnMaster> CTCP ehird TIME
17:52:43 <AnMaster> err
17:52:44 <ehird> fail
17:52:44 <AnMaster> fail
17:52:52 <AnMaster> -ehird- TIME Fri Feb 27 17:52:47 +0000 2009
17:53:07 <ehird> the client I'm on atm is LimeChat, with an updated version of my patch to assign dates from the bouncer when playing the quicklog,
17:53:11 <ehird> and this theme: http://julianstahnke.com/read/a_theme_for_limechat_colloquial/Colloquial.png
17:53:25 <ehird> it doesn't seem to be hanging on quicklog anymore, which is nice
17:54:00 <ais523> wow, that font rendering is messed up
17:54:05 <ehird> err, no
17:54:07 <ehird> it's perfectly fine
17:54:09 <ais523> not as badly as KDE's, but still noticeably
17:54:12 <ehird> OFC, on a lot of displays it looks bad
17:54:17 <ehird> you need a high-dpi tft
17:54:21 <ehird> which, conveniently, all macs have.
17:54:23 <ais523> ah
17:54:31 <ehird> on a CRT, or a lower-dpi, yeah, ugly
17:56:27 <AnMaster> ehird, looks rather bad, I have seen worse though
17:56:43 <ehird> if you were on an actual mac with a mac screen it'd look great, like it always does :P
17:56:50 <ehird> which, y'know, I just said, but I know you don't have scrollback
17:57:33 -!- Hiato has joined.
18:02:38 -!- BeholdMyGlory has quit (Remote closed the connection).
18:03:02 -!- BeholdMyGlory has joined.
18:04:05 -!- Mony has joined.
18:04:18 <MizardX> ais523: fixed
18:08:04 <ais523> wow, that was fast
18:08:18 <MizardX> Had to look up the rfc...
18:09:23 <ehird> MizardX: did you just hack your client? :DD
18:09:43 <MizardX> ctcp *:TIME:?:{
18:09:43 <MizardX> ctcpreply $nick TIME $asctime(ddd $+ $chr(44) d mmm yy HH:nn:ss zz)
18:09:43 <MizardX> haltdef
18:09:43 <MizardX> }
18:10:25 <ehird> ah, mirc
18:12:16 <oerjan> <ais523> I ended up doing about 1/3 of the project, and it was a 10-person project
18:12:43 * oerjan suddenly wonders if programming projects follow something like Zipf's law
18:13:00 <ais523> probably
18:13:04 <ais523> except that this was a university project
18:13:11 <ais523> where we were all meant to be workign equally on it
18:13:56 <oklopol> we just finished a project with one guy doing about 0%, me doing about 20%, and another dude about 80%
18:14:12 <oerjan> the 20/80 law, obviously
18:14:16 <oklopol> :P
18:14:43 <ais523> heh, I've seen it described as the 90/10 law
18:14:48 <ehird> 90/90
18:14:53 <ais523> the first 90% of the features takes the first 90% of the time
18:14:59 <ais523> then the remaining 10% takes the other 90% of the time
18:15:01 <oklopol> fun thing is the 80% isn't even getting the course anyway :P
18:15:04 <ais523> and the remaining 90% is spent bugfixing
18:15:08 <oklopol> *80% dude
18:15:27 <ais523> oklopol: wow, you bugfix quickly
18:15:44 <ehird> he probably stole mizardx's
18:15:46 <ehird> 18:15 ehird: @pl fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap
18:15:46 <ehird> 18:15 lambdabot: fmap (fmap (fmap fmap)) fmap
18:15:50 <ehird> fmap calculus
18:16:02 <oklopol> no, i didn't steal MizardX's
18:16:11 <oklopol> i did nothing.
18:16:15 <ehird> hahaa
18:16:17 <oerjan> ehird: btw that is periodic
18:16:24 <ehird> oerjan: :DD
18:16:25 <ais523> what does fmap do?
18:16:35 <ehird> ais523:
18:16:37 <ehird> 18:15 ehird: :t fmap
18:16:38 <ehird> 18:15 lambdabot: forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
18:16:38 <oerjan> adding 4 fmaps gives the same after a while
18:16:44 <oerjan> iirc
18:16:47 <ehird> there's also a (Functor ((->) t)) instance
18:16:49 <ehird> for which fmap = (.)
18:16:53 <ehird> and also
18:16:54 <ais523> ah, interesting
18:16:57 <ehird> (Functor [])
18:17:00 <ehird> for which fmap = map
18:17:12 <ais523> maps a function over a monad?
18:17:14 <ehird> no
18:17:15 <ehird> functor
18:17:17 <ehird> ideally, map and (.) wouldn't exist and fmap would be called (.)
18:17:22 <ehird> ais523: all monads are functors
18:17:24 <ais523> yes
18:17:25 <ehird> not every functor is a monad
18:17:28 <ais523> well, OK
18:17:35 <ais523> but you're likely to use that sort of thing for monads in practice
18:17:42 <ehird> yes
18:17:54 <oerjan> fmap = liftM for monads
18:18:04 <ehird> lambdabot used to have (.) as fmap
18:18:06 <ehird> we called it Caleskell
18:18:12 <ehird> because cale - owner of the lambdabot installation - did that :P
18:18:25 <ehird> it was removed because it was confusing to have the type displayed not be the real type in haskell
18:18:40 <ehird> succ . [1,2,3] looks nice
18:18:57 <ehird> 18:17 HugoDaniel: oh well, its back to vim for me, bye
18:18:58 <ehird> 18:17 HugoDaniel has left IRC ("fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap vim")
18:19:20 -!- Hiato has quit (Read error: 110 (Connection timed out)).
18:19:41 <ehird> ehird: @. type pl fmap . fmap . fmap fmap fmap fmap (fmap . fmap fmap) . fmap fmap fmap
18:19:41 <ehird> 18:19 lambdabot: forall (f :: * -> *) (f1 :: * -> *) a (f2 :: * -> *) a1 (f3 :: * -> *) a2 b (f4 :: * -> *). (Functor f4, Functor f3, Functor f2, Functor f1, Functor f) => (a2 -> b) -> f (f1 (a -> a1 -> f4 a2)) -> f
18:19:44 <ehird> 18:19 lambdabot: (f1 (f2 a -> f2 (f3 a1 -> f3 (f4 b))))
18:20:33 <ais523> that's some type
18:20:53 <ehird> quite
18:21:08 <ais523> now you have to find some use for that function
18:21:10 <oklopol> another fun course project story, a lecturer decided he won't bother checking any of the projects, just passes all of them; and it was a fuckload of work
18:21:29 <ais523> I find that annoying when the lecturer decides to just fail all of them
18:21:36 <ehird> ehird: @pl \a b c d e f g h i j k l m n o p q r s t u v w x y z -> t h e q u i c k b r o w n f o x j u m p s o v e r t h e l a z y d o g
18:21:36 <oklopol> that happens?
18:21:36 <ehird> 18:21 lambdabot: (((((flip .) .) .) .) .) . ((((((flip .) .) .) .) .) .) . (((((((flip .) .) .) .) .) .) .) . ((((((((flip .) .) .) .) .) .) .) .) . (((((((((flip .) .) .) .) .) .) .) .) .) . ((((((((((flip .) .) .)
18:21:38 <ais523> or at least give them low marks, but high enough not to annoy the Externals
18:21:40 <ehird> 18:21 lambdabot: .) .) .) .) .) .) .) . (((((((((((flip .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((
18:21:42 <ehird> 18:21 lambdabot: (((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((
18:21:46 <ehird> 18:21 lambdabot: ((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((((((((flip .) .) .) .) .) .) .) .) .) .)
18:21:49 <ehird> 18:21 lambdabot: .) .) .) .) .) .) .) .) .) . ((((((((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .)
18:21:52 <ehird> 18:21 sw17ch: but merely creating a new piece of state never bothered me
18:21:54 <ehird> 18:21 lambdabot: [65 @more lines]
18:21:56 <ehird> discuss
18:22:01 <oklopol> ais523: wouldn't work for me, i'd go tell him he made a mistake grading mine.
18:22:17 <ais523> well, in this case he marked it in front of us
18:22:22 <ais523> that's how I could tell he wasn't reading it
18:22:26 <ais523> I could see what he was looking at
18:23:13 <oklopol> well okay, that just plain assholeness
18:24:19 <oerjan> ehird: you're flipping mad
18:24:33 <ehird> har har
18:24:45 <ais523> surely there's a shorter solution?
18:24:50 <ais523> lambdabot could at least remove the whitespace...
18:24:57 <ehird> ais523: no, pointless code is verbose for complex stuff
18:25:00 <ehird> also, that doesn't even type
18:25:04 <ehird> ehird: @type \a b c d e f g h i j k l m n o p q r s t u v w x y z -> t h e q u i c k b r o w n f o x j u m p s o v e r t h e l a z y d o g
18:25:05 <ehird> 18:24 lambdabot: Occurs check: cannot construct the infinite type:
18:25:07 <ehird> 18:24 lambdabot: t
18:25:09 <ehird> 18:24 lambdabot: =
18:26:41 <oerjan> hm how was that pangram y combinator again
18:26:58 <oklopol> "Esoterica. As in programming languages. Not mysticism." <<< wait *not* mysticism?
18:27:06 <oklopol> i think i'm in the wrong place :o
18:27:10 -!- oklopol has quit ("( www.nnscript.com :: NoNameScript 4.2 :: www.regroup-esports.com )").
18:27:22 <ehird> :DD
18:27:38 <ais523> wow, and that was a quit not a part
18:27:45 <ehird> he was going anyway
18:27:46 <ehird> obviously
18:27:48 <ais523> yes
18:27:52 <ehird> he'd have noticed the topic before now :P
18:27:53 <ais523> it's still great, though
18:27:56 <ehird> yes
18:28:02 <oerjan> Yk = (L L L L L L L L L L L L L L L L L L L L L L L L L L)
18:28:02 <oerjan> where:
18:28:03 <oerjan> L = .abcdefghijklmnopqstuvwxyzr. (r (t h i s i s a f i x e d p o i n t c o m b i n a t o r))
18:28:05 <ehird> yes
18:28:06 <ehird> we know :p
18:28:18 <ehird> hey, who wants to connect-cycle? I wanna test this limechat regexp :P
18:28:22 <ehird> meh, I'll try #ubuntu
18:28:22 <oerjan> first . should be lambda
18:28:25 <ehird> lotsa traffic there
18:28:49 <ais523> ehird: what does the regexp do?
18:30:22 <ehird> ais523: makes the quicklog playback look nice
18:30:43 <ehird> example:
18:30:59 <ehird> ais523: http://imgur.com/30DEN
18:31:08 <ehird> there, the playing quicklog/end of quicklog messages are actually notices from myself
18:31:11 <ehird> but I strip out the name
18:31:17 <ehird> and your message
18:31:18 <ehird> was actually
18:31:26 <ehird> ais523: [HH:MM:SS] foobar
18:31:28 <ehird> with the date of now
18:31:31 * ais523 opens in w3m to annoy ehird
18:31:35 <ehird> but it sets it to the date when it was sent
18:31:37 <ehird> ais523: it's an image
18:31:43 <ais523> so? w3m handled it anyway
18:31:45 <ais523> and it looks good
18:31:49 <ehird> how does it handle it?
18:31:55 <ais523> by opening ImageMagick
18:32:04 -!- oklopol has joined.
18:32:07 <ehird> ah
18:32:16 <ehird> but yeah, there was a slight bug with disconnecting
18:32:17 <ehird> fixed it now
18:32:18 <oklopol> <ehird> he was going anyway <<< in fact i was not, that was spontaneous; as was this
18:32:24 <ehird> heh
18:32:27 <ski__> - : 'a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i -> 'j -> 'k -> 'l -> 'm -> 'n -> 'o -> 'p -> 'q -> 'r -> 's -> ('h -> 'e -> 'q -> 'u -> 'i -> 'c ->
18:32:30 <ski__> 'k -> 'b -> 'r -> 'o -> 'v -> 'n -> 'f -> 'o -> 'w -> 'j -> 'u -> 'm -> 'p -> 's -> 'o -> 'x -> 'e -> 'r -> 't -> 'h -> 'e -> 'l -> 'a -> 'y -> 'z -> 'd -> 'o -> 'g -> 'a1 as 't) -> 'u -> 'x -> 'v -> 'w -> 'z -> 'y -> 'a1 = <fun>
18:32:35 <ehird> oh, ocaml
18:32:36 <ais523> ski__: OCaml?
18:32:38 <ehird> what don't you type?
18:32:44 <ehird> answer: nothing, -rectypes.
18:32:53 <ais523> yay, -rectypes
18:32:59 <oklopol> ais523: i'm currently on no other channels, so parting and quitting aren't that different
18:33:00 <ehird> [ehird:~] % ocaml -rectypes
18:33:00 <ehird> Objective Caml version 3.11.0
18:33:02 <ehird> # let foo a = a a;;
18:33:02 <ais523> my supervisor would be mad if I tried to use that
18:33:03 <ehird> val foo : ('a -> 'b as 'a) -> 'b = <fun>
18:33:06 <ehird> WHO LIKES TYPE SAFETY?!
18:33:07 <ehird> not me!
18:33:11 <ehird> ais523: well, you can type any LC form with it
18:33:14 <ehird> so it kind of defeats the whole point.
18:33:24 <ais523> ehird: OCaml also has `a type variables as an experimental feature
18:33:34 <ais523> they work more like Haskell typing, although it's still not quite there yet
18:33:49 <ais523> but I like it for its use of backquotes, among other things
18:33:52 <ski__> hm ?
18:34:19 <ais523> it creates partial types with options
18:34:35 <ais523> such as "function with an int or float argument, or possibly others"
18:34:40 <ski__> you mean polymorphic variant types ?
18:34:42 <ais523> yes
18:34:53 <ehird> # let foo a = 1+(a a);;
18:34:55 <ehird> val foo : ('a -> int as 'a) -> int = <fun>
18:35:01 <ehird> then (foo foo) actually works and busts the stack
18:35:11 <ehird> ohw ait
18:35:13 <ehird> that's not what i meant to type
18:35:25 <ehird> i was trying to type
18:35:25 <ehird> # let foo a = a (1+a);;
18:35:26 <ehird> :P
18:35:36 <ehird> even rectypes won't type that
18:35:43 <ski__> (ais523 : however, i don't think that has anything to do with type variables ..)
18:36:16 <ais523> well, the type variables get different names
18:36:28 <ais523> if you have an unknown polymorphic variant type, it becomes `a in type expressions not 'a
18:37:52 <ehird> hmm, how do you specify an ocaml expressin is a certain value at the repl?
18:38:26 <oerjan> um let doesn't work?
18:38:54 <ski__> ais523 : the `a there is not a type variable at all, it is a variant (/ constructor) name
18:39:02 <ehird> oerjan: like?
18:39:13 <oerjan> # let x = 2;;
18:39:44 <ais523> ski__: ah, ok, I'm not very up-to-speed on OCaml terminology
18:39:48 <ski__> # let () = ();;
18:39:50 <ais523> I'm still at the stage of having to look up operator names
18:39:58 <ais523> although I understand the language philosophy I think
18:40:20 <ski__> (ais523 : i think it is conventional to start variant names with upper case, though)
18:40:30 <ehird> oerjan: no, I want to specify the type
18:40:34 -!- kar8nga has joined.
18:40:45 <ehird> err
18:40:46 <ehird> I meant type
18:40:48 <ehird> not certain value
18:40:48 <ehird> <_<
18:40:58 <oerjan> # let x = 2 : Int;;
18:41:12 <oerjan> i think, it's been a while
18:41:24 <oklopol> how while?
18:41:39 <oerjan> 2002 or thereabouts?
18:41:58 * oklopol read "Don't use rafb.net for pasting or you die"
18:42:26 <oklopol> would probably work better!
18:42:30 <ehird> ocaml is kind of pretty
18:42:40 <ehird> in its ugliness.
18:42:51 <ehird> the semicolons balance it out more than the elegance of haskell.
18:42:57 -!- Hiato has joined.
18:42:58 <ehird> it feels like something you can do shit with.
18:43:20 <ehird> oerjan:
18:43:21 <ehird> # let x = count -1 : Int;;
18:43:22 <ehird> Error: Syntax error
18:43:25 <ehird> don't you mean
18:43:27 <ehird> let x : Int =
18:43:40 <oerjan> possibly
18:43:48 <oerjan> i thought both worked
18:44:04 <ehird> i'm trying to do varargs in ocaml :D
18:44:13 <oerjan> ouch
18:44:20 <ehird> I think it can be done
18:45:44 <oklopol> YES, OCAML CAN DO IT WITH ENOUGH HACKING!
18:47:11 <ehird> agh, you can't do
18:47:14 <ehird> #load "foo.ml";;
18:48:42 <ski__> you can annotate value and function bindings (but not pattern-bindings) with result types
18:48:51 <ski__> let x : int = 42;;
18:49:05 <ski__> let f (x : int) : bool = x > 42;;
18:49:22 <ski__> you can also use type ascription on expressions
18:49:29 <ehird> how do you do #load "foo.ml";; :P
18:49:31 <ski__> let x = (42 : int);;
18:49:36 <ehird> and ah
18:49:40 <ski__> (the parens appears to be mandatory)
18:50:55 <ski__> there's also longer forms of ascription : `( <expr> :> <type> )' and `( <expr> : <type> :> <type> )' for use with subtyping
18:53:01 * ehird looks at the ocaml h elp
18:53:55 <ski__> see "Expressions" under <http://caml.inria.fr/pub/docs/manual-ocaml/language.html>
19:00:23 <ehird> simple variadic function:
19:00:26 <ehird> let rec hello x =
19:00:26 <ehird> print_endline x;
19:00:28 <ehird> hello;;
19:00:39 <ehird> what's hard is passing info around
19:01:35 <AnMaster> hm
19:01:42 <AnMaster> FILE lacks a way to truncate files
19:01:46 <AnMaster> Deewiant, ^
19:02:59 <ehird> # hello 1 2 3 4 5 6 0 7 8 0;;
19:02:59 <ehird> 6
19:03:00 <ehird> 9
19:03:02 <ehird> - : int -> 'a as 'a = <fun>
19:03:05 <ehird> a start
19:03:20 <ais523> ehird: using recursive types to do variadic functions?
19:03:25 <ehird> yep
19:03:35 <ehird> the function in question:
19:03:35 <ehird> let rec hello_ i x =
19:03:37 <ehird> if x == 0 then print_endline (string_of_int i);
19:03:39 <ehird> hello_ (i+1);;
19:03:41 <ehird> let hello = hello_ 0;;
19:03:50 <ehird> the trouble is returning a value
19:03:56 <ehird> a continuation can help for this
19:04:01 <ehird> but you still have to return yourself
19:04:06 <ais523> I think you have to use some sort of CPS
19:04:28 <ehird> I know
19:04:30 <ehird> you have to do that in haskell
19:04:33 <ehird> but you have typeclasses
19:04:37 <ehird> so you can resolve to IO () _or_ a function
19:13:11 <oklopol> oerjan: actually, the vista minesweeper's advanced level is almost twice as big as xp's.
19:13:53 <oerjan> ic
19:18:30 <oklopol> yes, fascinating stuff.
19:18:42 <ais523> wasn't there a big row about that, or something?
19:18:54 <oklopol> like where?
19:19:13 <oklopol> anyway it's too big, or they should make sure it's actually passable.
19:19:24 -!- Asztal^_^ has joined.
19:19:57 <oklopol> i fail very rarely, but i still can't pass this, it's like playing solitaire
19:21:20 <lament> http://www.geocities.com/creationislife/games_screens/Minefield_6D_screenshot_big.gif
19:21:30 <ehird> lament: oh fuck
19:22:16 <oklopol> 6D?
19:22:27 <lament> http://www.cs.cmu.edu/~dst/DeCSS/Gallery/Stego/minesweeper1.gif
19:22:45 <ehird> oklopol: 6 dimensional
19:22:54 <ehird> lament: truffle swine keeper lol wtf
19:23:01 <ehird> oh it's decss
19:23:06 <oklopol> ehird: yes, that's why i was confused
19:23:15 <lament> yeah decss
19:23:17 <oklopol> what does it mean there
19:23:28 <ehird> it's minesweeper
19:23:31 <ehird> played in 6 dimensions
19:23:33 <ehird> nstead of the regular 2
19:23:40 <oklopol> and you can't see two of them?
19:23:59 <oklopol> well.
19:24:04 <oklopol> that is kinda hardcore i guess.
19:26:36 <ehird> can't see 2 of them?
19:26:36 <ehird> huh?
19:26:46 <ehird> oklopol: the different boards there are on different dimensions
19:26:57 <oklopol> yeah so 4 dimensinos
19:26:59 <oklopol> *dimensions
19:27:19 <oklopol> but i just realized it's the game's name, so probably just 4D mode on
19:30:27 * oerjan googles on a hunch, and is disappointed that mimesweeper is apparently an antivirus program
19:30:50 <oerjan> or something emaily
19:31:08 <ais523> obvious pun
19:31:36 <oerjan> yes, but a game where you swept mimes would be so much better, right?
19:31:44 <ais523> Minepolisher
19:31:48 <oklopol> how would that go?
19:31:59 <oerjan> miMes, ais523
19:32:00 <ski__> Minedigger
19:32:37 <oerjan> oklopol: silently, at least
19:32:38 <oklopol> well. obviously you could make somekinda adventure game or rpg or something
19:32:38 -!- Sgeo has joined.
19:32:44 <oklopol> but those are stupid
19:33:14 <oerjan> and bloody. definitely bloody.
19:34:16 <oerjan> ok i found one relevant link http://blogs.adobe.com/jnack/2006/10/microsoft_mimes.html
19:36:44 -!- Azstal has quit (Connection timed out).
19:38:49 <Sgeo> Why does Google Maps seem more useful to me than Google Earth?
19:40:01 <lament> because it's simpler and has better ui?
19:40:33 <Sgeo> I can't seem to get public transit info on Google Earth :(
19:40:42 -!- ais523 has quit ("dinner").
20:04:37 <Leonidas> hmm, my time reply looks ok. At least to the extent that this crappy timer gives me
20:05:37 <Leonidas> and is set to local time, in case you wonder
20:15:25 <AnMaster> whoa lot of scrollback
20:16:01 <AnMaster> Sgeo, but you can't do it in 3D on google maps!
20:16:04 <AnMaster> :P
20:16:24 <AnMaster> actually they are useful for different things IMO
20:17:59 <AnMaster> <lament> http://www.cs.cmu.edu/~dst/DeCSS/Gallery/Stego/minesweeper1.gif <-- what?
20:18:22 <ehird> it's DeCSS
20:18:25 <ehird> steganographied
20:18:35 <AnMaster> ehird, oh?
20:18:39 * AnMaster google
20:18:45 <AnMaster> googles*
20:18:48 <ehird> you don't know what decss is?!?!?!?!
20:19:02 <AnMaster> ehird, isn't it something related to dvds?
20:19:07 * Sgeo doesn't know how to get to DeCSS from the fake Minesweeper thing
20:19:23 <AnMaster> yeah key thing or something
20:19:37 <AnMaster> ehird, oh you mean that hex string is hidden in that somewhere?
20:19:44 <ehird> no
20:19:46 <ehird> the whole source code
20:19:50 <AnMaster> oh
20:19:58 <AnMaster> in the numbers and question marks
20:19:59 <AnMaster> I guess
20:20:02 <ehird> no
20:20:03 <ehird> in the image data.
20:20:07 <AnMaster> ah ok
20:20:08 <ehird> do you not know what steganography is
20:20:12 <AnMaster> ehird, yes
20:20:13 <AnMaster> I do
20:20:32 * Sgeo has no clue about anything steganography related
20:21:54 <oerjan> it _would_ be more awesome if it was in the numbers and question marks
20:22:18 <AnMaster> oerjan, indeed
20:22:27 <AnMaster> oerjan, or both!
20:24:20 <AnMaster> ehird, but if it was in the numbers and question marks, wouldn't it still be steganography? "Steganography is the art and science of writing hidden messages in such a way that no-one apart from the sender and intended recipient even realizes there is a hidden message", well I think hiding it in the visible playing field state would be steganography...
20:27:13 -!- ais523 has joined.
20:34:43 <bsmntbombdood> who wants to think up an algorithm for steganographizing in text?
20:35:31 <ais523> bsmntbombdood: base it on British/American spellings
20:35:57 <bsmntbombdood> so you can squeeze 1 bit in every 100 words?
20:36:23 <bsmntbombdood> not even, because you don't have access to the original text
20:36:41 <Sgeo> Magic soon. Bye all
20:37:16 -!- Sgeo has quit ("Leaving").
20:39:09 <bsmntbombdood> and mixing british and american spellings is suspicious
20:40:47 <AnMaster> bsmntbombdood, depends
20:41:01 <AnMaster> I have seen source code in some projects mixing it inside one function
20:41:04 <bsmntbombdood> spelling it color once and then colour on the next is like wtf?
20:41:05 -!- ais523 has quit (Read error: 104 (Connection reset by peer)).
20:41:10 <AnMaster> bgColour and fgColor
20:41:15 -!- ais523 has joined.
20:41:15 <AnMaster> both local variables in same function
20:41:28 <AnMaster> then there is mysql with ANALYZE and ANALYSE
20:41:34 <AnMaster> that does different things
20:41:45 <AnMaster> iirc
20:42:02 <AnMaster> bsmntbombdood, and on irc I often end up mixing spellings
20:42:13 <AnMaster> though I try to keep to British English
20:43:40 <AnMaster> ais523, there?
20:43:43 <ais523> yes
20:43:54 <AnMaster> ais523, I reported a bug in bash 4 a few days ago and got a patch to test today..
20:43:56 <AnMaster> but
20:44:05 <AnMaster> + static int
20:44:05 <AnMaster> + skip_matched_pair (string, start, open, close, flags)
20:44:05 <AnMaster> + const char *string;
20:44:05 <AnMaster> + int start, open, close, flags;
20:44:05 <AnMaster> + {
20:44:06 <AnMaster> wth
20:44:10 <AnMaster> new code!
20:44:11 <AnMaster> like that
20:44:14 <AnMaster> crazy
20:44:20 <bsmntbombdood> ugh
20:44:27 <bsmntbombdood> i hate k&r style declarations
20:44:37 <AnMaster> bsmntbombdood, all of bash 4 uses it it seems
20:45:07 <AnMaster> also:
20:45:08 <AnMaster> + static int skip_matched_pair __P((const char *, int, int, int, int));
20:45:13 <AnMaster> I wonder wth that does
20:45:23 <AnMaster> since it uses old style in the implementation
20:47:35 <AnMaster> #if !defined (__P)
20:47:35 <AnMaster> # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) || defined (PROTOTYPES)
20:47:35 <AnMaster> # define __P(protos) protos
20:47:35 <AnMaster> # else
20:47:35 <AnMaster> # define __P(protos) ()
20:47:36 <AnMaster> # endif
20:47:38 <AnMaster> #endif
20:47:40 <AnMaster> ew
20:50:45 <bsmntbombdood> barf
21:01:02 -!- Hiato has quit ("Leaving.").
21:04:37 -!- kar8nga has quit (Remote closed the connection).
21:11:58 <AnMaster> <oerjan> it _would_ be more awesome if it was in the numbers and question marks <-- it is, See http://www.cs.cmu.edu/~dst/DeCSS/Gallery/Stego/
21:12:08 <AnMaster> ehird, you were wrong :P
21:13:29 <GregorR> This wins the "weird spam of the day" award: "Two astronauts ramming in space shuttle"
21:13:40 <AnMaster> GregorR, indeed
21:15:38 <oerjan> sounds a bit sheepish
21:40:12 <ehird> 21:13 GregorR: This wins the "weird spam of the day" award: "Two astronauts ramming in space shuttle"
21:40:14 <ehird> hot
21:40:39 <bsmntbombdood> fuck hot
21:40:48 <bsmntbombdood> fucking*
21:41:22 * bsmntbombdood listens to some android lust
21:42:20 <ehird> so, hi.
21:42:25 <ehird> ais523: I asked #ocaml
21:42:35 <ehird> you know how printf has a special hack to do this because it's primitive?
21:42:44 <ehird> they think I can use its type to make arbitrary variadic functions
21:42:44 <ehird> :-D
21:43:03 <bsmntbombdood> ???
21:43:08 <bsmntbombdood> printf isn't primitive
21:43:17 <ehird> bsmntbombdood: in ocaml, the format6 type it uses absolutely is
21:43:26 <ehird> because you just Can't Do That normally
21:44:01 <bsmntbombdood> va_arg
21:44:24 <ehird> ehird: ais523: I asked #ocaml
21:44:26 <ehird> ehird: bsmntbombdood: in ocaml,
21:44:33 <ehird> do you think I might be referring to... say... ocaml?
21:44:34 <ais523> ehird: I noticed the first time
21:44:34 <bsmntbombdood> i don't get it
21:44:36 <ehird> as opposed to C.
21:44:40 <ehird> OCAML IS A PROGRAMMING LANGUAGE.
21:44:48 <ehird> ais523: I was talking to bsmntbombdood
21:44:53 <ais523> ok
21:44:59 <ais523> surely it should have been
21:45:07 <ais523> <ehird> bsmntbombdood: ehird: ais523: I asked #ocaml
21:45:19 <ehird> nobody else was talking
21:45:22 <ehird> bsmntbombdood: do you get it now?
21:45:31 <bsmntbombdood> no
21:45:42 <ehird> bsmntbombdood: ocaml is a programming language. i am talking about ocaml, not c.
21:45:45 <ais523> why the interest in OCaml, by the way?
21:45:49 <ehird> ocaml has a printf. i am using it for stuff.
21:45:51 <ehird> nothing to do with C.
21:45:53 <ehird> do you get it now?
21:45:58 <bsmntbombdood> no
21:46:04 <ehird> oh stfu
21:46:08 <bsmntbombdood> what language doesn't allow variadic functions?
21:46:12 <ehird> plenty
21:46:23 <ehird> for example, most well-typed ones, especially those of the ML/Miranda family.
21:47:56 <ehird> ais523: OCaml is interesting.
21:48:02 <ais523> ah, ok
21:48:04 <ais523> I agree
21:48:12 <ais523> it has a major flaw, which is that it isn't Haskell
21:48:16 <ais523> but apart from that, I like it
21:48:19 <ehird> I dunno, i prefer its syntax
21:48:27 <ehird> and laziness isn't always the best thing
21:48:29 <ais523> I don't, the operator precedences are a nightmare
21:48:39 <ais523> especially given that no operators are overloaded
21:48:48 <ais523> and so there are about a million of them to fail to memorise
21:48:58 <ehird> well, okay
21:49:01 <ehird> but apart from that
21:49:03 <ais523> I mean, what sort of language has different operators for adding integers and adding floats?
21:49:03 <ehird> the syntax lokos nice
21:49:05 <ehird> *looks
21:49:22 <ais523> the | at the start of a match thing is really clever, though, I like that
21:49:32 <oerjan> <ais523> I don't, the operator precedences are a nightmare
21:49:44 <ais523> oerjan: is a pun coming?
21:50:01 <oerjan> how can that be worse than haskell given that ocaml's precedences are predefined and haskell's are not?
21:50:16 <ais523> oerjan: just try to remember the precedences of else and ;
21:50:21 <ais523> or comma and space
21:50:27 <ais523> or a user-defined function and +.
21:50:30 <oerjan> else is an operator?
21:50:34 <ais523> or any of a billion other combinations
21:50:42 <ais523> and no, if-then-else is an operator
21:50:52 <ais523> but I always screw up the else-; combination
21:51:00 <ais523> oh, also match and |
21:51:14 <ais523> it's really easy to accidentaly nest matches and forget to end them
21:51:28 <ehird> Backup scheme: get gigs of porn, steganogarize your encrypted backup in chunks of them, post to the interwebs.
21:51:49 <ehird> Restore method: Find your images (now mirrored in about five million places), extract encrypted backup, restore.
21:51:53 <ais523> like the Linus backup scheme, but less open-source related?
21:52:00 <ehird> ais523: more effective
21:57:25 <AnMaster> <ais523> I mean, what sort of language has different operators for adding integers and adding floats? <-- Ocaml and ASM?
21:57:34 <AnMaster> not that they are operators in ASM...
21:57:40 <ais523> well, ok, asm can get away with it, it has a good excuse
21:57:42 <ais523> but Ocaml?
21:57:45 <ais523> *OCaml?
21:57:55 <AnMaster> not really
21:58:21 <AnMaster> couldn't it figure out which you wanted?
21:58:32 <ais523> it's hilariously strongly type
21:58:33 <ais523> *typed
21:58:42 <AnMaster> I agree that integer division and float division may be good to separate
21:58:49 <AnMaster> like div and / in erlang
21:58:59 <AnMaster> but apart from that...
21:59:22 <ehird> well you need typeclasses
21:59:27 <ehird> which at the time of ocaml's inception iirc were uncommon
22:00:09 <AnMaster> <ais523> like the Linus backup scheme, but less open-source related? <-- which is?
22:00:40 <ais523> AnMaster: write something so good that everyone downloads their own copies
22:00:51 <ais523> so that if you lose it, you can get it back from one of your adoring fans
22:01:09 <AnMaster> ag
22:01:10 <AnMaster> ah'
22:01:13 <AnMaster> ah*
22:05:45 <AnMaster> ais523, has torvalds ever needed that?
22:05:51 <ais523> probably not
22:05:59 <ais523> it's still an ingenious strategy, though
22:06:04 <AnMaster> he could just check it out from git
22:06:31 -!- lament has quit (Remote closed the connection).
22:06:34 <ais523> what if he loses git?
22:06:44 -!- lament has joined.
22:07:24 <AnMaster> ais523, he could download the last release?
22:07:38 <ais523> AnMaster: well, that is his backup system
22:07:46 <AnMaster> for those yes
22:07:46 <ais523> the fact that other people have releases of git to download
22:08:01 <AnMaster> I still like the scheme ehird suggested
22:08:20 <AnMaster> but where would I get many GB of porn... Oh wait.. the internet?
22:08:52 <ais523> but then it would have someone else's files steganographically encrypted on it
22:11:30 <AnMaster> ais523, well what if both were layered?
22:13:11 <AnMaster> ehird, about printf and varadic. You don't need it. io:format("~s ~s~n", ["format", "string"])
22:13:19 <ehird> AnMaster: no shit
22:13:21 <AnMaster> two arguments, one a list
22:13:30 <ehird> congrats, einstein...
22:13:34 <ehird> AnMaster: that's not type-safe
22:13:43 <ehird> in ocaml, (Printf.printf "" 2) gives a compile-time error
22:13:47 <ehird> Printf.printf "%i" "hello", too
22:14:00 <bsmntbombdood> you can't generate format strings at runtime?
22:14:00 <ais523> actually, I wouldn't put it past OCaml to have an infinite number of printf operators
22:14:02 <bsmntbombdood> that's stupid
22:14:06 <ehird> yes, you can
22:14:11 <AnMaster> err of course you can...
22:14:14 <ais523> one for each possible combination of arguments
22:14:28 <AnMaster> ais523, hah
22:14:29 <ehird> ais523: well, it does
22:14:34 <bsmntbombdood> then how can it be a compile-time error?
22:14:35 <ehird> they're just folded into one
22:14:46 <AnMaster> bsmntbombdood, it can check when possible...
22:14:47 <ehird> bsmntbombdood: it's kind of complicated. :)
22:14:58 <bsmntbombdood> gcc does the same thing for C anyway
22:15:08 <ehird> er, no
22:15:15 <bsmntbombdood> er, yes
22:15:23 <AnMaster> GCC can warn about format strings, so why couldn't you do it as an error according to same model?
22:15:30 <AnMaster> when the string is constant
22:15:46 <AnMaster> not sure how it would handle if the format string was user input...
22:15:54 <bsmntbombdood> you can't
22:16:04 <AnMaster> unless you have a special *type* for a format string with %s %s %d %s
22:16:06 <AnMaster> or such
22:16:13 <ais523> AnMaster: format string = user input = really bad idea
22:16:18 <AnMaster> ais523, yes I agree
22:16:19 <AnMaster> still
22:16:28 <oklopol> but taking user input and transforming it to a format string might not be.
22:16:33 <ehird> oklopol: you can do that
22:16:36 <ehird> just not use user input verbatim
22:16:40 <ehird> there's type composition operators to do tha
22:16:41 <ehird> t
22:16:42 <AnMaster> well true
22:16:44 <oklopol> yes, but you couldn't type-check directly
22:16:55 <bsmntbombdood> ais523: you can allow the user to build a format string in a safe way
22:17:06 <ehird> and ocaml does that
22:17:07 <oklopol> because the transforming process would need to be understood
22:17:08 <ehird> so stop saying that
22:17:46 <bsmntbombdood> test.c:4: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
22:17:55 <oklopol> ehird: sorry, i'm talking about c++. thought that was discussed too.
22:17:55 <ehird> we know C, bsmntbombdood
22:18:04 <bsmntbombdood> <bsmntbombdood> gcc does the same thing for C anyway
22:18:04 <bsmntbombdood> <ehird> er, no
22:18:12 <ehird> that's not the same thing
22:18:16 <oklopol> i don't know anything about ocaml
22:18:21 <bsmntbombdood> how is that not the same thing?
22:18:33 <ehird> apparently not t alking about things you don't understand is a thing of the past, I see
22:19:12 <ais523> ehird: I don't know what you're talking about, but I dispute that
22:19:25 <ehird> ais523: what the fuck are you talking about? well, you're wrong.
22:19:36 <ehird> we're such comedians.
22:19:38 <oklopol> ehird: are you commenting me or bsmntbombdood?
22:19:40 <ais523> ^ the difference between me and ehird
22:19:50 <ehird> ais523: SHUT UP YOU IDIOT, er
22:20:00 <ais523> *hi
22:20:05 <ais523> the keys are like right next to each other
22:20:13 <oklopol> :)
22:20:20 <oklopol> well going anyway, hf ~>
22:20:35 <ehird> anyway printf is stupid.
22:20:54 <ehird> hurrrr why would we use rich types to denote the output formatting hurrr let's just parse strings after % HURRRR
22:22:26 <ehird> ocaml is ridiculously fast
22:23:31 <ais523> it uses the even pointer trick
22:23:37 <ais523> that's why integers are 31-bit signed integers
22:23:41 <ehird> mm
22:26:13 <AnMaster> ais523, hm?
22:26:17 <AnMaster> oh I see
22:26:56 <AnMaster> ais523, but wouldn't it be slower to compute 31-bit integers... I mean the CPU has instructions for working at 32-bit and you need to mask it off every time you store it back
22:27:09 <ais523> bitshift, yes
22:27:19 <ais523> but OCaml programs don't spend most of their time doing integer arithmetic
22:27:20 <AnMaster> well true
22:27:30 <ais523> so it's a speed gain overall, it makes the garbage collection much faster
22:27:36 <AnMaster> ais523, any ocaml program that did would have issues
22:27:53 <ehird> no they wouldn't
22:27:56 <ehird> they'd just use nativeints
22:27:59 <AnMaster> oh?
22:28:04 <ehird> ais523: btw why does ocaml even need type flags, just for the GC?
22:28:05 <ais523> or FFI to C
22:28:12 <ehird> since all typechecking is at compiletime
22:28:15 <AnMaster> hm
22:28:18 <ais523> ehird: it's not type flags
22:28:23 <ais523> it's size flags
22:28:26 <ehird> it's a fixnum flag :P
22:28:30 <ais523> so the GC knows how much to deallocate
22:28:36 <ehird> ah
22:29:20 * ehird figures out how to type-annotate ocaml functions
22:29:20 <bsmntbombdood> what's the even pointer trick?
22:29:22 <ehird> it's hard...
22:29:30 <ehird> bsmntbombdood: malloc gives you even pointers, so use the lowest bit as a flag
22:29:38 <ehird> so, for a fixnum you do
22:29:40 <bsmntbombdood> every object is aligned on 2 bytes?
22:29:41 <ehird> (i<<1)+1
22:29:49 <ehird> so you can just check the lowest bit
22:29:50 <ais523> bsmntbombdood: yep
22:29:52 <ehird> to see if you have a fixnum or an object
22:29:56 <bsmntbombdood> ah
22:30:37 * ehird is now certain that what he's always thought is true: he can't learn languages from tutorials
22:30:49 <ehird> sure, I'll glance over them to get started, but then I just whack out code and google if it doesn't work
22:30:51 <ais523> well, I learnt OCaml from some pretty awful existing code
22:30:54 <ehird> gradually I suck less
22:30:57 <ehird> and then one day I write a program
22:31:00 <ehird> and realise I know the language
22:31:21 <ehird> that happened with python, I tried going through diveintopython but it just went over my head for some reason, so I gave up, still, I wrote a few tiny python programs
22:31:24 <ehird> then one day... bam
22:31:29 <ehird> I can write python, how did that happen?
22:32:03 <bsmntbombdood> ...
22:34:06 <ehird> what
22:38:04 <AnMaster> ehird, that about tutorial: very true
22:38:15 <AnMaster> tutorial to get an idea of wth it is about at all
22:38:25 <AnMaster> same as you then
22:39:15 <AnMaster> and then read some reference manual to find out what bits you missed
22:39:48 <ehird> ais523: how do you give a function a type sig in ocaml?
22:40:14 <ais523> using modules and interfaces, IIRC
22:40:20 <ais523> it's a rather needlessly complex mechanism
22:40:25 <ehird> err
22:40:28 <ehird> I just want to annotate a typ
22:40:28 <ehird> e
22:40:45 <ehird> let sprintf fmt : ((string -> string) -> 'a) -> 'a = fmt (fun s -> s);;
22:40:46 <ehird> this almost works
22:40:52 <ehird> except it types (sprintf fmt)
22:40:56 <ehird> not (sprintf)-and-bind-the-arg-to-fmt
22:41:28 <oerjan> let sprintf (fmt : (string -> string) -> 'a)) : 'a = ...
22:41:36 <ehird> ahh
22:41:49 <ehird> I like that
22:41:51 <ehird> it's elegant
22:42:04 -!- BeholdMyGlory has changed nick to |BeholdMyGlory|.
22:42:31 <oerjan> s/))/)/
22:45:49 -!- |BeholdMyGlory| has changed nick to BeholdMyGlory.
22:48:08 * oklopol has learned languages from tutorials
22:48:24 <oklopol> but i've never learned a paradigm from tutorials
22:48:41 <ais523> how do you learn paradigms?
22:48:48 <oklopol> by playing with them?
22:48:54 <ais523> sounds good
22:49:33 <oklopol> i usually like to think in terms of esolangs for paradigms
22:49:44 <oklopol> but writing program snippets works well too
22:53:47 <GregorR> Anybody here who can draw an egg stream?
22:54:12 <oerjan> what the heck is that
22:54:34 <GregorR> I don't know.
22:54:37 <GregorR> So can you draw it?
22:55:09 <ais523> GregorR: you're starting to sound worryingly like David Morgan-Mar, stop it
22:55:09 <ehird> GregorR: i can!
22:55:21 <ehird> (egg . (lambda () (egg . (lambda () (egg . ())))))
22:55:26 <GregorR> "Egg stream" is a pun for "extreme" :P
22:55:30 <oerjan> ais523: it's a well-known danger to esolangers
22:56:28 <ais523> that was presumably meant to be a pun
22:56:39 <oerjan> not really
22:56:40 <ehird> okay, I almost have an ocaml thingy that can do:
22:56:57 <ehird> # sprintf (lit "Your lucky number is " % int % "!") 3;;
22:56:57 <oerjan> just a subcultural inside joke, i guess
22:57:00 <ehird> type-safely, of course
22:57:08 <ehird> err
22:57:12 <ehird> % int % lit "!"
22:57:13 <ehird> ofc
22:57:38 <bsmntbombdood> i think you mean 'egg
22:57:50 <ehird> bsmntbombdood: well, you can't evaluate (x . y) sanely anyway
22:57:52 <ehird> that's (egg lambda ())
22:57:59 <ehird> i was just using (lambda () ...) as shorthand for the actual object
22:58:02 <ehird> in a quoted form
22:58:19 <bsmntbombdood> `(egg ,(eggs))
22:59:09 <oerjan> not ,@(eggs) ? (iirc)
23:00:04 <bsmntbombdood> oh, yeah
23:00:12 <bsmntbombdood> or `(egg . ,(eggs))
23:00:19 <oerjan> is that legal?
23:00:54 <bsmntbombdood> yes
23:06:47 -!- Mony has quit ("Quit").
23:09:09 <AnMaster> <ais523> GregorR: you're starting to sound worryingly like David Morgan-Mar, stop it
23:09:11 <AnMaster> huh?
23:09:27 * AnMaster reads
23:09:36 <AnMaster> I can't see any similarities
23:10:02 <ais523> AnMaster: about not knowing what something is and asking people to draw it anyway
23:10:12 <ais523> it's a very DMMy sort of thing to do
23:10:22 * ehird meditates on
23:10:22 <ehird> let (%) (a : (string -> string) -> 'a) (b : (string -> string) -> 'b) -> (string -> string) -> 'b
23:10:33 <ehird> specifically, implementing it as a composition operator.
23:10:52 <AnMaster> ais523, where did he do that?
23:10:58 <AnMaster> DMM I mean
23:11:09 <ais523> he didn't do that specifically
23:11:14 <ais523> it's just the sort of thing he would do
23:11:40 <AnMaster> ah
23:11:50 <AnMaster> ais523, I guess I haven't had much to do with him
23:11:56 <AnMaster> apart from reading his comics
23:14:05 <ehird> I wonder if it's possible
23:14:10 <ehird> think I need another type instead
23:14:25 <oerjan> er, don't you just need to throw away the 'a?
23:15:02 -!- FireFly has joined.
23:15:57 <ehird> except, actually, I can't
23:16:03 <ehird> i have to absorb both
23:16:03 <ehird> hrm
23:16:13 <ehird> yes, this will not work, I think
23:16:19 <ehird> ahh wait!!
23:16:27 <oerjan> oh wait you don't actually get a string out
23:16:35 <ehird> oerjan: for
23:16:47 <ehird> (int -> string) fmt
23:16:48 <ehird> &
23:16:50 <ehird> (string -> string) fmt
23:16:54 <ehird> it should be
23:16:58 <ehird> (int -> string -> string) fmt
23:16:59 <ehird> for
23:17:00 <ehird> string fmt
23:17:06 <ehird> and (int -> string) fmt
23:17:07 <ehird> it should be
23:17:09 <ehird> (int -> string) fmt
23:17:14 <ehird> I think I need a different type for fmt
23:17:20 <AnMaster> is this some lisp or haskell?
23:17:28 <AnMaster> or ocaml?
23:17:40 <ehird> sigh. ocaml, as above.
23:19:07 <AnMaster> right
23:20:07 -!- Leonidas has quit ("An ideal world is left as an exercise to the reader").
23:20:50 <oerjan> that seems somewhat illogical. Wouldn't an ideal world be right, not left?
23:21:35 <ehird> groan
23:22:11 <AnMaster> um wth?
23:22:34 <AnMaster> I don't get the joke
23:22:56 <AnMaster> oh wait
23:23:00 <oerjan> Welcome to today's episode, where we learn that AnMaster cannot see quit messages :D
23:23:15 <ais523> I mentally filter them, apart from oerjan's
23:23:19 <AnMaster> what?
23:23:25 <ais523> because oerjan normally leaves comments in quit messages
23:23:26 <AnMaster> * Leonidas has quit ()
23:23:28 <AnMaster> what about it
23:23:42 <oerjan> = Leonidas [n=Leonidas@unaffiliated/leonidas] quit ("An ideal world is left as an exercise to the reader")
23:23:51 <AnMaster> freenode is buggy when it comes to quit messages as you probably know
23:23:52 <AnMaster> ...
23:24:17 <oerjan> er i knew it censored some of them but i didn't know it did so inconsistently
23:24:26 <AnMaster> oerjan, oh yes it does
23:24:39 <AnMaster> and not censored, randomly lost
23:25:22 <oerjan> by censored, i mean "don't turn up unless you've been logged in a while"
23:25:36 <AnMaster> oerjan, it does that too?
23:25:36 <ais523> that's the person giving the quit message, though
23:25:50 <ais523> what I don't understand is how AnMaster didn't see it and I and oerjan and ehird did
23:25:52 <oerjan> s/you've/the quitter has/
23:25:59 <oerjan> indeed
23:25:59 <ehird> ais523: AnMaster's bouncer is buggy?
23:26:00 <AnMaster> haven't you noticed Success as quit message sometimes as well
23:26:10 <ais523> AnMaster: oh, that's a bug in Freenode, almost certainly
23:26:12 <AnMaster> ehird, no, freenode is
23:26:15 <ais523> it's doing a perror
23:26:19 <ais523> only errno is 0
23:26:21 <AnMaster> ais523, yes indeed. And it also looses quit message
23:26:22 <ehird> strerror
23:26:23 <oerjan> i've seen Success
23:26:23 <ehird> not perror
23:26:28 <ais523> well, ok
23:26:37 <ais523> I mentally connect stdout/stderr to whereever they ought to be going
23:27:01 <ehird> ais523: perror outputs a colon and a space
23:27:02 <AnMaster> ais523, yes I know about hyperion
23:27:03 <ehird> :P
23:27:09 <AnMaster> (the server software used)
23:27:31 <ais523> ehird: ah, ok
23:27:37 <oerjan> clog saw the quit message too
23:27:38 <ais523> what about perror("\b\b")?
23:27:53 <ehird> heh
23:28:07 <AnMaster> parts of it could win "caused most judges to go insane" in IOCCC ...
23:28:18 <ais523> what's happened to the IOCCC, anyway?
23:28:23 <AnMaster> no idea
23:28:26 <ais523> there was even a Slashdot story about it seeming to have disappeared
23:28:52 <AnMaster> ais523, I can get to http://www.ioccc.org/
23:29:03 <AnMaster> intentional misinterpret yeah
23:29:33 <ehird> i miss the5k
23:29:51 <oerjan> last news from April 2008
23:30:07 <ais523> which was adding more mirrors to handle the load of releasing the winning programs!
23:30:23 <AnMaster> the5k?
23:30:48 <ehird> it was a competition
23:30:56 <ehird> make a web-based (javascript, etc, sometimes) toy
23:30:58 <ehird> in under 5kb
23:31:01 <AnMaster> ah
23:31:03 <ehird> there was Wolfenstein5k
23:31:09 <ehird> (3d wolfenstein clone in 5kb of js)
23:31:16 <ehird> (wolfenstein = first person shooter)
23:31:21 <ehird> stuff like that
23:31:35 <AnMaster> wow
23:31:42 <ehird> it ran a few times
23:31:45 <ehird> then disappeared
23:32:02 <AnMaster> I have the source for previous IOCCC around somewhere iirc
23:32:07 <AnMaster> in case it is going
23:32:23 <ais523> well, that anagolf underload interpreter amazes me
23:32:23 <AnMaster> yes all the way from 1987
23:32:25 <oerjan> hm clearly there must be a connection. they have all been abducted by aliens!
23:32:26 <ais523> even if it randomly segfaults
23:32:38 <AnMaster> no 1993?
23:32:51 <AnMaster> $ ls ~/ioccc/
23:32:52 <AnMaster> 1987 1988 1989 1990 1991 1992 1994 1995 1996 1998 2000 2001 2004
23:33:01 <AnMaster> no idea about other years
23:33:03 <ais523> there weren't competitions some years
23:33:05 <AnMaster> ah
23:33:12 <ais523> because the judges were so disorganised
23:33:16 <AnMaster> hah
23:35:01 <oerjan> by the news there must have been one in 2006, unreleaed
23:35:48 <oerjan> which was presumably no. 18 since 17 was 2004 and 19 had "just" closed
23:36:56 <oerjan> they seem to be about as organized as the Essies, these days :/
23:36:59 -!- ais523 has quit ("DainDwarf's default quit message").
23:37:54 <AnMaster> oerjan, Essies?
23:38:21 <oerjan> our wiki
23:38:29 <AnMaster> oh ok
23:38:36 <AnMaster> are we supposed to be organized?
23:39:15 <oerjan> nah but nearly all our contests have crashed before judging...
23:39:45 <AnMaster> oh those contests
23:39:52 * AnMaster doesn't care much for them
23:41:03 <oerjan> the second one had some good entries even it wasn't judged. for the later ones we don't even have the entries.
23:41:30 <AnMaster> where did the entries go?
23:42:11 <oerjan> they do have wiki articles
23:42:18 <oerjan> http://esoteric.voxelperfect.net/wiki/Essies
23:42:29 <oerjan> well the known ones anyhow
23:42:38 <oerjan> not sure if that were all
23:46:39 * oerjan fixes catseye link for granola/m
23:47:40 <AnMaster> http://catseye.tc/projects/hunter/doc/hunter.html <--- what does the pinwheel do?
23:55:56 <FireFly> -> bed
23:56:15 * FireFly closes his DS
23:56:21 -!- FireFly has quit ("DSOrganize IRC").
←2009-02-26 2009-02-27 2009-02-28→ ↑2009 ↑all