00:05:23 -!- adam_d_ has joined. 00:13:07 * pikhq has created a Linux distro less featureful than DOS. Hooray. 00:13:35 wat 00:14:31 So I was curious how silly-small I could get something. 00:14:57 Funny, that's exactly what she said. 00:15:06 Also, just have a kernel with no userland, that'll be small :P 00:16:14 Gregor: Close. 00:18:40 combinatorial explosion of linux distros/penises 00:19:47 -!- adam_d_ has changed nick to adam_d. 00:26:18 pikhq: what did you come up with? 00:27:08 Currently at 344 kIb... 00:27:27 It possesses the following programs: /bin/sh, /bin/clear. 00:27:32 -!- Gracenotes has quit (Read error: Connection reset by peer). 00:27:47 And its kernel has the following features: initramfs, ELF support. 00:27:53 why /bin/clear? 00:28:13 Otherwise, the BIOS text doesn't get cleared in Qemu. 00:28:19 Tragic :P 00:28:22 lol 00:28:46 I hope /bin/clear is a shell script ... 00:28:47 actually, I would have to say sh makes it more feature rich than dos 00:29:04 Quite possibly 00:29:20 calamari: Heavily, heavily pared down shell. 00:29:21 Ohwait, echo isn't built into sh, is it :P ... so /bin/clear couldn't be a shell script probably. 00:29:24 cat is pretty useful too ... 00:29:31 what kernel? 00:29:36 2.6? 00:29:40 2.6.31 ATM. 00:29:49 I may experiment with other kernels. 00:29:49 wow, didn't realzie 2.6 could get that small 00:30:00 Though 2.6 has the nice feature that you can *compile in the initramfs*. 00:30:10 There's a bunch of "tiny" patches to 2.6 that help downsize it. 00:30:25 Those tiny patches were put into the main tree a while back. 00:30:38 ORLY? 00:30:39 Sweet. 00:30:50 I'm going to compare compression formats for the initramfs... 00:30:51 So it just takes some special .config frunging. 00:31:26 I may be at the point where the compression overhead of LZMA negates the benefits for the filesystem. :P 00:31:33 all you need now is to add egobfi 00:31:40 8-D 00:31:49 How much does TCC cost? 00:31:50 Hmm. 00:32:00 Oh, but eh, headers >_> 00:32:13 What's the world's smallest scripting language that borders on usable? :P 00:32:13 339 KB without compressing the root filesystem. 00:32:22 sh. 00:32:22 but anyhow, impressive.. could boot that off a 5 1/4" floppy :) 00:32:47 Maybe I missed something, but does that 339K /include/ the kernel? 00:33:09 I thought that was the FS, which actually sounded pretty big for sh and clear :P 00:33:49 Gregor: Yes. 00:33:52 How much of busybox can you stuff in before you can't boot from a floppy? 00:34:00 All of it. 00:34:08 WELL THEN GET STUFFING 00:34:16 Gregor: tomsrtbt 00:34:30 calamari: That's ancient, and has ancient utils, things tend to grow over time :P 00:34:41 BTW: What is maximum one can put into floppy (using normal 1.44M floppy drive)? 00:34:43 Actually. I'm going to go check and see if dietlibc and manual-built dash gets me a smaller shell. :P 00:34:43 Also, isn't it a superformatted floppy? 00:34:50 Ilari: 2.88M 00:34:50 http://wormtube.worms2d.info/?id=4 [some NSFW language] 00:34:55 Ilari: I think you can get like 2 mb 00:35:02 there's a man page somewhere which goes into ridiculous difficulty 00:35:07 *ridiculous detail 00:35:13 BTW: What is maximum one can put into floppy (using normal 1.44M floppy drive)? <-- this question should be stupid, and yet it's not ... 00:35:18 My first computer had 2.88M floppy drive... :-) 00:35:22 talking about things like interleaving sectors, and forcing the drive head past the normal limits 00:35:31 (which might break your drive, or might give you an extra couple of tracks) 00:35:41 Gregor: 2.88? wow.. so there must be no error correction at all? 00:36:03 calamari: Actually, floppy drives are just horribly overengineered. 00:36:05 Even today. 00:36:25 -!- ais523 has quit (Remote host closed the connection). 00:36:37 Aaaw, with dietlibc I can only get the shell down to 96k. :( 00:36:41 the drives, maybe.. but the media, no 00:36:46 Apparently the I/O interface supports up to 255 sectors and 256 tracks (but only up to two sides). 00:36:49 calamari: By the time floppies died, most floppy drives supported 2.88MB, there just were no 2.88MB disks ... 00:37:04 Gregor: yeah but he said standard 1.44 hehe 00:37:07 (currently, my busybox is down to 72k.) 00:37:20 calamari: I assume "1.44M" means "3 1/4 in" :P 00:37:37 Good quality 1.44MB disks formatted as 2.88MB without bad sectors (and appeared to work). 00:37:49 Hmm. I'm going to (quickly) overengineer "clear". 00:37:54 Actually, 90mm. :-) 00:38:47 Ahem-hem! Everybody quiet, it's ANNOUNCEMENT TIME. http://iki.fi/deewiant/ 00:38:48 For one thing: CCBI 2.0, at long last. Along with the usual Mycology update on the side. Too tired to build non-x86-64 bins now, but will do so. 00:38:51 Also: Fungicide, the Befunge-98 benchmark suite! 00:38:53 (CCBI 2.0 completes it in about one-fifteenth of the time that cfunge does. SO YEAH. AnMaster: macro-optimization > micro-optimization.) 00:38:56 Finally: I am tired, and am going to bed. Complaints can be directed to /dev/null. -> 00:38:59 As you were. 00:40:59 I just realized something silly. An ordinary key has 48 keys used for typing ASCII; 47 of these each can type two characters, and the remaining one (the space bar) just types one. 00:41:47 *keyboard 00:41:53 Quite right. 00:42:00 that's because there are 95 ascii characters 00:42:02 The shift key determines which of the two characters a key types. 00:42:09 * Gregor looks confusedly at his tab key 00:42:17 $ wc -c clear 00:42:18 55 clear 00:42:19 Well, I guess technically, the backspace, enter, tab, etc. keys type ASCII. 00:42:26 Okay, then. clear overengineered. 00:42:37 pikhq: If you installed echo, you could replace clear with an echo-based version for much fewer bytes. 00:42:50 But I meant the 95 printable ASCII characters, of course. 00:42:51 Gregor: But echo involves a larger shell. 00:42:57 smallest executable you can make is 45 bytes 00:43:07 calamari: Well aware. 00:43:18 pikhq: Guh? 00:43:28 * uorygl tries to make a smaller executable. 00:43:41 Gregor: echo is only a shell builtin in busybox. And you can remove it. 00:43:52 hmm of course that's assuming elf 00:44:03 touch blih; chmod +x blih; ./blih;. Which doesn't count, of course. 00:44:06 what was before elf? 00:44:06 pikhq: OK, but you'll gain a lot with echo ... such as the ability to do anything useful at all :P 00:44:16 calamari: COFF 00:44:18 calamari: Then a.out 00:44:21 Gregor: Your point? 00:44:28 how small could coff get 00:44:34 calamari: Ask Windows. 00:44:40 oh god 00:44:44 Is there anything that was just machine code? 00:44:51 Sgeo: DOS COM files 00:44:55 Hmm, it would be plausible to make a platform where all executables are shell scripts. 00:45:04 yeah .com was the ultimate 00:45:04 Of course, that would require the kernel to have a built-in shell. 00:45:06 Sgeo: Well, more accurately, it's just "throw this crap in memory" 00:45:09 Oh, hey. Busybox has a smaller shell. 00:45:31 Interactive execution is optional. 00:45:34 What would happen if you renamed a .exe to .com ? 00:45:35 Throw-this-crap-in-memory works best when you can do relative jumps, I imagine. 00:45:42 Sgeo: Which is to say, the correct way to load a DOS COM file is to copy it into memory at 0, then jump to a predefined point. 00:45:51 Sgeo: I don't know what DOS .exe files are, but they're not raw. 00:45:55 Sgeo: depends on the exe 00:46:04 It's probably not dissimilar to a.out 00:46:20 exe's have memory segment information 00:46:21 "Support if/then/elif/else/fi" 00:46:29 Now *there's* a useless feature if ever I saw one. 00:46:30 We [some computer specialty summer camp kids] were at this lab, and someone was showing us "how to mess up the computer" 00:46:44 He showed removing the registry entry that tells Explorer how to open .exe files 00:46:55 lol 00:47:01 Someone actually followed the instructions on one of the computers. 00:47:33 I fix it by using Start->Run to open command.com, and from there opening regedit.exe 00:47:41 Actually, .com files load at 0x0100 (there are some information structures in first 256 bytes of segment it is loaded to). Entrypoint offset is 0x0100. 00:47:43 And then copying the relevant entries from a good computer 00:47:56 Ilari: yep 00:48:11 So the guy who messed up the computer in the first place is all "He [the guy who gave the instructions] could have done it." 00:48:15 My memory of useless binary formats is slightly bitrotted. 00:48:23 I guess you could hack a headerless executable format into the kernel 00:48:23 64K busybox 00:48:25 The guy who gave the instructions wanted to rename regedit.exe to regedit.com 00:48:25 :) 00:48:28 * uorygl runs command.com and finds that it works. 00:48:45 Is there similar registry entry for .com? 00:48:59 Ilari, I think so, but it was untouched by these instructions 00:49:08 well you can try exe2bin ;) 00:49:14 62240 busybox <-- without echo 62240 busybox <-- with echo. 00:49:25 http://codu.org/projects/gelfload/ 00:49:34 Okay then. echo uses no space, so I'm satisifed. 00:49:49 Echo.. uses no space..? 00:49:49 Some malware uses that EXE registry entry (but I haven't heard of using COM entry yet). 00:50:05 take a look at the files it compiled.. might have some other freebies in there like true and false 00:50:43 Sgeo: Somehow. 00:50:48 -!- zzo38 has joined. 00:50:54 I invented a game http://zzo38computer.cjb.net/GAMES/meskilb.png http://zzo38computer.cjb.net/GAMES/meskilb.zip 00:51:04 Huh. What's the extension of the filename foo.bar.baz? 00:51:09 Is it baz or bar.baz? 00:51:14 Instructions: T to display level description text. Arrows or vi keys to move. 00:51:21 uorygl: baz 00:51:21 uorygl: In Windows, just "baz" 00:51:44 Instructions: R to reset, numpad -/+ to prev/next 00:51:54 Top row is inventory row. 00:52:05 That slightly implies that if a file is just named "foo", its extension is "foo". 00:52:09 Sgeo: I'm going to guess it has something to do with padding. 00:52:19 zzo that looks cool!! 00:52:30 pikhq: I can see that, but at least Windows treats as no extension in that case 00:52:38 I guess I can't play it 00:52:41 Wow, that game is huge. 00:52:43 I like the graphics though 00:52:45 UNIX doesn't care about extensions, o it is OK 00:53:01 zzo did you make them 00:53:07 That game is not finish yet I will add in more objects and levels more later 00:53:12 I should install windows so I can play this 00:53:16 fax: I didn't make the graphics I found icons in various things 00:53:17 zzo38: Context makes you confusing. 00:53:19 :P 00:53:21 fax: That's what wine is for 00:53:25 I'm not pikhq! 00:53:28 I'm discussing how echo takes no extra space in Busybox. 00:53:39 pikhq: btw sometimes -Os isn't the smallest, try -O3 00:53:52 * uorygl assumes that that .GMD file is not needed. 00:53:55 fax: You can use Wine or you can do it a different way by converting the GMD (although no such program exists yet, but I have started writing it) 00:53:56 pikhq: it probably got compiled anyways 00:54:05 333 kib! 00:54:09 The .GMD is the source-file, you don't need it to run 00:54:20 pikhq: what files is busybox compiling? 00:54:52 Or possibly I might later re-write a similar engine in C so that it can be cross-platform 00:54:57 Can you make a version with a volume control? This computer doesn't have one. 00:54:59 calamari: Not many. 00:55:01 And make the same game using that 00:55:10 Don't have an exact figure, though. 00:55:15 pikhq: do any of them look like linux commands? 00:55:33 I could probably get things down by passing the whole thing to the compiler at once. 00:55:36 I should say GNU commands shouldn't I 00:55:37 -!- BeholdMyGlory has quit (Read error: Connection reset by peer). 00:55:39 (CCBI 2.0 completes it in about one-fifteenth of the time that cfunge does. SO YEAH. AnMaster: macro-optimization > micro-optimization.) 00:55:39 oh 00:55:39 uber 00:55:39 snappeth 00:57:54 That's so much snap I've got ropeburn. 00:59:37 zzo38: on level 2, how come you have to go down and get the key before you can go through the door? 00:59:59 Is the idea that you're only allowed to make one attempt every fifteen seconds? 01:01:01 -!- oklopol has joined. 01:01:26 How does "because the door is locked" strike you? :P 01:01:44 That doesn't answer my question; it just leaves me wondering why the door is locked. 01:02:33 Ilari: man 4 fd 01:03:00 -!- Gracenotes has joined. 01:03:01 Yes, it is becausey ou need the key 01:03:06 It is obvious, isn't it? 01:03:17 /dev/fd0u1920 01:03:19 There is no idea of attempt 01:03:19 It's not obvious why that locked door is there. 01:03:37 Every time I hear "ow!", that's one attempt. 01:03:38 This game is turn-based only, not time-based. The only reason the door is there is to practice to use the key/door 01:04:05 How much practice do you think I need? It's pretty obvious how to do it; once I do it once, I don't need to do it three more times. 01:04:46 Just once. The other three times are completely different kind of puzzles having to do with key 01:05:03 If you don't like it, skip that level (push numpad + sign) 01:05:15 I still have to go get the key multiple times on level 2 if I want to pass that level. 01:05:35 I should also say something else: You can push F5/F6 to quicksave/quickload 01:05:52 Ah, that changes things. 01:06:04 I am sorry I didn't tell you that before 01:06:25 -!- jcp has quit (Quit: I will do anything (almost) for a new router.). 01:06:37 what game 01:07:27 oklopol: You can check the log if you don't know what game? 01:07:52 i can, yes 01:09:50 What game? 01:10:18 Sgeo: you can check the log if you don't know? 01:10:27 That game: http://zzo38computer.cjb.net/GAMES/meskilb.png http://zzo38computer.cjb.net/GAMES/meskilb.zip (arrow or vi move, R reset, numpad -/+ prev/next, F5/F6 qsave/qload) 01:10:31 HEY 01:10:35 that's not fair 01:10:37 i had to work for it 01:10:53 Sorry I just posted now because enough people ask 01:10:57 i know 01:11:01 i'm being silly 01:11:05 Somebody else could also have posted the same message 01:11:22 cuz i'm a funny dude 01:12:30 so what are the absolutely essential features of a linux shell? starting programs and globbing? 01:12:54 calamari: Perhaps also environment variables 01:12:58 Bah, who needs globbing. 01:13:10 uorygl: echo * 01:13:17 so that you don't need ls 01:13:18 :) 01:13:27 Well, just use ls. :P 01:13:31 Hum, are environment variables really a shell thing? 01:13:40 ls actually does some additional things too like ls -l and ls -la and so on 01:13:54 zzo38: of course :) 01:14:03 Yes, environment variables are a shell thing because no program can set environment variables of their parent process 01:14:41 Even if you don't have the "set" command to list all environment variables you still need to be able to set value of individual environment variables 01:14:51 But the env program can set environment variables for its child even if you can't set them in the shell. 01:15:24 I was going to say create a glob program and use backticks.. but backticks aren't free either 01:15:33 OK, then, if that is how you want, so. 01:16:01 oh, there is a glob call.. include glob.h hehe 01:16:49 pikhq: how big is your busybox 01:17:16 Don't you think that's an awfully personal question? 01:17:17 :P 01:17:31 haha 01:22:22 calamari: 64k 01:22:50 not bad at all! were you able to include any more executables after looking at the compiles? 01:22:58 Nope. 01:23:24 I'm trying to find a smaller shell. 01:23:43 -!- jcp has joined. 01:23:47 do i need diagonal movement in level 2? 01:24:03 pikhq: if you compile without the shell, how big is it? 01:24:35 calamari: Uh... 0k, I'd imagine? 01:24:38 That's... All I have. 01:24:49 you have echo 01:24:57 zzo38: do i? 01:25:03 oklopol: There is no diagonal movement. 01:25:06 ah okay 01:25:09 Ah, right. 01:25:13 just left up right down 01:25:29 This game is orthogonal movement only. (If there is any extra controls you need, they will be described in the level description (push T)) 01:25:54 I'm still trying to find a smaller shell. ;) 01:26:10 Hmm. Actually... 01:26:32 How small is Tcl? 01:27:01 Just roll your own shell. 01:27:09 while (true) + strtok + fork + execl = bad shell 01:27:52 Heheh. 01:28:05 Tempting. 01:28:06 shsh.. short for shit shell 01:28:09 I forgot about fgets ... 01:28:21 while (true) + fgets + strtok + fork + execl 01:28:34 Or hell, so long as it's an intentionally terrible shell, use gets :P 01:28:38 +glob 01:28:43 lol 01:28:56 globbing is for pussies, real men remember all the files they have and type out the names. 01:29:27 the question is whether you can make it smaller by excluding libc and using int 0x80 calls 01:29:30 Yes, if you are trying to write a shell using as small codes as possible that's OK I suppose 01:29:54 calamari: You can try writing in asm or machine-codes and see if you can do that 01:29:56 calamari: Probably. 01:30:04 Though, my libc is pretty darned small. 01:30:05 Hmmm, FORTH is an idea. FORTH doesn't have to be big ... 01:30:11 zzo38: okay i'm giving up at level 2 01:30:26 Gregor: Hmm. 01:30:33 pikhq: well the thing is that executables are slightly bigger when they have to use libc 01:30:38 oklopol: Try the other level then (push -/+ numpad) 01:30:40 what is the fourth programming language you learned? 01:31:05 fax: ... lesse ... do different dialects of BASIC count as different languages? 01:31:14 only if they are called FORTH 01:31:21 ........... 01:31:34 calamari: Yeah, but not by much. Particularly when you have a decent libc. 01:31:47 * pikhq enjoy his uclibc cross-compiler. 01:31:48 hmmm 1) gwbasic, 2) quickbasic extended 3) x86 asm 4) c? 01:31:51 may have been logo 01:32:07 oh damn you're right.. logo is in there 01:32:13 Could've been logo for me too, that was the first thing that came to mind. 01:32:19 8 01:32:19 hmmm 1) gwbasic, 2) quickbasic extended 3) logo 4) x86 asm 01:32:22 | 01:32:24 But I don't know if it was logo or AVR ASM 01:32:31 Why does the anarchy golf when you access a file in ../ it accesses /dev/ directory but if you use cd ../ it works correctly?? 01:32:34 no one knows logo 01:32:50 zzo38: you probably aren't one to give hintss? 01:32:52 *hints 01:32:53 I know logo 01:33:00 everyone knows logo 01:33:06 -!- atrapado has quit (Read error: Operation timed out). 01:33:08 oklopol: What hint did you want? 01:33:13 HOW IS 2 SOLVED :p 01:33:15 * Sgeo has heard of logo, but that's pretty much it 01:33:20 I remember writing a spirograph program in it in class and getting a few minutes of fame followed by years of nerd hell 01:33:26 I should probably actually play the game 01:33:29 calamari hahaha 01:33:37 nerd hell? 01:33:44 I should probably rewrite the game in JavaScript. 01:33:46 Because that's what I do. 01:33:50 Rewrite things in JavaScript. 01:33:57 Gregor that would mean I could play it !!! 01:34:00 oklopol: Which part are you stuck on? 01:34:13 fax: Play http://sibeli.us/ instead. 01:34:20 I have I didn't like it :( 01:34:30 you're like pushing buttons in time I can't do that 01:34:33 it made me ill 01:34:33 Someone should write a game that the makers of the game don't know how to solve, but know it's solvable 01:34:54 Sgeo: I have in fact done that. 01:35:01 zzo38: there's not that much to get stuck on, i have no keys left when i get to the room with the rocks, and there's no way to get the key without them falling and blocking the exit 01:35:10 zzo38, with this game, or a different game? 01:35:14 Many times. 01:35:32 oklopol: You need the arrow in the other room to block the stones falling 01:35:36 Well, I found a more... complete shell that's about 72k. 01:35:47 Sgeo: No, not this game. A different game (actually multiple different games) 01:35:51 zzo38: yeah i was just thinking i might actually try using them for something 01:35:58 Sorry. 60k if I use dietlibc. 01:36:05 I <3 dietlibc. 01:36:24 -!- adam_d has quit (Ping timeout: 265 seconds). 01:36:33 oklopol: You can also push the stones left/right 01:36:40 i know 01:36:42 Look mah, I've got tar! 01:36:58 and yeah okay it's really obvious now, i just, for some reason, completely dismissed the ball and the arrow 01:37:09 pikhq: What a sticky situation HYUK HYUK 01:37:19 Grogor did you make sibelius 01:37:23 There is a game I made but I don't know how to solve but I know it is solvable: http://zzo38computer.cjb.net/GAMES/MUTCHNAM.ZIP 01:37:25 pikhq: I assume you have tar without gz or whatnot. 01:37:29 Gregor: Hmm. More features in less space, or fewer features. Tricky. 01:37:31 And yes. 01:37:35 * Sgeo is still trying to figure out what the card suites are for 01:37:37 I disabled the builtin gzip. 01:37:37 fax: What a hilarious statement when you don't make it clear that you're referring to sibeli.us :P 01:37:38 pikhq: dietlibc's author is a nutjob who GPL-licensed it so MS don't steal his code :( so distros can't use it as a libc 01:37:43 fax: But yes, I wrote that code. 01:37:48 oh sorry :((( 01:37:49 since you can't redistribute non-gpl software linked with dietlibc 01:37:52 I didn't realize this 01:37:59 alise: Yes, that's my only issue with dietlibc. 01:38:04 pretty big issue 01:38:15 Sgeo: Did you push "T" at the first level it will explain you need to get four suits, please. 01:38:20 Though that's not *entirely* true. You can redistribute anything "gpl-compatible" linked with dietlibc. 01:38:25 This includes 3-clause BSD. 01:38:30 (note: whole thing is GPL now) 01:38:32 I just never managed to play these kinds of game, the music/timing type 01:38:41 Oh. Thought I had to get to the peace thing 01:38:43 Sadly, that limits dietlibc's usage a lot. 01:38:50 fax: This exists mainly as a hilariously bad idea for such a game :P 01:39:04 diet i386-linux-uclibc-gcc *.c -Os --combine -fwhole-program -DHAVE_GZIP=0 -DHAVE_LINUX_ATTR=0 -DHAVE_LINUX_MOUNT=0 -DMOUNT_TYPE=\"ext3\" -o sash 01:39:08 Sgeo: Yes you do but you need 4 suits 01:39:11 Now *there's* a build command. :) 01:39:21 It shows the inventory row on the top 01:39:30 I need no mount! I need no chattr! I need no gzip! 01:40:11 zzo38: is there a way to restart the game 01:40:33 i don't have a numlock + so i can't really just restart the game and replay till 3rd level every time 01:40:37 oklopol: Push R key 01:40:44 kay 01:40:47 Push -/+ to skip levels 01:40:56 Or use P/N if you don't have numpad -/+ 01:40:57 doesn't do anything 01:41:01 oh okay 01:41:06 Can I move on diagonals? 01:41:15 Sgeo: No. Orthogonal only. 01:41:29 And I don't QUITE understand the logic of the stone 01:41:36 wwwhat was the point of level 3 :D 01:41:39 You can also save/load at any time by pushing F5/F6. 01:41:50 how many levels are there? 01:42:08 oklopol: No much yet, but it will have a lot more levels and more objects later. 01:42:18 can i have a number, i have to decide whether to play them all 01:42:30 or to do something i consider more useful 01:42:37 * Sgeo does NOT understand how the stone decides to move 01:42:50 go near it and move once or soemthing like that? 01:42:52 *something 01:43:17 Going near it does not always cause it to move 01:43:26 oh. 01:43:27 Sgeo: It is like Hero Hearts or PC Wanderer if you have played it. Whenever anything departs from a space up to 1 left/right from it and up to 2 down (but not up) it will fall 01:44:05 oklopol: You can skip levels if you want. (And remember to push T it displays useful (or sometimes useless) information and level code. Push F and type in the level code to skip immediately to that level. 01:44:20 So I walk into that space and then move, that's when it falls 01:44:27 So above it is a blind spot 01:44:29 Yes. 01:44:33 okay so '8 01:44:34 *8 01:44:49 that's a bit too much, i'll mention if i do it some other time 01:45:21 also Sgeo part of the puzzle if to figure out the rules 01:45:24 *is 01:45:28 Ah :/ 01:45:29 Arrows and balloons move in a similar way to stones but a different direction 01:45:31 i mean 01:45:32 at least imo 01:45:39 * pikhq wonders how well upx works on Linux kernels 01:45:52 Apparently "no longer". 01:46:17 that's why they're interactive, so the rules need not be stated 01:46:21 well dunno 01:47:10 Level code EHQN is the first level that has additional controls that you have to use (push T it will tell you what they are) 01:48:57 Got it! 01:51:58 (These lambda-terms cannot be checked by modern systems like Coq or Agda, because the lambda-typed lambda-calculi of de Bruijn are "incompatible" with the Pi-typed lambda-calculi of modern type theory.) 01:52:02 ha fax was wrong it is feasible 01:54:53 what exactly did I say that is "wrong"? 01:56:51 if you took the time to actually read the paper you are quoting you might find that there are foundational problems with this 01:57:56 Have you ever made music using Bohlen-Pierce? 01:58:08 * Sgeo should learn what Pi Calculus is 01:59:07 Sgeo: not related 01:59:17 fax: well you didn't seem to know that automath did that at the time 01:59:17 alise stop being an ass 01:59:26 also i feel cheated on by coq after how nice mizar proofs are :( 01:59:34 fax: no. 01:59:47 just shut up about stuff you have no clue about 02:00:48 -!- zzo38 has quit (Remote host closed the connection). 02:04:39 fax: i don't remember you having contact with the authority of having clueness... 02:09:58 Anyway, g'bye everyone: see you Friday. 02:10:15 see ya 02:11:47 -!- alise has quit (Quit: Leaving). 02:15:32 Oh, crud 02:24:36 http://arstechnica.com/microsoft/news/2010/04/why-microsoft-did-the-right-thing-in-ditching-xp-for-ie9.ars 02:24:47 That Low Integrity thing sounds.. excellent 02:28:40 -!- coppro has joined. 02:29:45 POOPPY! 02:29:55 pooppy, meet carlinet. carlinet, meet pooppy. 02:30:43 Both people whose names I cruelly massacre for no good reason. 02:31:02 Heheh. 02:31:37 Okay, 339k and it's not going down much further... 02:35:25 * Sgeo looks at the HTML5 Quake2 02:36:40 Um, is there a link to actually try it somewhere? 02:36:48 329k. And fin. 02:51:19 * oerjan went for a walk. Great northern lights tonight. 02:52:28 can you upload the mental pictures 02:53:15 actually i would interpret that as "describe them", but i'm not sure that's a very fair thing to ask. 02:53:25 no, but if you're in finland maybe you can see them too? 02:53:48 i've never seen northern lights in turku 02:53:52 a few times in lapland 02:53:56 oh 02:54:17 they were very fast-moving tonight, and in a broad band straight overhead 02:54:27 :o 02:54:28 cool 02:54:37 not very colorful though, i've seen that a few times 02:54:52 well almost straight overhead 02:56:27 -!- augur has joined. 02:57:56 -!- roper has joined. 03:00:37 -!- jcp has quit (Quit: I will do anything (almost) for a new router.). 03:05:50 * Gregor steps out of the other room in a robe with a girl on each arm. 03:06:00 It's not what it looks like, Mr. roper! 03:12:03 pikhq: http://asm.sourceforge.net/asmutils.html 03:12:37 !userinterps 03:12:37 Installed user interpreters: aol austro b1ff bc bct bfbignum brit brooklyn bypass_ignore chef chiqrsx9p choo cockney ctcp dc drawl dubya echo eehird ehird fudd funetak google graph gregor hello id jethro kraut num ook pansy pirate plot postmodern postmodern_aoler redneck reverse rot13 sadbf sfedeesh sffedeesh sffffedeesh sffffffffedeesh slashes svedeesh swedish valspeak warez yodawg 03:13:03 !aol Hello my friends! 03:13:08 HELO MY FR1END5!!!!!!!!!!1 03:13:31 calamari: Doesn't build on modern nasm. 03:13:42 pikhq: bummer 03:14:29 * calamari fails at being a c programmer.. can't figure out how to create this array of char *'s in the right format for strtok 03:14:46 calamari is actually building shsh :P 03:14:59 yeah, took a break when my mom called hehe 03:15:13 at an amazing 26 lines of code 03:15:38 sadbf? 03:15:42 !sandbf Testing 03:15:45 school me please: 03:15:47 !sadbf Testing 03:15:55 !sadbf +[.+] 03:15:55 char * args[16]; 03:15:55 03:16:05 args[0] = strtok(cmd, " "); 03:16:21 Why did EgoBot want to DCC Chat with me? 03:16:30 that line gives me a "you retard" error 03:16:43 Oh, to send me "Hey, here are the results" 03:16:53 !show sadbf 03:16:53 sadol :M$0 :d:i,45000@>i-01(2]M0:i-i1:S$0:C;3:l#C-01:p:m0@:m%+m1d?=#Cp"1<:m?<-m10-s1-m1?=#Cp"1.!'2#Mm?=#Cp"1,:#Mm'1;0?=#Cp"1[]S-p1?=#Cp"1]?=#Mm00:p[S0:p+p1 03:17:18 holy crap what is in this thing, it's 10k already 03:17:58 oh, forgot to strip 03:21:20 Please don't >.> 03:21:46 har har 03:22:00 :) 03:25:07 Please do :P 03:25:38 Can you be more specific about the error? 03:26:08 warning: assignment makes pointer from integer without a cast 03:27:15 You #include'd string.h? 03:27:35 nope 03:27:54 wow it compiles, thanks :) 03:28:28 Why not switch to Haskell! 03:28:35 * Sgeo has become a fanatic almost overnight 03:28:50 actually.. why fork? 03:29:06 calamari: Because system() requires a shell and exec() needs a fork. 03:29:07 Sgeo: that was fast 03:29:12 Unless you want a one-time-use shell :P 03:29:59 Sgeo: i don't think haskell is very good for making supertiny executables 03:30:09 Ah 03:30:41 although i recall something about a jhc compiler being better at it 03:31:17 whole program optimization iirc 03:31:39 but it was still experimental last i heard (quite a while ago) 03:31:57 * Sgeo should probably ask for advice on beautifying some code fragments 03:31:57 couldn't compile itself 03:32:07 Sgeo: yay 03:32:47 The interpreter seems to be working, kind of.. it's not crashing when I give it a bounded tape and "<", which is strange 03:32:56 paste? 03:33:48 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24710 03:33:59 Oh, you want the whole interpreter to help me debug? 03:34:25 well let me look at that first 03:34:44 It's working, it's just ugly 03:34:53 yay it's working 03:34:59 lots of superfluous parentheses, i see :D 03:35:52 I'm not really all that certain which are superfluous 03:36:37 And there's no where that ... wait. I could have written a function with type BFCmd -> String -> ([BFCmd], String) 03:36:45 And have passed stuff into that function for most of those 03:36:55 (but not all) 03:38:05 yeah all those fst and snd really beg for a common where clause and pattern matching 03:39:30 Is it possible to have a common where clause to all those definitions? 03:40:05 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24711 03:40:10 less parentheses 03:40:49 basically function application has higher precedence than _all_ operators 03:41:26 -!- jcp has joined. 03:41:31 (technically one pattern matching exception, @) 03:41:34 -!- coppro has quit (Ping timeout: 258 seconds). 03:42:08 and not at the top level, no, but just a moment... 03:43:33 i need vim for this... 03:49:42 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24712 03:49:49 using a case expression 03:50:34 oh damn wait 03:50:48 code is not defined there 03:53:14 fixed http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24713 03:56:23 anyone know of an english parser grammar? 04:00:15 Sgeo: it should even be possible to factor out the identical ( : cmds, rest) part for most of the options, but i'm not sure that makes it better 04:00:38 Gregor: it actually looks like wordexp will do nearly everything in one call 04:00:48 just need to figure out some quirks 04:05:07 got it 04:05:42 I wonder if ithis would be smaller if I wasn't compiling on x64 04:06:56 yep, slightly 04:07:16 okay.. shit shell is 5684 bytes 04:09:29 calamari: Pastebin? 04:12:01 pikhq: http://pastebin.com/xJUQuFWX 04:12:12 * Sgeo feels guilty for not having written the code himself 04:12:17 Erm, the cleaned code 04:12:22 The original is mine, obviously 04:12:46 * oerjan feels guilty for doing too much of your work, i tend to do that when i get carried away 04:13:25 lol I didn't need the variable pid did I 04:14:33 doesn't save any byyes.. oh well 04:16:54 calamari: I'll see what I can do to it. 04:16:58 http://pastebin.com/aMmXde7G 04:17:00 -!- myndzi has joined. 04:17:12 little less crap in that one 04:19:31 41824 shish 04:19:38 ... When you stop including malloc... 04:19:38 -!- myndzi\ has quit (Ping timeout: 246 seconds). 04:19:46 ? 04:19:57 it's actually bigger with uclibc? 04:20:11 -!- fax has quit (Quit: Lost terminal). 04:20:25 That's bytes. 04:20:31 Erm. 04:20:44 so was mine 04:20:49 44K? WTF? 04:21:03 Wait. Are you dynamic linking? 04:21:07 yes 04:21:13 Failure. 04:21:19 Yours is several megabytes. 04:21:34 (as it needs all of glibc.) 04:21:48 I assumed you had uclibc already 04:21:53 doesn't work with it? 04:22:07 I do not have a dynamic uclibc. 04:22:09 ;) 04:22:12 ah 04:22:37 Among other things, this means the fewer functions you use the smaller your program is. 04:22:54 Also, perror? Bah. 04:23:11 if you are static linking, then int 0x80 asm would be smaller 04:23:22 did not realize you were 04:23:34 what's wrong with perror.. doesn't even increase the size 04:23:46 It's a function. 04:24:00 Including functions from libc means those functions are included in the binary. 04:24:43 113 shish 04:24:45 oh well 04:24:46 Same damned program without perror. 04:24:55 113 bytes? 04:25:13 Yes. 04:25:19 holy crap 04:25:27 perror took 44k? 04:25:44 Erm. Sorry, no. 04:25:52 wc -l instead of -c somehow. WTF, me? 04:26:04 41824 shish 04:26:09 That's more not fucking nuts. 04:26:15 yeah 04:26:25 But, yeah... perror includes stdio. 04:26:36 Though, so does fgets. :P 04:26:42 yeah that program sucks for static 04:26:52 It's probably wordexp. 04:27:04 Yup. 04:27:04 yeah, wordexp is doing a lot 04:27:30 What you really want to do is tokenise. And that's it. 04:27:50 yeah well it would have to be in asm next time 04:30:09 out of curiousity, how big is it when dynamically linked against uclibc 04:30:29 Dunno. I don't have a dynamic uclibc. 04:30:36 k 04:30:42 well it was fun writing it 04:30:49 Though probably about a megabyte if you *include* uclibc. ;) 04:31:41 Well, I'm going to go ahead and fix it to do utterly naive tokenizing. 04:32:04 I had that before but wordexp was so much better with the globbing and all for "free" hehe 04:33:29 -!- cal153 has quit. 04:39:52 9040 shish 04:40:00 Could probably be made smaller. 04:40:33 shish kebab 04:46:40 5288 shish 04:46:41 That's using read. 04:46:43 lol was looking at which syscalls I would need and it was going down the elementary list, 1, 2, 3, 4.. but then 11 and maybe 12 04:47:03 not bad 04:47:10 does it still work? 04:47:52 Yes. 04:49:37 1948 shish 04:49:40 With dietlibc. 04:51:39 cool 04:51:45 pastebin? 04:52:36 http://sprunge.us/ShKE 04:54:45 Fun fact: uninitialised static variables use 0 space in the output binary. :) 04:55:47 I could probably make this smaller by plopping down into assembly, but not by much. 04:56:06 YEAH THAT'S NOT BAD 04:56:17 ... What's with the capslock? 04:56:26 does it help to remove the function call 04:56:27 sorry 04:56:38 was in ASM programming mode.. that's a caps lock operation :) 04:56:38 Which function call? 04:56:53 tokenise 04:56:58 That's inlined. 04:57:05 oh, true 04:57:19 ++cmd_offset? 04:57:47 Where at? 04:57:49 dunno if that is a rumor or truth when they say x++is bigger than ++x 04:57:55 two places 04:58:21 for(cmd_offset = 0; cmd[cmd_offset] != 0; cmd_offset++) { 04:58:26 In any sane compiler, there's not any difference unless you're using the result value. 04:58:29 cmd_offset++; 04:58:32 ahh k 04:58:48 And if you're using the result value, you're getting bigger code regardless. 04:59:08 so how many bytes did that save on your disk? 04:59:33 Let me go make a new image. Without anything. Bwahahah. 05:01:31 System is 301 kB 05:01:51 Okay, 301 kiB for a Linux bzImage which does nothing but start shish. 05:03:15 That is the shittiest shell ever. 05:03:30 yay!!!! 05:03:31 :D 05:03:43 And this... Is the shittiest Linux distro ever. 05:04:01 You actually can't do anything on it. :) 05:04:22 Not even error messages, because dietlibc doesn't have any, and nor does this kernel build. 05:04:28 well you can run more shells 05:04:35 Yes. Yes you can. 05:04:59 so I take it echo is gone? 05:05:05 -!- Oranjer has left (?). 05:05:09 Yes. 05:05:15 As is everything else. 05:05:29 I was previously using sash, which had a few builtins, and was 60k. 05:05:59 well chdir is probably not too big since there is a syscall for it 05:06:38 * Sgeo should be eating and doing laundry 05:07:22 does ctrl-D still work to terminate the shell? 05:07:46 Yes. 05:07:55 dietlibc? 05:08:07 Sgeo: Yes. It's freaking tiny. 05:08:07 shish? 05:08:13 Shit Shell 05:09:03 calamari: When read reads nothing, it returns 0. So, it exits. :) 05:14:27 shsh turned into a fork bomb lol 05:14:41 Hahah. 05:15:11 Yeah, might want to fix that... 05:15:15 come on linux you can kill this thing 05:15:43 You're not running this in a VM? 05:15:51 nope haha 05:16:49 whew, closing the term did it 05:17:03 okay what did I screw up 05:18:50 -!- augur has quit (Ping timeout: 245 seconds). 05:21:00 -!- Alex3012 has quit (Read error: Connection reset by peer). 05:25:43 pikhq: there is a bug.. trying to track it down.. if more than one parm is used, you can't go back to using just one parm 05:26:02 calamari: Mmm. That is an issue. 05:29:36 -!- jcp has quit (Quit: I will do anything (almost) for a new router.). 05:30:06 I love how we're at the point that malloc is absurd bloat. 05:33:01 -!- oerjan has quit (Quit: leaving). 05:33:42 fixed it 05:33:49 Whooo. 05:33:54 for (--tokened_offset; tokened_offset < MAXSIZE; ++tokened_offset) 05:33:54 tokened[tokened_offset] = NULL; 05:34:38 Ah. 05:34:50 seems to break the ctrl-d after a cmd tho 05:34:58 maybe unrelated 05:36:12 Works here. 05:37:19 Hrm. Still seeing that bug, though. 05:37:38 yeah maybe that wasn't the fix 05:42:12 for(;read_result < MAXSIZE; read_result++) 05:42:12 cmd[read_result] = 0; 05:42:35 Might be more than is needed, but it works. 05:43:23 It is. 05:43:27 cmd[read_result + 1] = 0; 05:43:29 There. 05:43:47 so it was an off by one error? 05:44:36 Yes. 05:46:07 Even though it's 12:44, and I need to be up early, I need to go wash clothes now 05:46:52 Dear Gmail: Emails from the email list I'm on are not spa 05:46:53 spam 05:48:19 http://sprunge.us/NWgK 05:48:47 " i wish all the glasses had the brown dark lenses...i can only see out of one eye so i could never see the 3d when i tryed to watch them all i would see is a blurry red image..im glad there attepmting to change it" 05:49:15 Although maybe she's saying that if they change it, she'll still be able to watch the programs even though they happen to be in 3d 05:49:43 I particularly love how this shell cannot handle spaces in any arguments. 05:56:50 I think you want a break; after the exec, otherwise syntax errors are a problem 05:57:16 and cmd[read_result + 1] = 0; was right I think you may have a typo on your new source 05:58:38 calamari: "break"? "break"? That is a forkbomb. 05:58:48 -!- MizardX has quit (Ping timeout: 276 seconds). 05:58:48 comex is a redditor? 05:58:51 The new source does not have read_result any more. 05:59:14 oh, okay 06:01:51 why is it a fork bomb? 06:02:10 it should never get to the line after the exec, unless the exec fails 06:02:12 Oh, wait, no it's not. 06:02:30 It'll just jump out of the while loop and exit. 06:02:35 Unlike now, where it exists. 06:02:36 yep 06:02:38 Erm. Exits. 06:02:52 I'm pretty sure GCC will compile the two as equivalent. 06:02:53 * Sgeo should be washing clothes right now 06:02:57 In fact, I'll go do that 06:03:12 if it doesn't break, then the child won't terminate 06:03:30 ... Uh, return from main *is termination*. 06:03:38 Note that it currently does a "return 0". 06:03:41 and how does it return 06:03:46 return 0; 06:03:55 how does it get out of the loop 06:04:05 It returns from main. 06:04:37 put a puts about return.. you wont get there with a syntax error 06:04:41 above 06:04:41 _start then calls the exit system call with the return value from main. 06:05:01 Yes, and with a syntax error the forked process exits from main. 06:05:17 Unlike what you propose, which is... A jump to a return from main. 06:05:40 puts("e"); 06:05:40 return 0; 06:05:42 Do I need to beat "return 0;" into your head some more? 06:05:46 execvp(tokened[0], tokened); 06:05:47 return 0; 06:06:04 oh, my bad, you do have it 06:06:15 *Yes*. 06:06:23 the old source didn't 06:06:35 yeah either one is pretty much the same 06:06:46 Yes, and I added it because it was going to forkbomb otherwise. :P 06:07:03 yeah that is why I added break 06:07:09 we just solved the same problem two different ways 06:07:31 And GCC compiles them equivalently. 06:07:42 good 06:10:23 changing the directory doesn't work lol.. duh the environment goes bye bye 06:10:53 I think in order to do that, parsing of the command will have to go before the fork 06:11:16 Yes. 06:14:40 got it 06:19:05 http://sprunge.us/GFKJ 06:30:30 hmm unsetenv isn't working for some reason 06:31:15 } else if (strcmp(tokened[0], "unset") == 0) { 06:31:16 puts(tokened[1]); 06:31:16 printf("%i\n", unsetenv(tokened[1])); 06:32:05 unset PATH prints PATH then 0, indicating success 06:32:31 set works though 06:34:58 does adding cd bloat it quite a bit? 06:36:16 -!- coppro has joined. 06:36:52 since unset didn't work: 06:37:00 if (strcmp(tokened[0], "cd") == 0) { 06:37:01 chdir(tokened[1]); 06:37:01 } else if (strcmp(tokened[0], "set") == 0) { 06:37:01 setenv(tokened[1], tokened[2], 1); 06:37:01 } else if (fork() == 0) { 06:37:01 execvp(tokened[0], tokened); 06:37:03 break; 06:37:06 } 06:37:16 there.. feature complete, right? :P 06:37:58 pikhq: thanks for the fun 06:38:58 calamari: No problem. 06:39:32 I'm guessing adding strcmp, chdir and setenv adds a bit to the size 06:39:48 can't really see it here since I'm compiling dynamic 06:40:02 I'll check. 06:40:30 http://sprunge.us/OfEd 06:40:49 shish.c:(.text+0xcb): warning: setenv calls malloc. Avoid it in small programs. 06:41:06 change it to putenv then 06:41:25 oh wait 06:41:51 one minute, that will require a code change 06:41:53 That'll... do the same thing. 06:42:06 4448 shish 06:42:10 not exactly, different args 06:42:30 wow 06:42:45 malloc is overheady. 06:43:00 putenv shouldn't require malloc 06:43:27 2032 shish 06:43:32 Without the setenv. 06:43:48 "so altering the string changes the environment." 06:44:03 yeah, fun huh? 06:44:20 } else if (strcmp(tokened[0], "export") == 0) { 06:44:21 putenv(tokened[1]); 06:44:55 so the syntax is export PATH=/bin or whatever 06:45:36 Then the PATH will be /bin/ until you have a command long enough to overwrite the PATH. 06:46:43 Wait, "long enough"? As in, buffer overflow? 06:46:58 Sgeo: Well, not really a buffer overflow. 06:47:27 It's just that putenv makes the buffer given as an argument be part of the environment. Meaning that when you change the buffer, the environment changes. 06:47:30 dunno, it seems to work 06:47:55 As it just so happens, that buffer is also where command parsing happens. 06:48:35 it doesn't seem to overwrite it 06:48:36 calamari: I'm going to statically allocate an array of buffers for that. 06:49:16 Touching my chin no longer means blood on my hand, yay! 06:49:17 although I can't explain WHY it isn't 06:49:27 Sgeo: hows that laundry coming along 06:49:33 In the drier 06:49:47 I'll go to sleep when it's time for the dryer to be off 06:51:33 it's possible that libc is doing a malloc for me 06:51:54 put that would break the spec 06:51:57 *but 06:53:31 Wait, nope, there's still blood on my hands 06:53:36 hmm according to the man page, it depends on the libc 06:55:28 * Sgeo listens to random songs in the Avatar: The Last Airbender soundtrack 07:11:27 got primitive \ escape sequences working 07:11:55 so now you can escape spaces 07:12:21 http://sprunge.us/iFNP 07:12:50 -!- augur has joined. 07:13:09 \space is special, everything else turns back to whatever it was after the \ 07:13:23 well space does too, but it sets a flag 07:16:05 and with that, I think it actually is usable now 07:17:10 Give it rawirc, and you'd make zzo38 happy. :P 07:17:20 vonkeror? 07:17:28 telnet. 07:17:39 pikhq: so how big is http://sprunge.us/iFNP 07:18:39 4448 bytes. 07:18:59 whats odd 07:19:03 **err that's odd 07:19:07 why is it so big 07:19:30 putenv? 07:19:35 Probably. 07:19:52 well the next closest shell was 60k, right? 07:20:05 2108 without putenv. 07:20:08 So, yeah. 07:20:17 well kinda need putenv 07:20:30 Or setenv. 07:20:38 yeah 07:20:50 but that was even bigger 07:21:03 That was about the same size, actually. 07:21:43 hmm then we should definitely use setenv since it is safer 07:21:56 4448 with setenv. 07:22:14 ... Yeah, no reason not to. 07:22:23 what syntax did you use for it? 07:22:33 set foo bar 07:23:01 setenv(tokened[1], tokened[2], 1); ? 07:23:14 Yeah. 07:23:19 okay cool 07:23:47 well there you go then .. shsh lives :) 07:23:57 :) 07:24:14 I guess that put it at around 335k 07:24:49 er 305k 07:25:09 i'll check. 07:26:08 302k. 07:26:18 not bad! 07:26:42 btw does ctrl-z do anything? 07:27:10 No, you need more logic for job control. 07:27:33 in the kernel? 07:27:39 -!- MigoMipo has joined. 07:27:44 No, in the shell. 07:28:04 For job control, you need to actually watch the terminal for Ctrl-Z to send sigsusp. 07:28:53 I guess I'm wondering how you could ever run more than one thing at a time with our shell :) 07:29:08 nohup? 07:29:11 Erm. 07:29:13 No. 07:29:19 Detaching from the terminal. 07:29:49 yeah would have to daemonize 07:30:14 Which is nearly what a job-controlling shell does anyways. 07:31:22 we could almost use vfork instead of fork 07:31:27 wonder if it's smaller 07:32:10 They're system calls. 07:32:24 true 07:32:27 The libc functions literally do nothing but jump to the kernel. 07:33:03 guess putenv isn't a system call 07:33:04 It would be *saner* to use vfork, though. 07:33:26 Not at all. 07:33:45 The environment is done entirely in userspace, IIRC. 07:34:50 oh, then execv might be smaller 07:36:33 Not really. 07:37:18 The environment is just extern char **environ. 07:37:42 but the call has to get the PATH and find the command 07:37:54 maybe that's not much code 07:38:21 Ah, that. 07:39:03 I doubt it's much code. 07:40:23 I wonder how hard it'd be to hack shsh into busybox 07:40:38 haven't ever tried adding a command to bb before 07:40:40 Probably not very. 07:42:28 Why am I still up? 07:42:49 because being asleep sucks 07:43:09 -!- adu has joined. 07:45:37 * Sgeo just found out that lamebook doesn't show ALL entries on a topic on the main page 07:45:44 I'm going to be awake for a bit longer 07:56:47 * coppro is a git 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:03:01 * Sgeo will be waking up in 3hrs :( 08:06:09 good luck with that 08:25:04 I'm totally wearing e by numbers to my math contest 09:03:36 -!- coppro has quit (Quit: I am leaving. You are about to explode.). 09:13:02 -!- calamari has quit (Quit: Leaving). 09:15:47 -!- adu has quit (Quit: adu). 09:18:36 -!- adu has joined. 09:43:38 -!- cheater2 has joined. 09:45:25 -!- cheater3 has quit (Ping timeout: 264 seconds). 09:48:36 -!- oobe has quit (Remote host closed the connection). 09:57:27 -!- adam_d has joined. 10:08:23 -!- lereah_ has joined. 10:36:48 -!- tombom has joined. 10:46:41 -!- FireFly has joined. 11:18:23 -!- BeholdMyGlory has joined. 12:29:59 -!- Deewiant has quit (Quit: Changing server). 12:30:14 -!- Deewiant has joined. 12:44:24 -!- cheater2 has quit (Read error: Connection reset by peer). 12:44:53 -!- cheater2 has joined. 13:29:10 -!- augur has quit (Ping timeout: 252 seconds). 13:32:12 -!- roper has changed nick to atrapado. 13:48:55 (CCBI 2.0 completes it in about one-fifteenth of the time that cfunge does. SO YEAH. AnMaster: macro-optimization > micro-optimization.) <-- hm really? 13:49:11 but did you compare with all fingerprints disabled for both? 13:49:26 after all, last I looked ccbi 2 implemented way fewer fingerprints 13:49:34 Here's a nice Microsoft support experience: https://connect.microsoft.com/VisualStudio/feedback/details/546053/ 13:49:36 "But Unfortunately we will not fix this issue as it is not a common code and is not a high priority issue.Thanks for playing with our product." 13:49:37 All fingerprints enabled for both 13:49:54 I especially like the "thanks for playing" bit. 13:49:56 Deewiant, then what bit is so much faster? 13:50:12 Last I looked cfunge doesn't implement any of the mainloop-intrusive fingerprints like IMAP/TRDS? :-P 13:50:19 Deewiant, true 13:50:32 my question still stands 13:50:33 (They're the only ones that really matter) 13:50:46 A better Funge-Space helps 13:50:55 Deewiant, better in what way? 13:50:58 as in, how do you do it 13:51:10 I haven't profiled both cfunge and CCBI to see where exactly each one spends their time, you know ;-P 13:51:17 Complicatedly 13:51:34 Deewiant, well, I know on my system cfunge spends most time in string pushing in y. That bit could be optimised somewhat 13:51:39 env -i reduces it of course ;) 13:52:01 Deewiant, how do you mean "Complicatedly" 13:52:02 -!- augur has joined. 13:52:16 How about you check out the benchmarks and the results at iki.fi/deewiant/befunge/fungicide.html first :-P 13:52:39 Deewiant, is this not on mycology? 13:52:40 then 13:53:01 You could read the whole announcement instead of just that one line, you know :-) 13:53:07 Deewiant, well I couldn't find it 13:53:10 Mycology is pointless to benchmark 13:53:15 Deewiant, that line I quoted was first in my scrollback 13:53:15 Since both cfunge and ccbi do it in 0.000s 13:53:23 it is now out of it completely 13:53:37 Fortunately /topic 13:53:47 Deewiant, 0.000? You have a fast computer then 13:53:53 Yes, I do. :-P 13:53:55 I get it down to two zeros at best 13:54:06 (That's with fingerprints disabled) 13:54:25 even with fingerprints disabled iirc it is something like 0.0024s for both here 13:54:38 With them enabled, maybe 0.002s or something, can't remember. Still less than 0.01s so any differences are completely pointless. 13:55:23 "A Linux system (due to the /proc usage for memory use measurement) with GNU Coreutils" <-- then it will have to wait. I'm on freebsd for most of today alas. 13:55:53 You probably don't want to run the benchmarks yourself. 13:55:58 oh? 13:56:00 why not 13:56:19 it is hard to profile to find out where the issue is without running them myself 13:56:42 Deewiant, anyway, you didn't explain how your funge space works... 13:57:27 "Lastly, a table." What a wonderful sentence. 13:57:41 Gah, tkk.fi is timing out for me 13:57:44 * AnMaster wonders why http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/ times out 13:57:51 ah not only me then 13:58:07 Deewiant: Your Funge benchmarks generated too much traffic for it to handle. 13:58:18 I seriously doubt that :-P 13:58:27 Deewiant, still: 1) why don't I want to run the benchmarks myself to be able to profile it? 2) how does your funge space work? 13:58:39 Deewiant: Soon you'll receive angry letters from the computing centre folks. "Why are you hosting such a popular site on our server?!" 13:58:59 fizzie: I wouldn't be that surprised, since they do say that they don't like that. 13:59:09 But I would be surprised if it were /that/ popular. :-P 13:59:26 AnMaster: I needed to check the numbers from my site to be able to answer 1) properly, but basically because they take a long time to run 13:59:47 AnMaster: Maybe around 20 hours for cfunge on my machine 13:59:49 Deewiant, then it is useless to test improvements with basically then? 13:59:53 sigh 14:00:00 Well, you can run individual ones of course 14:00:09 Deewiant, well, don't they take as long? 14:00:15 Not all of them 14:00:24 Deewiant, and for 2)? 14:00:37 Like said, it's complicated :-P 14:00:38 I seem to be unable to access the source and read it atm 14:01:13 Deewiant, so complicated that you don't know how it works? 14:01:15 or what 14:01:31 (I mean, seriously, I can't see a good reason for not being able to explain it...) 14:02:04 FWIW I think stinkhorn does something similar since it has similar performance characteristics (and beats cfunge often enough) 14:02:11 Deewiant, also, how much ram do they use? 14:02:32 If the site weren't timing out I could answer you 14:02:38 I assume nothing too excessive. Since otherwise I won't be able to run them 14:02:49 Depends on the interpreter :-P 14:02:54 Deewiant: It stopped timing out for me when I did one stop + reload now. 14:03:00 Deewiant, if it is more than 2 GB then I will end up swap trashing 14:03:10 fizzie, still times out for me 14:03:18 For cfunge it'll be more than that on a few of the bigger ones, IIRC 14:03:23 For ccbi it won't be, IIRC. 14:03:31 mhm 14:03:48 fizzie: I'm getting this on ssh to kirves: 'NFS server korppu not responding still trying' 14:03:51 Deewiant, then why don't you explain how your funge space work. Just saying it is complicated isn't a reasonable excuse 14:04:34 Deewiant: Well, "broken" *is* the natural state of a NFS system. 14:04:38 Basically, AABBs whose contents are stored as arrays, with a hash table as a fallback 14:04:41 fizzie: :-D 14:04:47 Deewiant, AABBs? 14:04:52 It's a term. 14:04:55 meaning? 14:05:07 Axis-Aligned Bounding Box. 14:05:13 huh. 14:05:29 Deewiant, something similar to what glfunge was doing? 14:05:41 I don't know what GLfunge was doing. 14:06:04 something with octtrees iirc 14:06:07 * AnMaster looks at fizzie 14:06:33 Deewiant, anyway, how large is each such AABB? 14:06:33 GLfunge had fixed-size (axis-aligned) blocks in a treeish way, I forget the details exactly. It certainly didn't try to figure out code-wise sensible regions to put in a block, for example. 14:06:34 -!- augur_ has joined. 14:06:58 AnMaster: Dynamic. 14:07:08 Deewiant, okay, but do you have some size limits for it? 14:07:11 No. 14:07:14 -!- augur has quit (Read error: Connection reset by peer). 14:07:20 how do you decide when to split them off then? 14:07:32 and when do you use the hash table fallback? 14:07:34 "Split them off"? 14:07:46 Deewiant, well, maybe I misunderstood how you were doing it then 14:07:59 See, it's complicated. ;-P 14:08:07 Deewiant, I assume you create new such ones at runtimes? 14:08:23 Deewiant, well I can't access the code to read it myself atm 14:08:28 Deewiant: Do a facebook account with the name "CCBI 2's fungespace", and set your relationship status with it to "it's complicated". 14:08:28 since the server is still down for me 14:08:41 fizzie, hehe 14:09:13 I even just booted into Windows so I could make Windows binaries so now I can't access the source code myself either :-P 14:09:33 -!- adam_d_ has joined. 14:09:34 Deewiant: Incidentally, do you have any sort of looping in those benchmarks? I was looking at the descriptions and most of them seemed to be of the form "repeat X Y times". Which makes a jitfunge developer sad, since for a benchmark like that, it'd just end up tracing (and interpreting) the contents once. 14:09:35 Deewiant, if you were to make windows binaries you surely have the source for *making* them around too? 14:09:48 fizzie: The -p style ones loop. 14:09:55 AnMaster: I was going to download it from the site. 14:09:57 haha 14:10:13 Since I forgot to copy it over to the NTFS disk. 14:10:20 Deewiant, reboot then? Btw tried mingw? Debian/Ubuntu has a package for mingw cross compiler iirc 14:10:47 I don't think cross compiling D is easy enough 14:10:53 hm true 14:11:00 Deewiant, well it should be with llvm :P 14:11:11 No, because LLVM bitcode is not platform-independent 14:11:20 -!- adam_d has quit (Ping timeout: 245 seconds). 14:11:26 There's platform-specificity before the code reaches LLVM. 14:11:34 isn't the llvm asm in theory if you do it right? 14:11:43 mostly platform independent 14:12:00 a few things like type sizes need to be adjusted 14:12:33 Rebooted. 14:12:44 AnMaster: "Mostly" != "fully". 14:13:04 Deewiant, but the remaining bits shouldn't be *too* hard to account for 14:13:17 And really, it depends. For D it won't be since it'll e.g. be using the wrong exception-handling code. 14:13:21 some of the OS API + some type sizes 14:13:23 I.e. DWARF instead of SEH. 14:13:26 OS API, exactly. 14:13:32 Which is a big thing and nontrivial to convert. :-P 14:13:58 Deewiant, well, stuff like D already does it, doesn't it? Since there are linux and windows versions 14:14:11 The LLVM D compiler doesn't support Windows. 14:14:15 ah 14:14:23 good for their sanity 14:14:29 And even if it did, it wouldn't "do that" 14:14:36 do what? 14:14:41 It just grabs the appropriate #ifdef-equivalent when compiling 14:14:45 LLVM can't see that 14:14:51 well yes you would need system headers 14:14:59 -!- augur has joined. 14:15:24 Temp copy of my site hosted locally at http://tar.us.to:5423/ 14:15:25 like any cross compiler it would need headers from the target system 14:15:38 And since a cross compiler doesn't exist... :-P 14:16:14 Deewiant, what the hell is txz? 14:16:27 -!- augur_ has quit (Read error: Connection reset by peer). 14:16:44 tar.xz 14:16:53 and what is xz? 14:17:17 http://tukaani.org/xz/ 14:17:20 Deewiant, did ccbi use 32-bit or 64-bit cells? 14:17:26 and which did cfunge use? 14:17:32 because cfunge defaults to 64-bit cells 14:17:34 Look.at.the.results. 14:17:42 Deewiant, yes it says ccbi2-32/64 and so on 14:17:43 but 14:17:50 it doesn't tell me if that is -m64 or -DUSE64 14:17:58 which are *very* different things 14:18:04 the fastest variant is -m64 -DUSE32 14:18:09 All executables involved (the interpreters themselves or the interpreters’ interpreters, such as perl and python) were x86–64 ELF binaries. 14:18:16 hm 14:18:20 It says that on the page, you know. 14:18:26 brb phone 14:18:37 Hmm, my SVGs aren't working. 14:22:03 O Firefox, why fail'st thou so 14:22:32 -!- augur has quit (Quit: Leaving...). 14:22:51 -!- augur has joined. 14:26:20 -!- adam_d_ has quit (Ping timeout: 265 seconds). 14:33:22 back 14:33:42 tkk.fi seems back as well. 14:33:45 ah 14:33:57 Deewiant, 403? 14:34:05 hm reloading two times helped 14:34:11 weird 14:35:20 Deewiant, anyway, if this is mostly due to funge space (and I have no clue about profiling D code...) 14:35:27 then I'm lucky 14:35:39 because my funge space code is well abstracted 14:35:48 good generic API against it 14:35:59 So you'll just copy it over as usual? ;-P 14:36:03 Deewiant, nah 14:36:25 Deewiant, did you implement BOOL btw? And what about REXP? 14:36:34 if you did, then surely you just copied it from me! 14:36:46 since I implemented those before you did 14:36:53 REXP and FING are the two new ones in CCBI2, for fungot 14:36:53 Deewiant: letrec is fine, i can verify it 14:37:05 Deewiant, you copied it from me then clearly :P 14:37:08 AnMaster: Hey, at least you have a history of taking code from CCBI :-P 14:37:19 Deewiant, not really. Of studying it yes 14:37:45 Weren't the original issues with TURT in cfunge due to my buggy implementation? ;-) 14:38:46 Deewiant, that wouldn't have been an issue if you hadn't made it buggy 14:38:47 ;P 14:38:50 :-D 14:39:27 Deewiant, but yes, TURT and I guess the matrix fingerprint were based on your ones 14:39:41 because at the time I implemented those I didn't really know much about the underlying areas 14:39:48 that would be required to implement them 14:40:39 Deewiant, looks like cfunge won at http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/horizontal.b98.html 14:40:45 wait 14:40:46 misread 14:40:47 hrrm 14:41:04 Deewiant, where does it list the size of the program? 14:41:09 IIRC cfunge wins at diagdown,diagup,hollow-square 14:41:12 It doesn't 14:41:20 Deewiant, you said that varied on the main page 14:41:23 based on some parameter 14:41:51 Oh, you meant the parameter value? 14:41:53 Deewiant, also I care much more about speed than memory usage. Relatively speaking, memory usage is not very interesting to me 14:41:56 Deewiant, yes 14:42:05 Where are you looking for it? 14:42:18 at http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/horizontal.b98.html 14:42:19 On that page the graphs at the top have it as the x-axis 14:42:34 Deewiant, eh? where are the graphs 14:42:37 I didn't see any graphs 14:42:46 SVG :-/ 14:42:53 Deewiant, I use firefox 14:43:06 They work for me at tkk.fi but they didn't at my locally-hosted one, which was weird 14:43:18 Deewiant, they don't work on tkk.fi for me 14:43:31 Deewiant, they do work on wikipedia 14:43:38 (tried http://en.wikipedia.org/wiki/File:SVG.svg ) 14:43:50 (and also clicking the image) 14:43:58 That's a PNG 14:43:59 :-P 14:44:05 Deewiant, not if you click the image 14:44:19 Yes, that works but embedding seems a bit unfortunately random 14:44:55 Cactus plot for time used. 14:44:55 I presume you see the text instead? "Line plot of foo bar" or whatever 14:44:56 what? 14:45:05 For example that text, yes 14:45:08 What what 14:45:13 Deewiant, why not ? 14:45:17 I thought that was the normal way 14:45:18 Because that doesn't work in Firefox :-P 14:45:22 Deewiant, eh!? 14:45:31 SVG img doesn't work in Firefox: it's a known bug 14:45:39 https://bugzilla.mozilla.org/show_bug.cgi?id=276431 14:45:40 Deewiant, I'm pretty sure it worked for me with .svg in 3.0.x versions 14:45:44 haven't tested recently 14:45:46 You're wrong 14:46:00 Deewiant, shouldn't this be a trivial fix 14:46:14 I mean, rewriting them to object tags internally or something 14:46:15 It's a security issue since SVGs can be scripted 14:46:19 Or something like that 14:46:25 Can't remember the details but no, it's not trivial. 14:46:26 Deewiant, but so can web pages... 14:46:36 But other images can't... I DUNNO 14:46:58 AnMaster: Anyway I presume you see that "cactus plot" text? 14:47:09 okay what the hell 14:47:14 after view source I do see the images 14:47:17 .................. 14:47:19 :-D 14:48:03 Deewiant, anyway it is pretty much guaranteed that whatever-32 is faster than whatever-64 14:48:08 since more data fits in cache 14:48:09 Yes, it is. 14:48:33 how comes mine was so fast for the squares? 14:49:05 Deewiant, anyway the table below, it doesn't state what problem size it is for 14:49:16 It's a summary, it includes all problem sizes 14:49:23 so the total memory? 14:49:26 is it average? 14:49:27 peak? 14:49:35 It is the total memory. 14:49:40 Sum. 14:49:43 you mean run1 + run2 + run3 ...? 14:49:49 Yes, that is what "total" means. 14:49:49 Deewiant, and in what unit 14:50:00 "All time measurements are in seconds (s) and all memory measurements are in mebioctets (Mio)." 14:50:25 ... that unit... 14:50:31 :-D 14:51:02 it took like 3 seconds to figure out what was written. Because "word form" reading broke down 14:51:13 and then another second to parse it 14:51:49 I would complain about you not justifying how these benchmarks are reflective of real-world Funge-98 use, if there was any. 14:52:06 fizzie, :D 14:52:11 fizzie, there is fungot 14:52:12 AnMaster: magic takes away most of the " _" is 0??? 14:52:16 Yes, that would be a minor problem if there were any. 14:52:42 you could test fungot's ul and bf interpreters instead 14:52:43 AnMaster: nngh or something? ( so when cmuscheme48 sends the ' ,from-file foo.scm' command, it would be. 14:52:45 as free standing 14:53:28 Deewiant, ccbi1 stats for hollow square are amazing 14:53:34 how did it even manage that 14:53:37 CCBI1 is quite amazing :-D 14:53:43 slower than language::befunge 14:53:50 Deewiant, why does it say language-befunge there? 14:53:52 not the proper name 14:54:09 None of them say the proper name because I was too lazy to prettify them 14:55:00 AnMaster: And hey, cfunge is slower than Language::Befunge on the two biggest fork.b98 14:55:00 heh read that as petrify 14:55:10 Deewiant, fork.b98 as in t? 14:55:11 well 14:55:22 Deewiant, I will argue that forking a lot is not realistic 14:55:32 thus it is a pretty useless stats 14:55:42 Sure 14:55:53 most programs won't have more than 2 or 3 threads. I can't imagine anything with more than 50 say 14:56:38 Deewiant, cfunge is optimised for expecting few threads. It only grows the thread list in very small chunks. Unlike the stack that is grown in chunks of 1024 elements iirc 14:57:04 what I'm confused about is diagup/diagdown being efficient in cfunge 14:57:14 Deewiant, is that x to set a delta of 1,1? 14:57:37 It uses x to do that, yes (what else?) 14:57:45 Deewiant, oh and if I implement another funge space, expect it to be a compile time option. 14:57:55 so you have to list 4 variants of cfunge next time ;P 14:58:08 Deewiant, well, then it goes like 11x11x? diagonally 14:58:23 or what does it travel over 14:58:27 empty space? 14:58:28 No? It travels over z 14:58:31 ah 14:58:37 "11x followed by the given number of z in a diagonal line." 14:58:50 Deewiant, well I don't know how you implement z... 14:58:59 :-D 14:59:08 sleep(1); return; 14:59:13 sleep(1)? ;P 14:59:14 why 14:59:18 Of course not :-D 14:59:21 har 14:59:54 The problem is that CCBI doesn't handle loading of sparse files efficiently 14:59:57 Deewiant, how many decimals did you use for http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/diagdown.b98.html ? 15:00:01 more than is listed I assume 15:00:13 look at cfunge-32/64 ordering down ther 15:00:14 there 15:00:16 gettimeofday() 15:00:20 on "Individuals" 15:00:24 So microseconds, I guess 15:00:29 since the sorting shows more than what you list 15:00:46 It really doesn't matter if the difference is that small :-P 15:00:59 Deewiant, each is an average over how many runs? 15:01:17 http://users.tkk.fi/~mniemenm/befunge/fungicide.html#measurements 15:01:56 "First, the interpreter is run on a benchmark once and its time and memory use are measured. Memory usage is assumed to not vary, and thus it is measured only this one time per benchmark. " 15:01:57 what? 15:02:03 Deewiant, how can it not vary? 15:02:10 Why would it vary? 15:02:25 Deewiant, oh you mean vary between runs, not vary during a run 15:02:34 Yes, of course :-D 15:02:56 I suppose I could just always take the memory usage as the first value 15:03:03 Deewiant, well, since cfunge sets up randomness at startup, presumably the code path to write it could look slightly different 15:03:18 so srandom(19847682764) vs. srandom(19847682372) 15:03:20 or whatever 15:03:22 I also assume that that makes absolutely no difference 15:03:29 hm wait 15:03:39 I think I use the microseconds from gettimeofday() 15:05:17 Deewiant, the thing to do is to make it double fork and run the original process only for console IO 15:05:22 that should confuse your stuff ;P 15:05:42 Deewiant, also I notice you skipped efunge 15:05:43 how comes 15:05:45 I'll disqualify such an implementation for being abusive :-P 15:06:17 "There have not yet been any release, first release (0.0.1) is expected in late October or early November (2008)." 15:06:29 Deewiant, anyway, what does mmap() calls show up as in /proc/self/smaps ? heap? 15:06:39 err 15:06:44 s/self/pid/ 15:06:47 I'll be honest: I don't know. The numbers seemed representative so I went with them. 15:07:36 Deewiant, also since cfunge mmap()s the input file I assume it will drop sharply once the file is loaded 15:08:51 Deewiant, what is up with plots/horizontal.b98/1000000/line-memtime.svg 15:09:17 Something up? 15:09:32 yes? 15:10:19 Deewiant, it looks weird for the lower one 15:10:20 If you mean the Rc/Funge-98 messing about, I've seen it do that elsewhere as well and I don't think the measurements are wrong 15:10:25 ah 15:10:42 Deewiant, and why is the cfunge plot in plots/horizontal.b98/100000/line-memtime.svg discontinuous? 15:10:59 it goes to almost zero at one point? 15:11:54 I don't know; that happens as well, with many interpreters; they start out high, then drop, then climb "normally" 15:11:58 Deewiant, and uh plots/horizontal.b98/10000000/line-memtime.svg has two red lines at once? 15:12:06 memory is no longer a function of time 15:12:16 since there is more than one value 15:12:23 Huh? 15:12:35 Deewiant, there is a constant red line at the top 15:12:45 and there is one normal one further down 15:12:48 Yes; that's in all the plots 15:12:53 ah indeed 15:12:55 It just marks the theoretical maximum 15:12:55 and why= 15:12:59 I.e. the amount of memory in my system 15:13:02 ah 15:13:14 The time ones have something similar, for the timeout of 10800 seconds 15:13:17 Deewiant, I thought it was ccbi1 :P 15:13:24 maybe some other way to mark it 15:13:26 say dashed line 15:13:29 would work better 15:13:48 For some reason the SVG terminal in gnuplot doesn't use non-solid lines for the interpreters, it was better in postscript 15:13:48 Deewiant, did cfunge ever hit the timeout? 15:14:05 You can see that in the main summary: no, it didn't 15:14:17 2318.5 seconds was the maximum for cfunge-32 15:14:41 mhm 15:14:49 Deewiant, and what about memory limits 15:14:53 plus the graphs on the main page 15:14:57 ? 15:14:57 I haven't figured them out 15:15:05 they make little sense 15:15:17 benchmarks completed -> time? 15:15:21 that doesn't make sense to me 15:15:34 There's a textual explanation above, you know 15:15:36 how is time a function of how many of the benchmarks were successfully completed? 15:15:42 Deewiant, read it, confused me even more 15:16:03 It's just the maximum time needed to complete that many benchmarks 15:16:05 "First a few cactus plots: the vertical axis displays the maximum amount of resources (time or memory) used to solve the corresponding number of benchmarks" <-- perhaps you mean "correspondingly numbered"? 15:16:12 No, I don't 15:16:18 then I can't read it still 15:16:29 oh it is a sum? 15:16:36 of the time up until then? 15:16:45 No, it's not cumulative, it's the maximum. :-P 15:16:56 what? 15:17:00 that makes NO sense 15:17:21 If you have ten benchmarks that take: 1 1 1 1 1 2 2 2 2 3 seconds, you'll get five dots at 1, four at 2, one at 3 seconds 15:17:32 (With the x-coordinate increasing by one each time) 15:18:16 hm 15:18:26 See e.g. http://www.cril.univ-artois.fr/SAT09/results/timegraphs.php?idev=22 for a precedent, I didn't make this up ;-P 15:18:47 Deewiant, so what if the ten benchmarks take: 15:18:55 1 1 1 1 1 2 2 2 3 3 2 15:19:01 Same thing 15:19:01 or 11 I guess 15:19:08 Or wait, that's one more 3 15:19:10 But anyway 15:19:11 Deewiant, so you get three or two three dots? 15:19:12 It's sorted first 15:19:17 ........... 15:19:25 So that's equivalent to 1 1 1 1 1 2 2 2 2 3 3 15:19:31 Deewiant, that is useless for getting an overview of which ones are slow 15:19:45 It's meant for comparing the interpreters, not the benchmarks 15:19:55 Deewiant, and didn't stinkhorn complete any btw? 15:19:58 well 15:20:02 only a few 15:20:04 it looks like it 15:20:05 ? 15:20:11 oh wait 15:20:13 that is pyfunge 15:20:18 so pyfunge crashed? 15:20:27 This is all explained in the text 15:20:32 which part 15:20:40 "Note on misbehaviour" 15:21:16 # CCBI 1.0.20 can’t handle fork.b98 past 4096 threads at all, crashing in some way. 15:21:18 oh? 15:21:19 why? 15:21:27 "in some way" == "I don't know" 15:21:30 Deewiant, does it stop at the first one crashed? 15:21:37 "it"? 15:21:41 ... 15:21:47 the diagram 15:21:59 since it seems cut short very early for ccbi if just the fork one failed 15:22:20 You can see the number of benchmarks run in the table below 15:22:27 74 for most, 69 for CCBI 1, 42 for PyFunge 15:22:33 hm 15:22:57 Deewiant, do the fork threads exit right away? 15:23:02 or do they continue to run? 15:23:08 They're all alive when the first one hits @ 15:23:29 hm 15:23:52 for the forks one, I think that simply tuning the realloc() growing size for threads would change it a lot 15:24:03 Possibly 15:24:29 http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/fork.b98.html <-- why are there extra smaller diagrams? 15:24:30 CCBI just does a braindead append, leaving the GC to handle it (and everybody who's used D for a while knows that this is a good way to kill performance) 15:24:42 There are no extra diagrams, they're all the same 15:24:51 there are a lot of tiny ones at the end 15:24:54 Why Firefox displays some as small, I do not know 15:24:59 ah 15:24:59 Move your mouse over them 15:25:24 Deewiant, does nothing? 15:25:36 For me it enlarges them if they're small :-P 15:25:53 reloading the page makes them large 15:25:55 View in a separate tab/window/program if they're problematic 15:26:03 Deewiant, btw I found out I have to allow scripts if I want the svgs to show 15:26:15 Yes, that blocks them 15:26:31 which is silly, it noscript only blocks the scripts, not the whole page normally 15:26:37 so why should it be any different for svgs 15:26:44 only block the scripts in the svgs 15:26:50 Shrug 15:27:15 For me noscript displays a placeholder with its logo if it blocks them, so I thought that'd be obvious, sorry :-P 15:27:59 Deewiant, anyway I bet I could make a number of benchmarks where cfunge would be way faster :P 15:28:21 ccbi1 as the fastest one would have a hard time though 15:28:27 bbl making food 15:28:46 I've asked you for benchmarks three times over the past six months; IIRC you responded once saying that you didn't have any ideas 15:28:52 So suffer ;-P 15:34:52 I think you mentioned life.bf once, but I couldn't be bothered to figure it out and adapt it into a benchmarkable form 15:59:52 Deewiant, well life.bf is useful 16:00:05 and so is fungot's ^bf and ^ul 16:00:05 AnMaster: misc/ packages.scm 16:00:39 Deewiant, and what I do with life.bf is run it for 20 seconds. then kill it. Then check how large the output file is 16:00:49 quite easy to benchmark 16:01:06 Deewiant, I think I told you the command line I used before 16:01:23 so it is very benchmarkable yes 16:01:35 Changes there might even depend on the level of I/O buffering 16:01:44 Which has nothing to do with performance 16:02:13 Deewiant, stdout redirected to something tends to become fully buffered 16:02:46 Where the buffer size can vayr. 16:02:47 vary. 16:03:05 Fungot seems to suggest using "misc/packages.scm", but I'm not sure how that'd work. 16:04:14 Is there some sort of canonical brainfuck benchmark? You could run that on the ^bf interp, or some other Befunge-brainfuck. Not that that'd be very indicative of those mythical real-world workloads either. 16:04:16 AnMaster: Preferably: replace the , with $ and set it up so that it stops after some (preferably easily changeable) number of iterations 16:04:35 (But that's what I haven't bothered to do) 16:05:37 -!- Alex3012 has joined. 16:13:49 -!- oerjan has joined. 16:16:38 -!- adam_d_ has joined. 16:34:12 -!- lereah_ has quit (Quit: Leaving). 16:42:22 -!- augur has quit (*.net *.split). 16:43:16 -!- augur has joined. 16:43:18 -!- augur has left (?). 16:43:18 -!- augur has joined. 16:47:36 -!- augur has set topic: History | News: 0 events tunes.org private sector in the beginning of Christ Foundation | http: / / / ~ 2 per year - and through Torah mandelstam. | http://tunes.org/~nef/logs/esoteric/?C=M;O=D. 16:48:21 -!- augur_ has joined. 16:48:45 spot the difference. 16:49:36 -!- augur has quit (Read error: Connection reset by peer). 16:58:23 Deewiant, IO tests are interesting too 16:59:08 -!- adam_d__ has joined. 16:59:09 But try not to conflate it with non-IO. 17:01:58 -!- adam_d_ has quit (Ping timeout: 265 seconds). 17:02:12 Deewiant, hm? 17:02:28 Deewiant, btw: awk '{print $6}' /proc/*/maps | sort -n | uniq -c | grep -Ev '/usr/lib/.*\.so' indicates mapped files are shown not as heap 17:02:32 not sure about anon mmap 17:02:56 I.e. if you're going to benchmark IO, try to benchmark only IO, not IO + something otherwise performance-intensive. 17:03:00 there are also lines like: 17:03:02 /proc/8939/maps:7fab50ecf000-7fab50f2f000 rw-s 00000000 00:04 23592979 /SYSV00000000 (deleted) 17:03:03 /proc/9438/maps:7f1396aa0000-7f1396b00000 rw-s 00000000 00:04 23756833 /SYSV00000000 (deleted) 17:03:05 quite interesting 17:03:19 fizzie, btw for bf benchmark that mandelbrot in bf wasn't very fast iirc 17:03:23 it should be useful 17:03:35 as in, extremely slow without optimising 17:03:43 and still slow with optimising compiler 17:04:20 /proc/2407/maps-7f7165c88000-7f7165c89000 ---p 00000000 00:00 0 17:04:20 /proc/2407/maps-7f7165c89000-7f7166489000 rw-p 00000000 00:00 0 17:04:25 now those are some strange mappings 17:04:40 that is - after since it was from grep -C 17:05:08 Deewiant, and smaps is iirc the same, just with more info 17:05:12 so harder to grep in 17:05:17 since it is not one entry per line 17:06:03 Deewiant, looks like firefox mmap()s ~/.mozilla/firefox/profilename/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}/chrome/adblockplus.jar and so on 17:06:06 for all the extensions 17:06:09 interesting 17:06:46 Deewiant, btw as far as I can tell erlang doesn't use the system heap 17:06:54 it is zero in size 17:07:04 it mmap()s areas and use those I think 17:07:21 Deewiant, so yeah testing efunge that way would require adjustments 17:08:01 I'm /fairly/ sure that anon mmap() is included. 17:08:18 I'd be very surprised if those programs all used only brk(), at least. 17:08:39 Deewiant, no, I'm pretty sure there isn't 17:08:46 7f55b454e000-7f55b46e5000 rw-p 00000000 00:00 0 17:08:46 7f55b4762000-7f55b7f18000 rw-p 00000000 00:00 0 17:08:46 7f55b7f84000-7f55b8085000 rw-p 00000000 00:00 0 17:08:46 7f55b80f2000-7f55b8572000 rw-p 00000000 00:00 0 17:08:49 those are anon mmaps 17:08:52 as far as I can tell 17:09:05 Deewiant, because the way that erlang works, I can see how those varies 17:09:12 both in number and in size 17:09:13 when it runs 17:09:33 I mean, included by my measurer: it doesn't grep over anything that looks like that IIRC 17:09:42 (I.e. I don't really know what you're talking about) 17:10:26 Deewiant, you said you added heap + stack from smaps iirc? 17:10:30 or did I misunderstood you? 17:10:42 I didn't say anything, I wrote something on the web page 17:10:42 misunderstand* 17:10:47 Deewiant, well okay 17:11:02 Deewiant, but [heap] is brk() as far as I can tell in some simple tests 17:11:04 'Memory usage is measured using a Python script which repeatedly reads the /proc//smaps pseudofile, summing up any “Shared” and “Private” values.' 17:11:06 and anon mmaps are not there 17:11:31 Deewiant, Shared_Clean or Shared_Dirty? 17:11:40 or both? 17:11:48 Both 17:11:51 both Shared and Private seems to be split into Clean/Dirty here 17:12:09 Anything that starts with "Shared" or "Private" is summed 17:12:25 Deewiant, due to COW and such on I'm not sure this is actually good 17:12:30 you should look at the type of the object 17:12:32 Neither am I 17:12:34 probably 17:12:36 But it seemed representative 17:12:45 Deewiant, like libc seems mapped more than once into some processes 17:12:47 which is weird 17:12:56 wait no 17:13:03 those are read/readonly/nx and so on 17:13:29 Unless you have a full replacement solution ready or you can find something that would cause a significant mismeasurement I'm not fussed :-P 17:13:53 Deewiant, well for one, erlang -smp would cause problems I think 17:14:16 let me check 17:15:03 ah hm 17:15:29 seems the threads go into /proc//task//smaps 17:15:49 hm 17:16:06 aha 17:16:15 the thread specific stacks are gone from the main one it seems 17:16:22 7f1106688000-7f1106699000 rw-p 00000000 00:00 0 [threadstack:0000fff0] 17:16:36 or wait 17:17:14 well not sure 17:17:26 linux does seem to try to do something "reasonable" for phtreads apps 17:17:54 Deewiant, is there any graph over which test took the longest for a given implementation? 17:18:06 Like I want to see what else than t that cfunge was extremely slow at 17:18:14 if anything 17:19:04 -!- augur_ has quit (Ping timeout: 268 seconds). 17:19:11 Deewiant, oh btw: 17:19:13 // For concurrent funge: how many new IPs to allocate in one go? 17:19:13 #define ALLOCCHUNKSIZE 1 17:19:17 that explains a lot I think 17:19:18 How would one graph that? :-P 17:19:29 Deewiant, as a venn diagram! 17:19:32 (not really) 17:19:33 >_< 17:19:50 Deewiant, was that >_< over the #define? 17:19:53 -!- augur has joined. 17:19:57 No, the venn diagram 17:20:01 But I suppose it works for that too 17:20:35 It is soon AI competition time again; I get to invent new plots to draw about the games, yay. 17:20:41 For finding the "worst" for anything, grab the preprocessed data and do some awk or something... 17:20:45 Deewiant, I'm not sure non-1 sizes will work properly 17:20:52 I have to check 17:21:01 AnMaster: Some #define if only one value is ever correct :-D 17:21:03 (ipList*)malloc(sizeof(ipList) + sizeof(instructionPointer[ALLOCCHUNKSIZE])) 17:21:07 I thought I fixed that code? 17:21:13 (ais helped me figure it out) 17:21:24 hint: instructionPointer is a *type* 17:22:01 Deewiant, fizzie now one C nerd mark if you can tell me what it does and why it works. 17:22:18 also, it confused no ends out of the static analyser sparse 17:22:42 Isn't it just taking the sizeof of a static array? 17:22:48 Seems rather trivial to me... 17:22:49 Deewiant, not a static array no 17:22:56 Deewiant, but yes in that case 17:22:59 the other case was better 17:23:04 -!- adam_d__ has changed nick to adam_d. 17:23:19 Deewiant, there it was sizeof(instructionPointer[(*me)->size + ALLOCCHUNKSIZE]) 17:23:22 Deewiant, :) 17:23:23 Yes, I remember that VLA one... but I guess that should be equally obvious 17:23:24 ah 17:23:57 * AnMaster wonders why he cast the value of malloc() 17:24:04 I mean, it isn't like this is C++... 17:24:41 uh, what did I just do... 17:24:45 recursive sshfs I think 17:26:15 Deewiant, where was the link to the .xz tools now again? 17:26:28 because 17:26:33 it isn't in repos 17:26:38 of ubuntu 9.04 it seems 17:26:43 O_o 17:26:53 It's in [core] in Arch 17:27:07 You sure you don't have it already? 17:27:27 Indeed, xz-utils only appears in karmic and lucid. 17:27:32 Deewiant, I'm on my laptop... 17:27:38 since it has a better CPU 17:27:42 way better one 17:27:45 (C.f. http://packages.ubuntu.com/search?keywords=xz-utils&searchon=names&suite=all§ion=all) 17:28:05 meh *third level recurses ssfs to uncompress it* 17:28:21 (since I mounted a different subtree before 17:28:23 ) 17:28:24 hm 17:28:28 AnMaster: What do you decompress lzma with? 17:28:45 Deewiant, lzma -d ? 17:28:50 Where lzma is from? 17:29:02 $ which lzma 17:29:03 /usr/bin/lzma -> /usr/bin/xz 17:29:06 $ lzma --help 17:29:07 lzma 4.32.0beta3 Copyright (C) 2006 Ville Koskinen 17:29:07 Based on LZMA SDK 4.43 Copyright (C) 1999-2006 Igor Pavlov 17:29:17 $ file /usr/bin/lzma 17:29:17 /usr/bin/lzma: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped 17:29:33 Huh. 17:29:41 Homepage: http://www.7-zip.org/sdk.htm 17:29:44 says apt-cache 17:29:49 if I guessed the right package 17:29:50 bbl 17:29:58 You did. 17:30:00 got to do something other, more important, RL 17:30:12 Well, with luck, that'll decompress it as well :-P 17:31:15 fis@eris:~$ apt-cache show $(dpkg-query -S $(which lzma) | cut -d ':' -f 1) | grep ^Homepage: 17:31:15 Homepage: http://www.7-zip.org/sdk.htm 17:40:43 This Ubuntu lucid installation has xz-utils installed by default (depended by Gnome's file-roller thing), but it still won't overwrite /usr/bin/lzma with a symlink. (The "lzma" package has priority: required, and is therefore also installed.) 17:41:56 -!- oerjan has quit (Quit: leaving). 17:52:08 Deewiant, so the xz file is just lzma? 17:52:32 * AnMaster looks for the README on fungicide 17:52:46 It might be different if xz does something different based on argv[0]... 17:53:24 Deewiant, neither integrates into tar though, at least there seem to be no equiv to tar -z or tar -j for lzma here on ubuntu 17:53:39 That's GNU tar specific anyway 17:53:40 The page about xz-utils did say that .xz is a newer container, even though the LZMA algo is still LZMA. 17:53:51 Deewiant, true, but that is the tar I normally use 17:54:05 And lucid's GNU tar has a -J flag for xz. 17:54:10 -J, --xz 17:54:10 filter the archive through xz 17:54:31 And --lzma for lzma. And --lzop for lzop. 17:54:39 Lzo too? Nice. 17:54:40 lzop? 17:54:42 (The latter is yet another LZMA-based thing.) 17:55:00 Isn't LZO completely different? 17:55:00 Oh, right, lzop *was* LZO-based. 17:55:03 Deewiant, anyway, I can't figure out how to just run a timed test on forking 17:55:10 Yes, I was just under the impression that lzop had a silly name. 17:55:19 lzop is deliciously fast. 17:55:28 pikhq, bad compression ratio iirc? 17:55:28 AnMaster: You can comment stuff out from runs.dat with # 17:55:33 But it was in fact so that lzop is based on LZO; it was *lzip* that was the yet another LZMA-based utility I was thinking of. 17:55:38 Then make an interpreters.dat and use runallruns 17:55:41 There's certainly a number of them. 17:55:47 AnMaster: Not too far from gzip, actually. 17:56:06 Deewiant, yes but where do I run just the fork test. Like I need to run it under valgrind --tool=cachegrind 17:56:20 Deewiant, (for small sizes only of course) 17:56:23 AnMaster: The nice thing about lzop, though, is tat it means your compression is likely IO bound. ; 17:56:27 ;) 17:56:35 pikhq, what about from ramdisks ;P 17:56:56 (where small is something like mycology sized) 17:56:57 AnMaster: Just set up an interpreters.dat with valgrind 17:57:19 Deewiant, that needs to be valgrind --tool=cachegrind --lots-of-other-parameters build_opt_dbg/cfunge 17:57:24 hm 17:57:27 So do that? :-P 17:57:35 You can use runone.pl directly too I guess 17:57:51 Deewiant, okay, and where does that helper fungify need to be? 17:57:55 In path 17:58:03 Deewiant, and how does one compile it? 17:58:08 ghc --make 17:58:16 AnMaster: The speed of LZO is approx. 1/6th that of memcpy. 17:58:20 Deewiant, in the same dir as the .hs file? 17:58:22 that's all? 17:58:25 ghc --make file.hs 17:58:29 -!- MizardX has joined. 17:58:40 fungify.hs:54:7: 17:58:40 Could not find module `Test.ChasingBottoms.TimeOut': 17:58:40 Use -v to see a list of the files searched for. 17:58:41 AnMaster: Well, you need to have the dependencies installed, which you may or may not 17:58:42 Deewiant, any clue? 17:58:51 cabal install chasing-bottoms IIRC 17:59:01 If you lack cabal... blame your distro 17:59:23 bash: cabal: command not found 17:59:24 yeah 17:59:46 nothing matching "chasing-bottoms" either 18:00:00 -!- cal153 has joined. 18:00:26 Deewiant, if I compile it on another system, will it run on this one? 18:00:31 also what the heck is up with ghc on arch: 18:00:46 If it's the same arch and dynamic library versions, it probably will 18:00:46 Targets (1): ghc-6.12.1-4 18:00:47 Total Download Size: 54.21 MB 18:00:47 Total Installed Size: 665.06 MB 18:01:00 That's normal, isn't it? 18:01:01 Deewiant, I have 6.8.2 on ubuntu 18:01:06 sigh 18:01:16 AnMaster: Get cabal 18:01:18 Deewiant, can you provide a static binary of it? 18:01:19 On your ubuntu 18:01:21 the file 18:01:22 AnMaster: x86-64 18:01:27 Deewiant, yes that is fine 18:01:33 it is exactly what I need 18:01:39 tar.us.to:12345 18:02:12 lets try it 18:02:40 ./fungify: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory 18:02:41 :/ 18:02:46 :-P 18:02:51 Deewiant, doesn't it support static linking? 18:03:05 To GMP, I don't think so 18:03:08 Since that would violate GPL 18:03:10 IIRC 18:03:15 -_- 18:03:22 Hooray for GPL :-P 18:03:24 Deewiant, wouldn't even using GMP at all do so then? 18:03:30 No, dynamic linking is fine 18:03:44 (Note: I can't remember but I think this was an issue once) 18:04:12 Deewiant, and how can I quickly check that it works. Just running it does nothing 18:04:21 fungify 123 18:04:38 * AnMaster copied /usr/lib/libgmp.so.10 from another computer and is using LD_LIBRARY_PATH 18:04:44 Deewiant, '{ ? 18:04:54 If it outputs something it probably works :-P 18:05:13 right. what a mess though :P 18:06:02 It was originally just meant for my own use but then it turned out to be very handy in fungicide 18:06:11 Deewiant, there is no option to just generate the file? Since I know from experience that running valgrind with LD_LIBRARY_PATH will set will sometimes break all hell lose 18:06:44 AnMaster: If you use runone.pl directly it'll take the program as an argument (i.e. the generated file) 18:06:51 hm 18:07:40 Can't locate BSD/Resource.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./runone.pl line 6. 18:07:41 eh? 18:07:53 Use the CPAN, Luke 18:08:10 And if your distro doesn't have /that/, take it around the corner and shoot it :-P 18:08:15 is it BSD::Resources? 18:08:40 ah libbsd-resource-perl seems relevant 18:09:15 why is there a libbsd-resource-perl-dbgsym I wonder... 18:09:50 hm it installs a *.so, right 18:10:41 Deewiant, okay this one is more confusing: 18:10:43 "make_path" is not exported by the File::Path module 18:10:43 "remove_tree" is not exported by the File::Path module 18:10:54 File::Path *does* seem to be there 18:11:15 Which version? 18:11:24 Mine is 2.08 18:11:35 eh, trying to find out 18:11:44 cpani File::Path 18:11:47 18:12:15 cpan starts asking me questions instead 18:12:33 Answer it? ;-P 18:12:46 well I don't know them, about build dirs and such 18:13:00 Deewiant, anyway I don't want to end up with non-distro files in /usr 18:13:37 Then set up some kind of site_perl in $HOME, which I would guess is possible 18:13:42 Deewiant, is it libfile-path-expand-perl ? 18:13:58 Deewiant, it seems File::Path is built into perl? 18:13:59 How would I know? It is File::Path 18:14:04 as in, same package 18:14:21 perl v5.10.0 btw 18:14:29 5.10.1 here 18:14:48 Feel free to modify runone.pl if you think that'll be easier :-P 18:15:06 nah 18:15:13 http://search.cpan.org/~dland/File-Path-2.08/Path.pm 18:15:31 /usr/share/perl/5.10/File/Path.pm 18:15:32 wth 18:15:42 there is /usr/lib/perl and /usr/share/perl 18:15:44 INST_FILE /usr/share/perl5/site_perl/5.10.1/File/Path.pm 18:16:10 Deewiant, how wound one tell version from the *.pm file? 18:16:19 I don't know 18:16:26 ah 18:16:29 version is 2.04 18:16:37 at least it says $VERSION = '2.04' 18:16:49 s/$/;/ 18:17:09 Deewiant, bbl, have to rush, will be back in ~1 hour, 20 minutes 18:17:10 I know very little Perl-the-language and practically none Perl-the-community apart from that CPAN typically works very well 18:18:23 AnMaster: You also realize that you don't have to use any of the Fungicide scripts... I typically didn't when playing around with them, I just used time(1) 18:18:39 s/them/the benchmarks/ 18:20:32 -!- uorygl has quit (Quit: leaving). 18:22:22 make_path and remove_tree are File::Path's new names for mkpath and rmtree; they do much the same thing, but with a bit different arguments. 18:23:44 File::Path 2.04 is from 24 Nov 2007, that's not so new. According to its documentation -- http://search.cpan.org/~dland/File-Path-2.04/Path.pm -- it didn't yet have those new variants. 18:26:20 -!- charlls has joined. 18:38:20 -!- ehirdiphone has joined. 18:38:33 Teleparts of? Pseudo-dispatch time. 18:39:10 Yote. 19:01:40 ehirdiphone: How farest thou? 19:01:59 Shitty. 19:02:24 I need to figure out a way to code on this thing. 19:02:50 Jailbreak + terminal.app? 19:04:53 SSH over IRC? 19:05:16 Deewiant: Ow 19:05:17 Although I guess that's not on that thing specifically 19:08:34 -!- cheater2 has quit (Ping timeout: 264 seconds). 19:08:45 -!- cheater2 has joined. 19:10:05 -!- charlesq__ has joined. 19:10:17 Well, the keyboard is an issue. 19:10:48 And considering my language preferences the lack of Greek letters ;-) 19:11:51 :•) it can type €$¥• though 19:11:57 Esy. 19:13:27 -!- charlls has quit (Ping timeout: 258 seconds). 19:26:56 -!- Gregor has quit (Read error: Connection reset by peer). 19:29:13 -!- charlls has joined. 19:30:12 -!- ehirdiphone has quit (Quit: Get Colloquy for iPhone! http://mobile.colloquy.info). 19:31:51 -!- charlesq__ has quit (Ping timeout: 258 seconds). 19:32:18 -!- charlls has quit (Read error: Connection reset by peer). 19:32:25 Deewiant, oh? I thought the scripts were there to generate something. Otherwise, why would that fungify be needed? 19:32:45 -!- adam_d has quit (Ping timeout: 265 seconds). 19:33:21 in fact I can't find any *,b98 files in there 19:33:27 AnMaster: The scripts in benchmarks/ generate the files run 19:33:32 They're all self-contained 19:33:43 hm 19:33:44 okay 19:33:59 Deewiant, why not use y to get the the value on the command line? 19:34:34 Too complicated :-P 19:34:41 Deewiant, So I run something like: perl fork.b98.pl 123 > fork-123.b98? 19:34:47 Yep 19:35:01 Note that for fork it has to be a power of two; not sure what'll happen if not 19:35:03 but I can't see where fork invokes fungify? 19:35:11 They don't /all/ need it 19:35:15 heh? why? 19:35:26 I mean 19:35:27 Why would they all need it? :-P 19:35:28 the power of two 19:35:32 not the needing of the script 19:35:43 Because it was easy to write it that way 19:36:04 If it's not a power of two it'll probably behave as though it were rounded down to the next power of two... I think 19:36:10 s/next/previous/ 19:36:12 hm the output size of the fork one grows one line per power of 2? 19:36:23 Yeah, something like that 19:37:25 Deewiant, does language::befunge have some huge fixed overhead? Since it was way slower than cfunge until the 65536 graph 19:37:37 Of course it does 19:37:38 It's in PERL 19:37:57 Deewiant, yes but I would have expected a constant factor, not a constant term, which it what it looks like to me 19:38:06 maybe I'm too tired 19:38:17 been up for 15 hours now 19:38:18 The plot is logarithmic, remember 19:38:29 ah 19:38:29 (IIRC) 19:38:43 I always disliked log plots. Don't know why. 19:38:52 maybe because they are so wooden? 19:39:01 Har de har 19:39:54 Deewiant, oh and I think that fork script rounds down to nearest power of two 19:39:58 at least it looks like that 19:40:09 eh 19:40:12 round to nearest? 19:40:15 Yes, that's what I guessed 19:40:22 Oh, nearest? 19:40:34 I'd think it goes down but whatever 19:41:05 Deewiant, no. It is inconsistent. 32767 and 32768 are same size, but 32769 is one larger 19:41:14 and isn't 32768 a power of two? 19:41:21 so rounds upwards 19:41:25 not downwards 19:41:29 Alright 19:41:35 * AnMaster *is* tired 19:41:41 Yeah, that actually makes sense 19:44:16 Deewiant, okay, so the thing to do is to grow it by 2^16 bytes each time right? ;P 19:44:21 that will lead to few reallocs 19:44:35 or maybe 2^24 19:44:39 even fewer reallocations 19:44:58 You're hopeless, you know that? :-P 19:45:07 Deewiant, you know I'm joking right 19:45:08 ? 19:45:16 Yes 19:46:00 Deewiant, I may allow all these as user tunables btw 19:46:38 and then suggest in README that "for optimal performance, these tunables should be carefully tested and optimised for your needs" or such 19:49:00 Deewiant, what do you think about that? 19:49:29 Go ahead? Nobody will tune them :-P 19:49:41 Deewiant, you know iirc ATLAS does something like that 19:49:51 s/ow/ow,/ 19:51:09 -!- ehirdiphone has joined. 19:53:41 Deewiant, how many IPs does ccbi allocate in one go? 19:53:58 2010-04-06 17:24:06 ( Deewiant) CCBI just does a braindead append, leaving the GC to handle it (and everybody who's used D for a while knows that this is a good way to kill performance) 19:54:08 Deewiant, oh I thought that was CCBI1? 19:54:15 Didn't change it in 2 19:54:20 hm 19:54:35 Deewiant, is that a linked list? 19:54:42 Nah, array 19:54:56 Deewiant, high level array that might allocate in chunks internally? 19:55:41 Yeah, the builtin array that does whatever and in practice does something poor 19:56:02 hm 19:56:49 well strange, allocating 32 ips per chunk doesn't change the time very much 19:57:11 about 10 seconds, from 3 minutes, 13 seconds, to 3 minutes, 2 seconds 19:57:14 wtf 20:02:46 also wtf at cpufreq-info: 20:02:48 current policy: frequency should be within 800 MHz and 1.60 GHz. 20:02:50 and I can't change it 20:02:58 as in, changing seems to work but does nothing 20:10:25 Deewiant, Wait, do you append the ip even if it isn't the last one that is forking? 20:10:30 how would that work 20:10:40 I memmove it to the right place 20:11:01 I think I found the issue, and that I need to reverse the order I traverse the ip list in 20:11:36 hm 20:16:11 Deewiant, do you memmove to delete an IP in the middle too? 20:16:20 Yeah IIRC 20:16:56 hm 20:19:39 -!- tombom_ has joined. 20:20:44 Deewiant, okay the issue seems to be the code that basically does memmov 20:20:53 Deewiant, do your list only contain pointers to IPs or such? 20:20:58 that could explain it somewhat 20:21:19 Yes, it does 20:21:22 right 20:21:56 Deewiant, on the basis that for the normal use case I reduce fragmentation and increase locality of reference I store them inline in the list 20:22:02 of course, that backfires for this weird case 20:22:13 -!- tombom has quit (Ping timeout: 268 seconds). 20:22:26 Deewiant, because for smaller cases I found it was faster than storing a list of pointers 20:22:39 How big is one of your IPs? 20:22:51 Deewiant, not sure on the top of my head 20:22:53 let me check 20:22:57 -!- jcp has joined. 20:22:58 s/on/off/ 20:23:57 right 20:24:11 680 bytes according to gdb 20:24:27 most is due to the array of fingerprint stacks being inline in the IPs 20:24:31 gtg, bye! 20:24:33 -!- ehirdiphone has quit (Quit: Get Colloquy for iPhone! http://mobile.colloquy.info). 20:24:56 Deewiant, this works very well when we have a "realistic" number of IPs. Which would be something less than 10. 20:25:15 maybe I will provide a compile time option for another variant 20:25:45 So 85 pointers' worth; moving that around will obviously be more expensive, yes 20:26:06 Deewiant, for most programs the locality of reference wins over that easily. 20:26:22 I would say that this is a non-realistic test case anyway. 20:27:19 Deewiant, it would have been smaller if only you would have let HRTI have a global state, and SUBR being relative also being global 20:27:46 those add 9 bytes in total (1 x pointer to HRTI data + 1 x bool for SUBR being relative) 20:28:13 Deewiant, so yeah, I'm going to make a "stupidly large" variant a compile time option 20:28:54 You don't have to win on every stupid benchmark :- 20:28:54 P 20:29:09 Deewiant, sure I do. If I make a better funge space it will also be an option 20:30:44 Deewiant, so that gives 2^3 options (32/64, model1/model2 funge space [note: need to think of good names for them], normal/super-sized-benchmark IP list model) 20:30:46 so far 20:31:11 I'm not going to test every silly variant :-P 20:31:20 Deewiant, well, drop 64-bit cells then 20:31:51 that one is always slower, or at least same speed. Sure it sorted above in one table, but both showed same value there, so probably not statistically significant 20:31:52 I'd rather drop 32-bit ones 20:31:57 Deewiant, why? 20:32:05 It's a 64-bit machine... 20:32:13 Deewiant, but 32-bit *cells* are faster 20:32:17 quite obviously 20:32:58 The difference is small enough that I don't really care 20:33:10 $ bzr branch trunk alt_ip_list 20:33:32 Deewiant, hey, in one place it was cfunge-32 - stinkhorn - cfunge-64 iirc 20:33:47 So improve cfunge, not my problem ;-P 20:34:05 Deewiant, I could make 32-bit cells default, and hide 64-bit on the advanced page or such 20:34:59 only reason 32-bit isn't default is to make funge programmers aware of that they can't assume 32-bit in their programs 20:36:02 -!- Gracenotes has quit (Quit: Leaving). 20:36:32 Clearly you should use 8 bit cells and assembly. 20:36:56 (so you can use ah, al, and friends) 20:37:13 ah is slow, don't use that. 20:38:52 pikhq, funge-98 requires 32-bit or more 20:39:19 Deewiant, the text on http://users.tkk.fi/~mniemenm/befunge/mycology.html seems outdated 20:39:45 Whoops, forgot to change the year 20:39:47 Anything else? 20:39:56 Deewiant, well, don't know, is the file the current one? 20:40:03 Should be 20:40:05 the zip to be specific 20:40:14 AnMaster: Fine, fine. Do it on a 32-bit Brainfuck then. 20:40:46 pikhq, yes that is what I use for speed testing 20:40:56 Ah, good. 20:41:37 Deewiant, about mycology 3DSP test: "Loaded and unloaded FPSP, assuming it and its F and P commands will work from now on..." 20:41:39 what? 20:41:43 after you unloaded it? 20:41:50 >_< 20:41:58 Deewiant, typo? 20:42:02 No 20:42:06 then what does it mean 20:42:08 -!- ais523 has joined. 20:42:11 It means that it assumes FPSP works 20:42:12 I can't make sense out of it 20:42:13 hi ais523 20:42:23 hi 20:42:27 It has successfully loaded and unloaded FPSP but didn't test any further 20:42:28 Deewiant, what happens if FPSP is not implemented then? 20:42:35 presumably it reflects on loading 20:42:36 Then it shouldn't have loaded it 20:42:45 Deewiant, and then will it skip the 3DSP test? 20:42:49 Yes 20:42:55 mhm 20:55:09 -!- adam_d has joined. 20:56:51 -!- charlls has joined. 20:57:53 -!- charlesq__ has joined. 20:57:53 Deewiant, I might have to switch to a kernel-like make menuconfig soon ;) 21:01:56 -!- charlls has quit (Ping timeout: 258 seconds). 21:14:38 Deewiant, btw will use my memory pool infrastructure for the large model IP list 21:14:49 -!- adu has quit (Quit: adu). 21:24:01 -!- adam_d has quit (Ping timeout: 248 seconds). 21:45:21 Deewiant, real 0m0.699s 21:45:31 for that fork test (not largest one) 21:45:42 Parameter? 21:45:51 Compare to stinkhorn, it's the fastest on those 21:45:58 let me grep shell history 21:46:10 Deewiant, also note this runs on a 2.26 GHz Core 2 Duo 21:46:10 Just wc -l the file :-P 21:46:23 Deewiant, 17 21:46:39 so 2^16 I guess 21:46:44 since the last line has no forks 21:46:47 Yeah, presumably 21:47:07 or what about trailing newline? 21:47:08 meh 21:47:22 wc -l doesn't count that 21:47:23 Deewiant, anyway, I don't have stinkhorn around 21:47:28 so can't compare 21:47:43 So obtain it? :-P 21:47:48 Deewiant, I allocate 4096 IPs in each chunk. 21:47:54 Deewiant, link? I'm lazy 21:47:54 >_< 21:48:05 code.google.com/p/stinkhorn IIRC 21:48:36 And since building it is such a complicated task: find src -name "*.cpp" -not -ipath "*tests/*" -not -ipath "*win32*" | xargs g++ -o stinkhorn -O3 -march=native -DNDEBUG -fpermissive 21:49:06 Deewiant, I know that's a lot of IPs... This happens because of that the memory pool code was originally tuned for hash funge space 21:49:13 Deewiant, wth 21:49:22 Deewiant, why not a makefile, or even a build.sh 21:49:36 That is my build.sh for it :-P 21:50:10 well, there should be one there 21:50:18 It has a VS solution and project file but you probably don't care about those 21:50:20 what does -fpermissive do? 21:50:27 Make it build 21:50:35 huh? 21:50:50 Deewiant, it errors 21:50:54 -fignore-errors-just-compile 21:50:57 let me pastebin 21:51:08 because it is a HUGE C++ error 21:51:10 Oh, one diff 21:51:14 also it hasn't finished yet 21:51:16 Deewiant, oh? 21:51:23 src/interpreter.cpp line 111, I think 21:51:27 Change const_iterator to iterator 21:51:50 Deewiant, chhm 21:51:52 hm* 21:51:58 no compile errors so far 21:52:18 but why does it swap trash... 21:52:37 Deewiant, oh wait, building all in one go. Bad idea. Per object file is better 21:53:04 if you do it that way for stinkhorn you should gcc -combine and such for cfunge as well ;P 21:53:31 cfunge has a build system, which I use: your problem if it's not optimal 21:54:24 hm 21:55:06 Deewiant, I will write some "profile feedback" build scripts :P 21:55:07 -!- coppro has joined. 21:55:45 -!- augur has quit (Read error: Connection reset by peer). 21:56:11 -!- augur has joined. 22:00:38 Deewiant, some testing indicates stinkhorn has a faster setup time than cfunge. While the difference is near none for large cases 22:00:53 the break-even seems to be around 2^17 threads or so 22:01:12 or perhaps 2^18 22:01:52 it doesn't seem statistically significant at 2^18 though. Sometimes one is slightly faster, sometimes the other 22:01:52 bbl 22:02:58 and then stinkhorn is faster again for a bit, strange 22:03:08 -!- Gregor has joined. 22:03:17 well I believe some code could possibly be tuned 22:03:38 oh I know 22:03:49 I set the pointer array realloc size to 1 again for testing something 22:04:23 Statically. Allocate. Everything. :P 22:04:38 pikhq, a bit hard :P 22:04:50 IP ips[1 << 20]; 22:05:48 har 22:06:01 well the chunk here was for the list of pointers in this case 22:06:24 anyway, growing it with 256 at a time seems to give pretty much the optimum 22:08:44 AnMaster: Yeah, but it'll mean no need to link against malloc! 22:10:35 pikhq, ... har? 22:14:00 Deewiant, oh, stinkhorn doesn't use exact bounds 22:14:05 that explains some of the speed I guess 22:15:46 Deewiant, also: how the fuck did stinkhorn manage http://users.tkk.fi/~mniemenm/befunge/mycology-output/concurrency/stinkhorn.txt 22:16:28 Easily, CCBI used to do that at some (hopefully never released) points 22:16:41 Deewiant, how? 22:16:50 Basically: handle markers for all IPs before executing any instructions 22:16:50 I mean, it ran lots of spaces before 22:16:56 oh I see 22:17:01 Then get screwed if one gets p'd on top of you 22:17:03 cfunge handles it the same way as instructions 22:17:04 :) 22:17:30 just with a "continue with this IP after" flag 22:18:05 hm maybe I should rewrite that, possibly checking that flag every time we call execute_instruction has some severe overhead 22:18:17 there is an obvious alternative of course 22:18:43 Most likely your CPU can branch-predict well enough that the difference for most code is negligible 22:19:04 Deewiant, well, it would need to do that after it returned to main loop 22:19:14 so I doubt it can actually know which one will happen this time very well 22:20:53 -!- adam_d has joined. 22:23:44 -!- tombom__ has joined. 22:24:38 -!- tombom__ has quit (Client Quit). 22:24:40 -!- tombom_ has quit (Ping timeout: 246 seconds). 22:24:49 * AnMaster considers the next cfunge version number. 22:25:10 Deewiant, what about 02010.04 or such? 22:25:19 Why? 22:25:24 long now 22:27:18 as in, april 2010? 22:27:37 -!- MigoMipo has quit (Ping timeout: 252 seconds). 22:27:56 Deewiant, you didn't add efunge to mycology results I see? 22:28:05 -!- MigoMipo has joined. 22:28:14 2010-04-06 17:05:53 ( Deewiant) "There have not yet been any release, first release (0.0.1) is expected in late October or early November (2008)." 22:28:20 Deewiant, I will remove that message 22:28:33 Make a release instead :-P 22:28:44 Deewiant, no time now. 22:30:38 Deewiant, see that page now :P 22:31:06 Still says the same thing, sorry :-P 22:31:10 http://www.ohloh.net/p/efunge 22:31:13 Deewiant, oh there 22:31:16 Deewiant, I was on launchpad 22:32:21 Deewiant, now it doesn't any more 22:34:28 Deewiant, btw I see overall stinkhorn was slower than cfunge? 22:34:39 by quite a bit 22:34:41 Mostly due to the stack, I think 22:34:57 Deewiant, oh? what does stinkhorn do with the stack? 22:35:07 I don't know, I don't delve into sources 22:35:16 Deewiant, then why do you think it is it? 22:35:42 Because it loses very badly in y-rep-n 22:35:52 Deewiant, and wth do you do with your stack: http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/pushpop.b98.html ? 22:36:35 Deewiant, that looks like cheating. I just don't find it plausible 22:36:52 AnMaster: You'll notice the timings behave almost exactly like the ones of horizontal.b98 22:37:01 I.e. it's the file that's the bottleneck, really. 22:37:07 eh? 22:37:15 the file loading?! 22:37:25 Not the loading necessarily 22:37:29 But just traversing it 22:37:34 It is 10 million cells, after all 22:37:38 " Not the loading necessarily"? 22:37:45 as in you load lazily? 22:37:56 No... 22:37:59 oh 22:38:00 misread it 22:39:12 Deewiant, so basically you manage so well because of your funge space? 22:39:24 Most likely, yes 22:39:32 But having a non-shitty stack helps as well (c.f. stinkhorn) 22:39:48 Deewiant, what does y-rep-n do? 22:40:00 ynynyn forever? 22:40:06 y-repeatedly-then-n 22:40:06 well 22:40:09 ah 22:40:15 Deewiant, and yn-rep is what I said? 22:40:18 Yes 22:40:28 Note stinkhorn's total time for all benchmarks is 12888.2 22:40:35 Its time for y-rep-n is 12236.0 22:40:39 heh 22:40:50 Deewiant, ideas: n pops each element? Or it shrinks the allocated stack? 22:40:50 cfunge's is 1.0 / 1.8 (32 / 64 bits) 22:40:57 So if we exclude that 22:41:16 -!- cheater2 has quit (Ping timeout: 276 seconds). 22:41:19 then stinkhorn isn't too bad 22:41:25 stinkhorn is about 5.6 times as fast as cfunge-32 22:41:35 mhm 22:41:46 Deewiant, it doesn't pass mycology and doesn't do exact bounds 22:41:54 without exact bounds cfunge is quite a bit faster 22:42:16 you shouldn't compare apples and pears 22:42:16 Right, it is a bit nonconforming. 22:42:31 cfunge won't be six times faster without exact bounds :-P 22:43:23 Deewiant, more like 150% faster. And sometimes much more (if you write spaces to your "edges") 22:44:24 Deewiant, stinkhorn seems to be missing from last y-rep-n graph? 22:44:40 even though it presumably ran for most of that 22:44:43 before it timed out 22:44:44 timeouts are missing, I don't know why 22:45:08 Noticed it pretty late and haven't looked into it yet 22:45:28 The data should be there, the plotter is just failing. 22:45:48 Deewiant, the ccbi2 0.07 vs. 0.10 for cfunge is probably due to startup overhead for cfunge 22:46:05 I noticed all the memory pools and such does have a constant overhead for very short running programs 22:46:08 Don't bother comparing times below one second. 22:46:15 Seriously, just don't. :-P 22:46:18 :P 22:46:27 Deewiant, I want to be first on the list again you see. 22:46:34 and I'm going to make sure I am 22:46:45 :-P 22:46:58 Deewiant, maybe not for every test 22:47:06 I'll make sure you never are; I'll delay updating the rankings just long enough for CCBI to be in the lead again ;-) 22:47:23 Deewiant, anyway, was the main overhead for cfunge that fork test? 22:47:31 Deewiant, that isn't fair you see 22:47:58 It may've been, I can't remember 22:47:59 -!- augur has quit (Ping timeout: 240 seconds). 22:48:28 That's what the cactus plots are for: you can see that there are only a few benchmarks where cfunge takes a noticeable hit 22:48:43 Deewiant, I wonder why I was so fast at diagdown... 22:48:46 And in the zoomed-in one you can tell that the difference isn't really that big 22:49:03 It's not you being fast, it's me being slow 22:49:46 Deewiant, why are you slow at it then? 22:50:12 A diagonal line is the worst case for an AABB 22:50:18 anyway the thing to do is to expand static area to fill most of that ;) 22:50:24 Deewiant, hm. Sparse matrix? 22:50:38 ? 22:50:45 since it is basically the shape of an identity matrix 22:50:53 aren't there fast ways for such iirc? 22:51:17 Deewiant, also: hollow-square 22:51:18 That's assuming sparse data, which won't usually be the case 22:51:20 I'm fast at that too 22:51:33 s/I'm fast/You're slow/, and yes, I know. 22:51:42 Deewiant, how comes that time? 22:51:48 Same thing. 22:51:56 it isn't diagonal though? 22:52:09 It's still a mostly empty box. 22:52:17 well yes 22:52:51 Deewiant, idea: require a statistical analysis file to be pre-generated 22:52:58 that selects algorithm 22:53:04 >_< 22:53:16 and since it must be pre-generated, it shouldn't be counted to the running time 22:53:23 since it would be a one-time thing for most programs 22:53:52 Deewiant, I was inspired by db engines analysers here 22:54:07 Fortunately Funge interpreters aren't DB engines 22:54:19 Deewiant, why do you do so well at filled square? is all of that square executed? 22:54:31 Yes, it is 22:54:34 aha 22:54:56 horizontal-p? how does that differ from horizontal? 22:55:02 Read.the.page. 22:55:33 the results one? 22:55:57 No, that describes the results, not the benchmarks themselves 22:56:24 hm diagdown-p, why are you faster at that one? 22:56:41 I don't think initial file loading is *that* much more efficient 22:56:53 Beats me 22:57:40 also amusing that rcfunge2 uses more ram for diagup-p at 5000 than at 10000 22:58:17 When the runtime is that small it's just a case of the measurer missing it 22:58:30 hm 22:58:36 Deewiant, try with massif instead 22:58:40 you can't miss it that way 22:58:47 of course you can't profile speed either 22:58:51 And take a 100x performance hit? No thanks 22:58:56 These things can take hours as-is 22:59:00 Deewiant, it is useful for the "runtime is too short" cases 22:59:04 you only need to use it for them 22:59:14 And I'd be measuring different things 22:59:23 well what about additional info then? 22:59:24 One uses /proc/smaps, the other massif 22:59:30 It doesn't matter 22:59:45 Like said, just forget about any differences when the time is less than a second :-P 22:59:57 Deewiant, be happy I didn't continue with bashfunge. You couldn't have profiled it easily, since it invoked awk and sed and what not quite often iirc 23:00:10 and subshells 23:00:16 I'd've just said "counts aren't accurate" :-P 23:00:19 hah 23:00:44 Deewiant, I'm tempted to make an interpreter using sqlite with a disk db for the funge space or such 23:00:50 just to mess up the memory stats 23:01:45 Deewiant, anyway I'm not 15x slower than you if we exclude the forks case 23:02:05 Correct 23:02:12 Deewiant, how much slower am I then? 23:02:21 I don't know 23:02:30 Subtract and divide, it's not difficult :-P 23:02:57 Deewiant, I hope your funge space code is well commented 23:03:04 so I can learn what the hell you do 23:03:10 I hope it isn't 23:03:14 :P 23:03:32 TBH I trust that it's complicated enough that you won't be able to rip it easily 23:03:50 If you do succeed, good on ya then I guess :-P 23:03:57 wc -l space/*.d 23:03:57 3245 total 23:03:59 that is 23:04:11 That's up from maybe a tenth of that previously 23:04:14 like more than 1/3 of cfunge size 23:04:30 iirc cfunge is ~9000 lines of code 23:04:38 or maybe 1000, something like that 23:04:42 err 23:04:43 10000 23:04:46 of course 23:05:48 huh 23:06:05 oh *~ files 23:06:08 that explains it 23:06:28 Language Files Code Comment Comment % Blank Total 23:06:29 ---------------- ----- --------- --------- --------- --------- --------- 23:06:29 Total 112 11941 4914 29.2% 2291 19146 23:06:33 $ wc -l cfunge/trunk/src/**/*.[ch] | tail -n1 23:06:33 14092 total 23:06:38 vs, 23:06:40 Language Files Code Comment Comment % Blank Total 23:06:40 ---------------- ----- --------- --------- --------- --------- --------- 23:06:40 dmd 61 10462 1833 14.9% 2573 14868 23:06:43 hm 23:06:49 Deewiant, you forgot lib 23:06:51 but yeah 23:06:57 lib should be semi-counted only 23:06:57 lib isn't your code is it/ 23:06:58 ? 23:07:09 Deewiant, it isn't mine originally, apart from the mempool stuff 23:07:17 and some of it is heavily modified 23:07:36 but yes, without lib: 23:07:38 Total 98 9052 3546 28.1% 1609 14207 23:07:49 $ wc -l ccbi/src/**/*.d | tail -n1 23:07:50 15249 total 23:08:03 see, more than mine 23:08:05 Oh, and the C wrappers 23:08:07 $ wc -l ccbi/src/**/*.[dc] | tail -n1 23:08:07 15425 total 23:08:19 Deewiant, ? 23:08:26 they aren't here? 23:08:26 NCRS and REXP 23:08:39 are they generated? 23:08:45 They should be in src/ 23:08:48 or is the ccbi zip file outdated? 23:08:51 oh there 23:08:54 didn't saw them 23:08:55 >_< 23:08:56 looked in ccbi/ 23:09:05 btw the mempool stuff: Total 3 240 151 38.6% 71 462 23:09:34 Deewiant, but to be fair some of that includes other files with different defines multiple times 23:09:44 not sure how to count that ;) 23:10:03 (yeah, C lacks templates, sometimes they would be useful) 23:10:05 $ wc -l space.d 23:10:05 125 space.d 23:10:08 CCBI 1.0.2) 23:10:09 20* 23:10:19 heh 23:10:25 So yeah, 25x bump there 23:10:37 Deewiant, when do you switch to hash fallback? 23:10:57 When there're too many boxes 23:11:15 ah, so it is basically like a number of static funge spaces that you create in various places? 23:11:15 -!- oerjan has joined. 23:11:25 based on some heuristic? 23:12:01 Sounds maybe about right 23:12:49 Deewiant, clever, and sounds like it contain plenty of more or less randomly selected constants that have to be fine tuned 23:13:00 -!- cheater2 has joined. 23:13:10 lots of fudge factors basically 23:14:23 Yep 23:14:28 I haven't tuned them at all 23:14:28 do you grow AABBs btw? 23:14:37 http://codu.org/aforteforpiano/12f.ogg 23:15:09 Gregor, bad soundfont? 23:15:20 Perfectly good soundfont. 23:15:24 weird 23:15:27 sounds like a bad mic 23:15:34 -!- adam_d has quit (Ping timeout: 265 seconds). 23:15:50 Gregor, also I didn't like that one very much. Not my type of music. 23:15:58 lol 23:16:11 That's me practicing Chopin for an hour, compressed into one minute :P 23:16:18 Gregor, hah 23:16:25 Gregor, so no soundfont then? 23:16:40 Steinway_IMIS2.2 23:16:42 ah 23:16:49 so midi recording right 23:16:55 Zzz -> 23:16:57 Digital piano + ridiculously fast MIDI playback = lawlz 23:17:08 fluidsynth + ridiculously fast MIDI playback = OK :P 23:17:12 Gregor, heh 23:17:14 Deewiant, cya 23:17:26 Gregor, how do you mean "lawlz"? 23:17:46 My digital piano gets all flustered when you send it MIDI data too fast. 23:18:01 flustered? 23:18:51 sounds anthropomorphic 23:18:59 I've got to restrict my English a bit X-D 23:19:02 `define flustered 23:19:09 -!- charlesq__ has quit (Quit: Saliendo). 23:19:17 * thrown into a state of agitated confusion; (`rattled' is an informal term) \ [13]wordnetweb.princeton.edu/perl/webwn \ * Confused, befuddled, in a state of panic by having become overwrought with confusion 23:19:49 -!- poiuy_qwert has joined. 23:20:02 hmm, perhaps 'virrigt', but that doesn't imply the same kind of agitation 23:21:24 bah, deprecate swedish and teach everyone english, this language is too insignificant to motivate keeping it alive 23:21:52 olsner: Swedish is your native language, innit? :P 23:22:01 it is 23:24:34 That is now a Facebook post with every Swedish friend of mine tagged :P 23:25:02 :D 23:26:29 ANYwho, specifically it drops a bunch of notes and actually occasionally plays the WRONG note when you send it MIDI data too fast. It also drops pedal-offs, so it'll sometimes get stuck in pedal mode. 23:26:35 This is only when you send it data crazy-fast, mind. 23:27:14 doesn't MIDI define ways to cope with devices with limited data rates? are you exceeding the specs? 23:27:26 -!- MigoMipo has quit (Remote host closed the connection). 23:27:34 Idonno, aplaymidi is doing whatever aplaymidi does :P 23:27:57 But like I said, this is only crazy-fast, e.g. http://codu.org/aforteforpiano/12f.ogg 23:31:06 could be on the aplaymidi side though, filling up an input buffer or whatnot 23:38:38 otoh, at 30kbit (which midi appears to be using) you should still be able to send several hundred notes per second