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