00:05:23 -!- adam_d_ has joined.
00:13:07 * pikhq has created a Linux distro less featureful than DOS. Hooray.
00:14:31 <pikhq> So I was curious how silly-small I could get something.
00:14:57 <Gregor> Funny, that's exactly what she said.
00:15:06 <Gregor> Also, just have a kernel with no userland, that'll be small :P
00:18:40 <alise> combinatorial explosion of linux distros/penises
00:19:47 -!- adam_d_ has changed nick to adam_d.
00:26:18 <calamari> pikhq: what did you come up with?
00:27:08 <pikhq> Currently at 344 kIb...
00:27:27 <pikhq> It possesses the following programs: /bin/sh, /bin/clear.
00:27:32 -!- Gracenotes has quit (Read error: Connection reset by peer).
00:27:47 <pikhq> And its kernel has the following features: initramfs, ELF support.
00:28:13 <pikhq> Otherwise, the BIOS text doesn't get cleared in Qemu.
00:28:46 <Gregor> I hope /bin/clear is a shell script ...
00:28:47 <calamari> actually, I would have to say sh makes it more feature rich than dos
00:29:20 <pikhq> calamari: Heavily, heavily pared down shell.
00:29:21 <Gregor> Ohwait, echo isn't built into sh, is it :P ... so /bin/clear couldn't be a shell script probably.
00:29:24 <Gregor> cat is pretty useful too ...
00:29:49 <pikhq> I may experiment with other kernels.
00:29:49 <calamari> wow, didn't realzie 2.6 could get that small
00:30:00 <pikhq> Though 2.6 has the nice feature that you can *compile in the initramfs*.
00:30:10 <Gregor> There's a bunch of "tiny" patches to 2.6 that help downsize it.
00:30:25 <pikhq> Those tiny patches were put into the main tree a while back.
00:30:50 <pikhq> I'm going to compare compression formats for the initramfs...
00:30:51 <Gregor> So it just takes some special .config frunging.
00:31:26 <pikhq> I may be at the point where the compression overhead of LZMA negates the benefits for the filesystem. :P
00:31:33 <calamari> all you need now is to add egobfi
00:31:49 <Gregor> How much does TCC cost?
00:32:00 <Gregor> Oh, but eh, headers >_>
00:32:13 <Gregor> What's the world's smallest scripting language that borders on usable? :P
00:32:13 <pikhq> 339 KB without compressing the root filesystem.
00:32:22 <calamari> but anyhow, impressive.. could boot that off a 5 1/4" floppy :)
00:32:47 <Gregor> Maybe I missed something, but does that 339K /include/ the kernel?
00:33:09 <Gregor> I thought that was the FS, which actually sounded pretty big for sh and clear :P
00:33:52 <Gregor> How much of busybox can you stuff in before you can't boot from a floppy?
00:34:08 <Gregor> WELL THEN GET STUFFING
00:34:30 <Gregor> calamari: That's ancient, and has ancient utils, things tend to grow over time :P
00:34:41 <Ilari> BTW: What is maximum one can put into floppy (using normal 1.44M floppy drive)?
00:34:43 <pikhq> Actually. I'm going to go check and see if dietlibc and manual-built dash gets me a smaller shell. :P
00:34:43 <Gregor> Also, isn't it a superformatted floppy?
00:34:50 <Sgeo> http://wormtube.worms2d.info/?id=4 [some NSFW language]
00:34:55 <calamari> Ilari: I think you can get like 2 mb
00:35:02 <ais523> there's a man page somewhere which goes into ridiculous difficulty
00:35:13 <Gregor> <Ilari> 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 <Ilari> My first computer had 2.88M floppy drive... :-)
00:35:22 <ais523> talking about things like interleaving sectors, and forcing the drive head past the normal limits
00:35:31 <ais523> (which might break your drive, or might give you an extra couple of tracks)
00:35:41 <calamari> Gregor: 2.88? wow.. so there must be no error correction at all?
00:36:03 <pikhq> calamari: Actually, floppy drives are just horribly overengineered.
00:36:25 -!- ais523 has quit (Remote host closed the connection).
00:36:37 <pikhq> Aaaw, with dietlibc I can only get the shell down to 96k. :(
00:36:41 <calamari> the drives, maybe.. but the media, no
00:36:46 <Ilari> Apparently the I/O interface supports up to 255 sectors and 256 tracks (but only up to two sides).
00:36:49 <Gregor> calamari: By the time floppies died, most floppy drives supported 2.88MB, there just were no 2.88MB disks ...
00:37:04 <calamari> Gregor: yeah but he said standard 1.44 hehe
00:37:07 <pikhq> (currently, my busybox is down to 72k.)
00:37:20 <Gregor> calamari: I assume "1.44M" means "3 1/4 in" :P
00:37:37 <Ilari> Good quality 1.44MB disks formatted as 2.88MB without bad sectors (and appeared to work).
00:37:49 <pikhq> Hmm. I'm going to (quickly) overengineer "clear".
00:37:54 <Ilari> Actually, 90mm. :-)
00:38:47 <Deewiant> Ahem-hem! Everybody quiet, it's ANNOUNCEMENT TIME. http://iki.fi/deewiant/
00:38:48 <Deewiant> 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 <Deewiant> Also: Fungicide, the Befunge-98 benchmark suite!
00:38:53 <Deewiant> (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 <Deewiant> Finally: I am tired, and am going to bed. Complaints can be directed to /dev/null. ->
00:40:59 <uorygl> 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:42:00 <calamari> that's because there are 95 ascii characters
00:42:02 <uorygl> The shift key determines which of the two characters a key types.
00:42:09 * Gregor looks confusedly at his tab key
00:42:19 <uorygl> Well, I guess technically, the backspace, enter, tab, etc. keys type ASCII.
00:42:26 <pikhq> Okay, then. clear overengineered.
00:42:37 <Gregor> pikhq: If you installed echo, you could replace clear with an echo-based version for much fewer bytes.
00:42:50 <uorygl> But I meant the 95 printable ASCII characters, of course.
00:42:51 <pikhq> Gregor: But echo involves a larger shell.
00:42:57 <calamari> smallest executable you can make is 45 bytes
00:43:07 <pikhq> calamari: Well aware.
00:43:28 * uorygl tries to make a smaller executable.
00:43:41 <pikhq> Gregor: echo is only a shell builtin in busybox. And you can remove it.
00:43:52 <calamari> hmm of course that's assuming elf
00:44:03 <uorygl> touch blih; chmod +x blih; ./blih;. Which doesn't count, of course.
00:44:06 <Gregor> pikhq: OK, but you'll gain a lot with echo ... such as the ability to do anything useful at all :P
00:44:21 <pikhq> Gregor: Your point?
00:44:34 <Gregor> calamari: Ask Windows.
00:44:44 <Sgeo> Is there anything that was just machine code?
00:44:55 <uorygl> Hmm, it would be plausible to make a platform where all executables are shell scripts.
00:45:04 <uorygl> Of course, that would require the kernel to have a built-in shell.
00:45:06 <Gregor> Sgeo: Well, more accurately, it's just "throw this crap in memory"
00:45:09 <pikhq> Oh, hey. Busybox has a smaller shell.
00:45:31 <pikhq> Interactive execution is optional.
00:45:34 <Sgeo> What would happen if you renamed a .exe to .com ?
00:45:35 <uorygl> Throw-this-crap-in-memory works best when you can do relative jumps, I imagine.
00:45:42 <Gregor> 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 <Gregor> Sgeo: I don't know what DOS .exe files are, but they're not raw.
00:46:04 <Gregor> It's probably not dissimilar to a.out
00:46:20 <calamari> exe's have memory segment information
00:46:21 <pikhq> "Support if/then/elif/else/fi"
00:46:29 <pikhq> Now *there's* a useless feature if ever I saw one.
00:46:30 <Sgeo> 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 <Sgeo> He showed removing the registry entry that tells Explorer how to open .exe files
00:47:01 <Sgeo> Someone actually followed the instructions on one of the computers.
00:47:33 <Sgeo> I fix it by using Start->Run to open command.com, and from there opening regedit.exe
00:47:41 <Ilari> 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 <Sgeo> And then copying the relevant entries from a good computer
00:48:11 <Sgeo> 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 <Gregor> My memory of useless binary formats is slightly bitrotted.
00:48:23 <calamari> I guess you could hack a headerless executable format into the kernel
00:48:25 <Sgeo> The guy who gave the instructions wanted to rename regedit.exe to regedit.com
00:48:28 * uorygl runs command.com and finds that it works.
00:48:45 <Ilari> Is there similar registry entry for .com?
00:48:59 <Sgeo> Ilari, I think so, but it was untouched by these instructions
00:49:14 <pikhq> 62240 busybox <-- without echo 62240 busybox <-- with echo.
00:49:25 <Gregor> http://codu.org/projects/gelfload/
00:49:34 <pikhq> Okay then. echo uses no space, so I'm satisifed.
00:49:49 <Sgeo> Echo.. uses no space..?
00:49:49 <Ilari> Some malware uses that EXE registry entry (but I haven't heard of using COM entry yet).
00:50:05 <calamari> take a look at the files it compiled.. might have some other freebies in there like true and false
00:50:48 -!- zzo38 has joined.
00:50:54 <zzo38> I invented a game http://zzo38computer.cjb.net/GAMES/meskilb.png http://zzo38computer.cjb.net/GAMES/meskilb.zip
00:51:04 <uorygl> Huh. What's the extension of the filename foo.bar.baz?
00:51:14 <zzo38> Instructions: T to display level description text. Arrows or vi keys to move.
00:51:21 <zzo38> uorygl: In Windows, just "baz"
00:51:44 <zzo38> Instructions: R to reset, numpad -/+ to prev/next
00:51:54 <zzo38> Top row is inventory row.
00:52:05 <uorygl> That slightly implies that if a file is just named "foo", its extension is "foo".
00:52:09 <pikhq> Sgeo: I'm going to guess it has something to do with padding.
00:52:19 <fax> zzo that looks cool!!
00:52:30 <zzo38> pikhq: I can see that, but at least Windows treats as no extension in that case
00:52:38 <fax> I guess I can't play it
00:52:41 <uorygl> Wow, that game is huge.
00:52:43 <fax> I like the graphics though
00:52:45 <zzo38> UNIX doesn't care about extensions, o it is OK
00:53:01 <fax> zzo did you make them
00:53:07 <zzo38> That game is not finish yet I will add in more objects and levels more later
00:53:12 <fax> I should install windows so I can play this
00:53:16 <zzo38> fax: I didn't make the graphics I found icons in various things
00:53:17 <pikhq> zzo38: Context makes you confusing.
00:53:21 <Gregor> fax: That's what wine is for
00:53:28 <pikhq> I'm discussing how echo takes no extra space in Busybox.
00:53:39 <calamari> 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 <zzo38> 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 <calamari> pikhq: it probably got compiled anyways
00:54:09 <zzo38> The .GMD is the source-file, you don't need it to run
00:54:20 <calamari> pikhq: what files is busybox compiling?
00:54:52 <zzo38> Or possibly I might later re-write a similar engine in C so that it can be cross-platform
00:54:57 <uorygl> Can you make a version with a volume control? This computer doesn't have one.
00:54:59 <pikhq> calamari: Not many.
00:55:01 <zzo38> And make the same game using that
00:55:10 <pikhq> Don't have an exact figure, though.
00:55:15 <calamari> pikhq: do any of them look like linux commands?
00:55:33 <pikhq> I could probably get things down by passing the whole thing to the compiler at once.
00:55:36 <calamari> I should say GNU commands shouldn't I
00:55:37 -!- BeholdMyGlory has quit (Read error: Connection reset by peer).
00:55:39 <alise> <Deewiant> (CCBI 2.0 completes it in about one-fifteenth of the time that cfunge does. SO YEAH. AnMaster: macro-optimization > micro-optimization.)
00:57:54 <Gregor> That's so much snap I've got ropeburn.
00:59:37 <uorygl> 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 <uorygl> Is the idea that you're only allowed to make one attempt every fifteen seconds?
01:01:01 -!- oklopol has joined.
01:01:26 <Gregor> How does "because the door is locked" strike you? :P
01:01:44 <uorygl> That doesn't answer my question; it just leaves me wondering why the door is locked.
01:03:00 -!- Gracenotes has joined.
01:03:01 <zzo38> Yes, it is becausey ou need the key
01:03:06 <zzo38> It is obvious, isn't it?
01:03:19 <zzo38> There is no idea of attempt
01:03:19 <uorygl> It's not obvious why that locked door is there.
01:03:37 <uorygl> Every time I hear "ow!", that's one attempt.
01:03:38 <zzo38> 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 <uorygl> 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 <zzo38> Just once. The other three times are completely different kind of puzzles having to do with key
01:05:03 <zzo38> If you don't like it, skip that level (push numpad + sign)
01:05:15 <uorygl> I still have to go get the key multiple times on level 2 if I want to pass that level.
01:05:35 <zzo38> I should also say something else: You can push F5/F6 to quicksave/quickload
01:05:52 <uorygl> Ah, that changes things.
01:06:04 <zzo38> 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:07:27 <zzo38> oklopol: You can check the log if you don't know what game?
01:10:18 <oklopol> Sgeo: you can check the log if you don't know?
01:10:27 <zzo38> 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:53 <zzo38> Sorry I just posted now because enough people ask
01:11:05 <zzo38> Somebody else could also have posted the same message
01:12:30 <calamari> so what are the absolutely essential features of a linux shell? starting programs and globbing?
01:12:54 <zzo38> calamari: Perhaps also environment variables
01:12:58 <uorygl> Bah, who needs globbing.
01:13:31 <uorygl> Hum, are environment variables really a shell thing?
01:13:40 <zzo38> ls actually does some additional things too like ls -l and ls -la and so on
01:14:03 <zzo38> Yes, environment variables are a shell thing because no program can set environment variables of their parent process
01:14:41 <zzo38> 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 <Gregor> But the env program can set environment variables for its child even if you can't set them in the shell.
01:15:24 <calamari> I was going to say create a glob program and use backticks.. but backticks aren't free either
01:15:33 <zzo38> OK, then, if that is how you want, so.
01:16:01 <calamari> oh, there is a glob call.. include glob.h hehe
01:16:49 <calamari> pikhq: how big is your busybox
01:17:16 <Gregor> Don't you think that's an awfully personal question?
01:22:50 <calamari> not bad at all! were you able to include any more executables after looking at the compiles?
01:23:24 <pikhq> I'm trying to find a smaller shell.
01:23:43 -!- jcp has joined.
01:23:47 <oklopol> do i need diagonal movement in level 2?
01:24:03 <calamari> pikhq: if you compile without the shell, how big is it?
01:24:35 <pikhq> calamari: Uh... 0k, I'd imagine?
01:24:38 <pikhq> That's... All I have.
01:25:03 <zzo38> oklopol: There is no diagonal movement.
01:25:29 <zzo38> 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 <pikhq> I'm still trying to find a smaller shell. ;)
01:27:01 <Gregor> Just roll your own shell.
01:27:09 <Gregor> while (true) + strtok + fork + execl = bad shell
01:28:09 <Gregor> I forgot about fgets ...
01:28:21 <Gregor> while (true) + fgets + strtok + fork + execl
01:28:34 <Gregor> Or hell, so long as it's an intentionally terrible shell, use gets :P
01:28:56 <Gregor> globbing is for pussies, real men remember all the files they have and type out the names.
01:29:27 <calamari> the question is whether you can make it smaller by excluding libc and using int 0x80 calls
01:29:30 <zzo38> Yes, if you are trying to write a shell using as small codes as possible that's OK I suppose
01:29:54 <zzo38> calamari: You can try writing in asm or machine-codes and see if you can do that
01:29:56 <pikhq> calamari: Probably.
01:30:04 <pikhq> Though, my libc is pretty darned small.
01:30:05 <Gregor> Hmmm, FORTH is an idea. FORTH doesn't have to be big ...
01:30:11 <oklopol> zzo38: okay i'm giving up at level 2
01:30:33 <calamari> pikhq: well the thing is that executables are slightly bigger when they have to use libc
01:30:38 <zzo38> oklopol: Try the other level then (push -/+ numpad)
01:30:40 <fax> what is the fourth programming language you learned?
01:31:05 <Gregor> fax: ... lesse ... do different dialects of BASIC count as different languages?
01:31:14 <fax> only if they are called FORTH
01:31:34 <pikhq> 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 <calamari> hmmm 1) gwbasic, 2) quickbasic extended 3) x86 asm 4) c?
01:32:07 <calamari> oh damn you're right.. logo is in there
01:32:13 <Gregor> Could've been logo for me too, that was the first thing that came to mind.
01:32:19 <calamari> hmmm 1) gwbasic, 2) quickbasic extended 3) logo 4) x86 asm
01:32:24 <Gregor> But I don't know if it was logo or AVR ASM
01:32:31 <zzo38> 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:50 <oklopol> zzo38: you probably aren't one to give hintss?
01:32:53 <fax> I know logo
01:33:06 -!- atrapado has quit (Read error: Operation timed out).
01:33:08 <zzo38> oklopol: What hint did you want?
01:33:15 * Sgeo has heard of logo, but that's pretty much it
01:33:20 <calamari> 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 <Sgeo> I should probably actually play the game
01:33:29 <fax> calamari hahaha
01:33:44 <Gregor> I should probably rewrite the game in JavaScript.
01:33:46 <Gregor> Because that's what I do.
01:33:50 <Gregor> Rewrite things in JavaScript.
01:33:57 <fax> Gregor that would mean I could play it !!!
01:34:00 <zzo38> oklopol: Which part are you stuck on?
01:34:13 <Gregor> fax: Play http://sibeli.us/ instead.
01:34:20 <fax> I have I didn't like it :(
01:34:30 <fax> you're like pushing buttons in time I can't do that
01:34:33 <fax> it made me ill
01:34:33 <Sgeo> 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 <zzo38> Sgeo: I have in fact done that.
01:35:01 <oklopol> 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 <Sgeo> zzo38, with this game, or a different game?
01:35:32 <zzo38> oklopol: You need the arrow in the other room to block the stones falling
01:35:36 <pikhq> Well, I found a more... complete shell that's about 72k.
01:35:47 <zzo38> Sgeo: No, not this game. A different game (actually multiple different games)
01:35:51 <oklopol> zzo38: yeah i was just thinking i might actually try using them for something
01:35:58 <pikhq> Sorry. 60k if I use dietlibc.
01:36:24 -!- adam_d has quit (Ping timeout: 265 seconds).
01:36:33 <zzo38> oklopol: You can also push the stones left/right
01:36:42 <pikhq> Look mah, I've got tar!
01:36:58 <oklopol> and yeah okay it's really obvious now, i just, for some reason, completely dismissed the ball and the arrow
01:37:09 <Gregor> pikhq: What a sticky situation HYUK HYUK
01:37:19 <fax> Grogor did you make sibelius
01:37:23 <zzo38> 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 <Gregor> pikhq: I assume you have tar without gz or whatnot.
01:37:29 <pikhq> Gregor: Hmm. More features in less space, or fewer features. Tricky.
01:37:35 * Sgeo is still trying to figure out what the card suites are for
01:37:37 <pikhq> I disabled the builtin gzip.
01:37:37 <Gregor> fax: What a hilarious statement when you don't make it clear that you're referring to sibeli.us :P
01:37:38 <alise> 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 <Gregor> fax: But yes, I wrote that code.
01:37:48 <fax> oh sorry :(((
01:37:49 <alise> since you can't redistribute non-gpl software linked with dietlibc
01:37:52 <fax> I didn't realize this
01:37:59 <pikhq> alise: Yes, that's my only issue with dietlibc.
01:38:15 <zzo38> Sgeo: Did you push "T" at the first level it will explain you need to get four suits, please.
01:38:20 <pikhq> Though that's not *entirely* true. You can redistribute anything "gpl-compatible" linked with dietlibc.
01:38:25 <pikhq> This includes 3-clause BSD.
01:38:30 <pikhq> (note: whole thing is GPL now)
01:38:32 <fax> I just never managed to play these kinds of game, the music/timing type
01:38:41 <Sgeo> Oh. Thought I had to get to the peace thing
01:38:43 <pikhq> Sadly, that limits dietlibc's usage a lot.
01:38:50 <Gregor> fax: This exists mainly as a hilariously bad idea for such a game :P
01:39:04 <pikhq> 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 <zzo38> Sgeo: Yes you do but you need 4 suits
01:39:11 <pikhq> Now *there's* a build command. :)
01:39:21 <zzo38> It shows the inventory row on the top
01:39:30 <pikhq> I need no mount! I need no chattr! I need no gzip!
01:40:11 <oklopol> zzo38: is there a way to restart the game
01:40:33 <oklopol> 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 <zzo38> oklopol: Push R key
01:40:47 <zzo38> Push -/+ to skip levels
01:40:56 <zzo38> Or use P/N if you don't have numpad -/+
01:41:06 <Sgeo> Can I move on diagonals?
01:41:15 <zzo38> Sgeo: No. Orthogonal only.
01:41:29 <Sgeo> And I don't QUITE understand the logic of the stone
01:41:36 <oklopol> wwwhat was the point of level 3 :D
01:41:39 <zzo38> You can also save/load at any time by pushing F5/F6.
01:41:50 <oklopol> how many levels are there?
01:42:08 <zzo38> oklopol: No much yet, but it will have a lot more levels and more objects later.
01:42:18 <oklopol> can i have a number, i have to decide whether to play them all
01:42:30 <oklopol> or to do something i consider more useful
01:42:37 * Sgeo does NOT understand how the stone decides to move
01:42:50 <oklopol> go near it and move once or soemthing like that?
01:43:17 <Sgeo> Going near it does not always cause it to move
01:43:27 <zzo38> 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 <zzo38> 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 <Sgeo> So I walk into that space and then move, that's when it falls
01:44:27 <Sgeo> So above it is a blind spot
01:44:49 <oklopol> that's a bit too much, i'll mention if i do it some other time
01:45:21 <oklopol> also Sgeo part of the puzzle if to figure out the rules
01:45:29 <zzo38> Arrows and balloons move in a similar way to stones but a different direction
01:45:39 * pikhq wonders how well upx works on Linux kernels
01:45:52 <pikhq> Apparently "no longer".
01:46:17 <oklopol> that's why they're interactive, so the rules need not be stated
01:47:10 <zzo38> 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:51:58 <alise> (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 <alise> ha fax was wrong it is feasible
01:54:53 <fax> what exactly did I say that is "wrong"?
01:56:51 <fax> 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 <zzo38> Have you ever made music using Bohlen-Pierce?
01:58:08 * Sgeo should learn what Pi Calculus is
01:59:17 <alise> fax: well you didn't seem to know that automath did that at the time
01:59:17 <fax> alise stop being an ass
01:59:26 <alise> also i feel cheated on by coq after how nice mizar proofs are :(
01:59:47 <fax> just shut up about stuff you have no clue about
02:00:48 -!- zzo38 has quit (Remote host closed the connection).
02:04:39 <alise> fax: i don't remember you having contact with the authority of having clueness...
02:09:58 <alise> Anyway, g'bye everyone: see you Friday.
02:11:47 -!- alise has quit (Quit: Leaving).
02:24:36 <Sgeo> http://arstechnica.com/microsoft/news/2010/04/why-microsoft-did-the-right-thing-in-ditching-xp-for-ie9.ars
02:24:47 <Sgeo> That Low Integrity thing sounds.. excellent
02:28:40 -!- coppro has joined.
02:29:55 <Gregor> pooppy, meet carlinet. carlinet, meet pooppy.
02:30:43 <Gregor> Both people whose names I cruelly massacre for no good reason.
02:31:37 <pikhq> Okay, 339k and it's not going down much further...
02:35:25 * Sgeo looks at the HTML5 Quake2
02:36:40 <Sgeo> Um, is there a link to actually try it somewhere?
02:51:19 * oerjan went for a walk. Great northern lights tonight.
02:52:28 <oklopol> can you upload the mental pictures
02:53:15 <oklopol> actually i would interpret that as "describe them", but i'm not sure that's a very fair thing to ask.
02:53:25 <oerjan> no, but if you're in finland maybe you can see them too?
02:53:48 <oklopol> i've never seen northern lights in turku
02:54:17 <oerjan> they were very fast-moving tonight, and in a broad band straight overhead
02:54:37 <oerjan> not very colorful though, i've seen that a few times
02:54:52 <oerjan> 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 <Gregor> It's not what it looks like, Mr. roper!
03:12:03 <calamari> pikhq: http://asm.sourceforge.net/asmutils.html
03:12:37 <EgoBot> 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 <Gregor> !aol Hello my friends!
03:13:08 <EgoBot> HELO MY FR1END5!!!!!!!!!!1
03:13:31 <pikhq> calamari: Doesn't build on modern nasm.
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 <Gregor> calamari is actually building shsh :P
03:14:59 <calamari> yeah, took a break when my mom called hehe
03:15:13 <calamari> at an amazing 26 lines of code
03:15:42 <Sgeo> !sandbf Testing
03:15:47 <Sgeo> !sadbf Testing
03:16:21 <Sgeo> Why did EgoBot want to DCC Chat with me?
03:16:30 <calamari> that line gives me a "you retard" error
03:16:43 <Sgeo> Oh, to send me "Hey, here are the results"
03:16:53 <EgoBot> sadol :M$0 :d:i,45000@>i-01(2]M0:i-i1:S$0:C;3:l#C-01:p:m0@<pl(2?=#Cp"1+:#Mm%+#Mm1,3255?=#Cp"1-:#Mm?<-#Mm10,3254-#Mm1?=#Cp"1>: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 <calamari> holy crap what is in this thing, it's 10k already
03:21:20 <Sgeo> Please don't >.>
03:25:38 <Gregor> Can you be more specific about the error?
03:26:08 <calamari> warning: assignment makes pointer from integer without a cast
03:27:15 <Gregor> You #include'd string.h?
03:28:28 <Sgeo> Why not switch to Haskell!
03:28:35 * Sgeo has become a fanatic almost overnight
03:29:06 <Gregor> calamari: Because system() requires a shell and exec() needs a fork.
03:29:12 <Gregor> Unless you want a one-time-use shell :P
03:29:59 <oerjan> Sgeo: i don't think haskell is very good for making supertiny executables
03:30:41 <oerjan> although i recall something about a jhc compiler being better at it
03:31:17 <oerjan> whole program optimization iirc
03:31:39 <oerjan> 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 <oerjan> couldn't compile itself
03:32:47 <Sgeo> The interpreter seems to be working, kind of.. it's not crashing when I give it a bounded tape and "<", which is strange
03:33:48 <Sgeo> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24710
03:33:59 <Sgeo> Oh, you want the whole interpreter to help me debug?
03:34:25 <oerjan> well let me look at that first
03:34:44 <Sgeo> It's working, it's just ugly
03:34:59 <oerjan> lots of superfluous parentheses, i see :D
03:35:52 <Sgeo> I'm not really all that certain which are superfluous
03:36:37 <Sgeo> And there's no where that ... wait. I could have written a function with type BFCmd -> String -> ([BFCmd], String)
03:36:45 <Sgeo> And have passed stuff into that function for most of those
03:38:05 <oerjan> yeah all those fst and snd really beg for a common where clause and pattern matching
03:39:30 <Sgeo> Is it possible to have a common where clause to all those definitions?
03:40:05 <oerjan> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24711
03:40:49 <oerjan> basically function application has higher precedence than _all_ operators
03:41:26 -!- jcp has joined.
03:41:31 <oerjan> (technically one pattern matching exception, @)
03:41:34 -!- coppro has quit (Ping timeout: 258 seconds).
03:42:08 <oerjan> and not at the top level, no, but just a moment...
03:43:33 <oerjan> i need vim for this...
03:49:42 <oerjan> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24712
03:49:49 <oerjan> using a case expression
03:50:48 <oerjan> code is not defined there
03:53:14 <oerjan> fixed http://hpaste.org/fastcgi/hpaste.fcgi/view?id=24710#a24713
03:56:23 <augur> anyone know of an english parser grammar?
04:00:15 <oerjan> 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 <calamari> Gregor: it actually looks like wordexp will do nearly everything in one call
04:00:48 <calamari> just need to figure out some quirks
04:05:42 <calamari> I wonder if ithis would be smaller if I wasn't compiling on x64
04:07:16 <calamari> okay.. shit shell is 5684 bytes
04:09:29 <pikhq> calamari: Pastebin?
04:12:01 <calamari> pikhq: http://pastebin.com/xJUQuFWX
04:12:12 * Sgeo feels guilty for not having written the code himself
04:12:17 <Sgeo> Erm, the cleaned code
04:12:22 <Sgeo> 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 <calamari> lol I didn't need the variable pid did I
04:14:33 <calamari> doesn't save any byyes.. oh well
04:16:54 <pikhq> calamari: I'll see what I can do to it.
04:17:00 -!- myndzi has joined.
04:19:38 <pikhq> ... When you stop including malloc...
04:19:38 -!- myndzi\ has quit (Ping timeout: 246 seconds).
04:19:57 <calamari> it's actually bigger with uclibc?
04:20:11 -!- fax has quit (Quit: Lost terminal).
04:21:03 <pikhq> Wait. Are you dynamic linking?
04:21:19 <pikhq> Yours is several megabytes.
04:21:34 <pikhq> (as it needs all of glibc.)
04:21:48 <calamari> I assumed you had uclibc already
04:22:07 <pikhq> I do not have a dynamic uclibc.
04:22:37 <pikhq> Among other things, this means the fewer functions you use the smaller your program is.
04:22:54 <pikhq> Also, perror? Bah.
04:23:11 <calamari> if you are static linking, then int 0x80 asm would be smaller
04:23:34 <calamari> what's wrong with perror.. doesn't even increase the size
04:24:00 <pikhq> Including functions from libc means those functions are included in the binary.
04:24:46 <pikhq> Same damned program without perror.
04:25:52 <pikhq> wc -l instead of -c somehow. WTF, me?
04:26:09 <pikhq> That's more not fucking nuts.
04:26:25 <pikhq> But, yeah... perror includes stdio.
04:26:36 <pikhq> Though, so does fgets. :P
04:26:42 <calamari> yeah that program sucks for static
04:26:52 <pikhq> It's probably wordexp.
04:27:30 <pikhq> What you really want to do is tokenise. And that's it.
04:27:50 <calamari> yeah well it would have to be in asm next time
04:30:09 <calamari> out of curiousity, how big is it when dynamically linked against uclibc
04:30:29 <pikhq> Dunno. I don't have a dynamic uclibc.
04:30:49 <pikhq> Though probably about a megabyte if you *include* uclibc. ;)
04:31:41 <pikhq> Well, I'm going to go ahead and fix it to do utterly naive tokenizing.
04:32:04 <calamari> 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:40:00 <pikhq> Could probably be made smaller.
04:46:41 <pikhq> That's using read.
04:46:43 <calamari> 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:52:36 <pikhq> http://sprunge.us/ShKE
04:54:45 <pikhq> Fun fact: uninitialised static variables use 0 space in the output binary. :)
04:55:47 <pikhq> I could probably make this smaller by plopping down into assembly, but not by much.
04:56:17 <pikhq> ... What's with the capslock?
04:56:26 <calamari> does it help to remove the function call
04:56:38 <calamari> was in ASM programming mode.. that's a caps lock operation :)
04:56:38 <pikhq> Which function call?
04:57:49 <calamari> dunno if that is a rumor or truth when they say x++is bigger than ++x
04:58:21 <calamari> for(cmd_offset = 0; cmd[cmd_offset] != 0; cmd_offset++) {
04:58:26 <pikhq> In any sane compiler, there's not any difference unless you're using the result value.
04:58:48 <pikhq> And if you're using the result value, you're getting bigger code regardless.
04:59:08 <calamari> so how many bytes did that save on your disk?
04:59:33 <pikhq> Let me go make a new image. Without anything. Bwahahah.
05:01:51 <pikhq> Okay, 301 kiB for a Linux bzImage which does nothing but start shish.
05:03:15 <pikhq> That is the shittiest shell ever.
05:03:43 <pikhq> And this... Is the shittiest Linux distro ever.
05:04:01 <pikhq> You actually can't do anything on it. :)
05:04:22 <pikhq> Not even error messages, because dietlibc doesn't have any, and nor does this kernel build.
05:05:05 -!- Oranjer has left (?).
05:05:15 <pikhq> As is everything else.
05:05:29 <pikhq> I was previously using sash, which had a few builtins, and was 60k.
05:05:59 <calamari> 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 <calamari> does ctrl-D still work to terminate the shell?
05:08:07 <pikhq> Sgeo: Yes. It's freaking tiny.
05:09:03 <pikhq> calamari: When read reads nothing, it returns 0. So, it exits. :)
05:14:27 <calamari> shsh turned into a fork bomb lol
05:15:11 <pikhq> Yeah, might want to fix that...
05:15:15 <calamari> come on linux you can kill this thing
05:15:43 <Sgeo> You're not running this in a VM?
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 <calamari> 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 <pikhq> 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 <pikhq> I love how we're at the point that malloc is absurd bloat.
05:33:01 -!- oerjan has quit (Quit: leaving).
05:33:54 <calamari> for (--tokened_offset; tokened_offset < MAXSIZE; ++tokened_offset)
05:33:54 <calamari> tokened[tokened_offset] = NULL;
05:34:50 <calamari> seems to break the ctrl-d after a cmd tho
05:37:19 <pikhq> Hrm. Still seeing that bug, though.
05:37:38 <calamari> yeah maybe that wasn't the fix
05:42:12 <pikhq> for(;read_result < MAXSIZE; read_result++)
05:42:12 <pikhq> cmd[read_result] = 0;
05:42:35 <pikhq> Might be more than is needed, but it works.
05:43:27 <pikhq> cmd[read_result + 1] = 0;
05:43:47 <calamari> so it was an off by one error?
05:46:07 <Sgeo> Even though it's 12:44, and I need to be up early, I need to go wash clothes now
05:46:52 <Sgeo> Dear Gmail: Emails from the email list I'm on are not spa
05:48:19 <pikhq> http://sprunge.us/NWgK
05:48:47 <Sgeo> " 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 <Sgeo> 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 <pikhq> I particularly love how this shell cannot handle spaces in any arguments.
05:56:50 <calamari> I think you want a break; after the exec, otherwise syntax errors are a problem
05:57:16 <calamari> and cmd[read_result + 1] = 0; was right I think you may have a typo on your new source
05:58:38 <pikhq> calamari: "break"? "break"? That is a forkbomb.
05:58:48 -!- MizardX has quit (Ping timeout: 276 seconds).
05:58:48 <Sgeo> comex is a redditor?
05:58:51 <pikhq> The new source does not have read_result any more.
06:02:10 <calamari> it should never get to the line after the exec, unless the exec fails
06:02:12 <pikhq> Oh, wait, no it's not.
06:02:30 <pikhq> It'll just jump out of the while loop and exit.
06:02:35 <pikhq> Unlike now, where it exists.
06:02:52 <pikhq> I'm pretty sure GCC will compile the two as equivalent.
06:02:53 * Sgeo should be washing clothes right now
06:02:57 <Sgeo> In fact, I'll go do that
06:03:12 <calamari> if it doesn't break, then the child won't terminate
06:03:30 <pikhq> ... Uh, return from main *is termination*.
06:03:38 <pikhq> Note that it currently does a "return 0".
06:03:55 <calamari> how does it get out of the loop
06:04:05 <pikhq> It returns from main.
06:04:37 <calamari> put a puts about return.. you wont get there with a syntax error
06:04:41 <pikhq> _start then calls the exit system call with the return value from main.
06:05:01 <pikhq> Yes, and with a syntax error the forked process exits from main.
06:05:17 <pikhq> Unlike what you propose, which is... A jump to a return from main.
06:05:42 <pikhq> Do I need to beat "return 0;" into your head some more?
06:05:46 <pikhq> execvp(tokened[0], tokened);
06:06:35 <calamari> yeah either one is pretty much the same
06:06:46 <pikhq> Yes, and I added it because it was going to forkbomb otherwise. :P
06:07:03 <calamari> yeah that is why I added break
06:07:09 <calamari> we just solved the same problem two different ways
06:07:31 <pikhq> And GCC compiles them equivalently.
06:10:23 <calamari> changing the directory doesn't work lol.. duh the environment goes bye bye
06:10:53 <calamari> I think in order to do that, parsing of the command will have to go before the fork
06:30:30 <calamari> hmm unsetenv isn't working for some reason
06:31:15 <calamari> } else if (strcmp(tokened[0], "unset") == 0) {
06:31:16 <calamari> printf("%i\n", unsetenv(tokened[1]));
06:32:05 <calamari> unset PATH prints PATH then 0, indicating success
06:34:58 <calamari> does adding cd bloat it quite a bit?
06:36:16 -!- coppro has joined.
06:37:00 <calamari> if (strcmp(tokened[0], "cd") == 0) {
06:37:01 <calamari> } else if (strcmp(tokened[0], "set") == 0) {
06:37:01 <calamari> setenv(tokened[1], tokened[2], 1);
06:37:16 <calamari> there.. feature complete, right? :P
06:38:58 <pikhq> calamari: No problem.
06:39:32 <calamari> I'm guessing adding strcmp, chdir and setenv adds a bit to the size
06:39:48 <calamari> can't really see it here since I'm compiling dynamic
06:40:49 <pikhq> shish.c:(.text+0xcb): warning: setenv calls malloc. Avoid it in small programs.
06:41:51 <calamari> one minute, that will require a code change
06:41:53 <pikhq> That'll... do the same thing.
06:42:45 <pikhq> malloc is overheady.
06:43:00 <calamari> putenv shouldn't require malloc
06:43:32 <pikhq> Without the setenv.
06:43:48 <pikhq> "so altering the string changes the environment."
06:44:20 <calamari> } else if (strcmp(tokened[0], "export") == 0) {
06:44:55 <calamari> so the syntax is export PATH=/bin or whatever
06:45:36 <pikhq> Then the PATH will be /bin/ until you have a command long enough to overwrite the PATH.
06:46:43 <Sgeo> Wait, "long enough"? As in, buffer overflow?
06:46:58 <pikhq> Sgeo: Well, not really a buffer overflow.
06:47:27 <pikhq> 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:55 <pikhq> As it just so happens, that buffer is also where command parsing happens.
06:48:35 <calamari> it doesn't seem to overwrite it
06:48:36 <pikhq> calamari: I'm going to statically allocate an array of buffers for that.
06:49:16 <Sgeo> Touching my chin no longer means blood on my hand, yay!
06:49:17 <calamari> although I can't explain WHY it isn't
06:49:27 <calamari> Sgeo: hows that laundry coming along
06:49:47 <Sgeo> I'll go to sleep when it's time for the dryer to be off
06:51:33 <calamari> it's possible that libc is doing a malloc for me
06:53:31 <Sgeo> Wait, nope, there's still blood on my hands
06:53:36 <calamari> 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 <calamari> got primitive \ escape sequences working
07:12:50 -!- augur has joined.
07:13:09 <calamari> \space is special, everything else turns back to whatever it was after the \
07:13:23 <calamari> well space does too, but it sets a flag
07:16:05 <calamari> and with that, I think it actually is usable now
07:17:10 <pikhq> Give it rawirc, and you'd make zzo38 happy. :P
07:17:39 <calamari> pikhq: so how big is http://sprunge.us/iFNP
07:19:52 <calamari> well the next closest shell was 60k, right?
07:20:05 <pikhq> 2108 without putenv.
07:21:03 <pikhq> That was about the same size, actually.
07:21:43 <calamari> hmm then we should definitely use setenv since it is safer
07:22:14 <pikhq> ... Yeah, no reason not to.
07:22:23 <calamari> what syntax did you use for it?
07:23:01 <calamari> setenv(tokened[1], tokened[2], 1); ?
07:23:47 <calamari> well there you go then .. shsh lives :)
07:24:14 <calamari> I guess that put it at around 335k
07:27:10 <pikhq> No, you need more logic for job control.
07:27:39 -!- MigoMipo has joined.
07:28:04 <pikhq> For job control, you need to actually watch the terminal for Ctrl-Z to send sigsusp.
07:28:53 <calamari> I guess I'm wondering how you could ever run more than one thing at a time with our shell :)
07:29:19 <pikhq> Detaching from the terminal.
07:30:14 <pikhq> Which is nearly what a job-controlling shell does anyways.
07:31:22 <calamari> we could almost use vfork instead of fork
07:32:10 <pikhq> They're system calls.
07:32:27 <pikhq> The libc functions literally do nothing but jump to the kernel.
07:33:03 <calamari> guess putenv isn't a system call
07:33:04 <pikhq> It would be *saner* to use vfork, though.
07:33:45 <pikhq> The environment is done entirely in userspace, IIRC.
07:34:50 <calamari> oh, then execv might be smaller
07:37:18 <pikhq> The environment is just extern char **environ.
07:37:42 <calamari> but the call has to get the PATH and find the command
07:39:03 <pikhq> I doubt it's much code.
07:40:23 <calamari> I wonder how hard it'd be to hack shsh into busybox
07:40:38 <calamari> haven't ever tried adding a command to bb before
07:40:40 <pikhq> Probably not very.
07:42:28 <Sgeo> Why am I still up?
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 <Sgeo> I'm going to be awake for a bit longer
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:03:01 * Sgeo will be waking up in 3hrs :(
08:25:04 <coppro> 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 <AnMaster> <alise> <Deewiant> (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 <AnMaster> but did you compare with all fingerprints disabled for both?
13:49:26 <AnMaster> after all, last I looked ccbi 2 implemented way fewer fingerprints
13:49:34 <fizzie> Here's a nice Microsoft support experience: https://connect.microsoft.com/VisualStudio/feedback/details/546053/
13:49:36 <fizzie> "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 <Deewiant> All fingerprints enabled for both
13:49:54 <fizzie> I especially like the "thanks for playing" bit.
13:49:56 <AnMaster> Deewiant, then what bit is so much faster?
13:50:12 <Deewiant> Last I looked cfunge doesn't implement any of the mainloop-intrusive fingerprints like IMAP/TRDS? :-P
13:50:33 <Deewiant> (They're the only ones that really matter)
13:51:10 <Deewiant> I haven't profiled both cfunge and CCBI to see where exactly each one spends their time, you know ;-P
13:51:34 <AnMaster> 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 <AnMaster> env -i reduces it of course ;)
13:52:01 <AnMaster> Deewiant, how do you mean "Complicatedly"
13:52:02 -!- augur has joined.
13:52:16 <Deewiant> How about you check out the benchmarks and the results at iki.fi/deewiant/befunge/fungicide.html first :-P
13:52:39 <AnMaster> Deewiant, is this not on mycology?
13:53:01 <Deewiant> You could read the whole announcement instead of just that one line, you know :-)
13:53:07 <AnMaster> Deewiant, well I couldn't find it
13:53:10 <Deewiant> Mycology is pointless to benchmark
13:53:15 <AnMaster> Deewiant, that line I quoted was first in my scrollback
13:53:15 <Deewiant> Since both cfunge and ccbi do it in 0.000s
13:53:23 <AnMaster> it is now out of it completely
13:53:47 <AnMaster> Deewiant, 0.000? You have a fast computer then
13:53:55 <AnMaster> I get it down to two zeros at best
13:54:06 <Deewiant> (That's with fingerprints disabled)
13:54:25 <AnMaster> even with fingerprints disabled iirc it is something like 0.0024s for both here
13:54:38 <Deewiant> 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 <AnMaster> "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 <Deewiant> You probably don't want to run the benchmarks yourself.
13:56:19 <AnMaster> it is hard to profile to find out where the issue is without running them myself
13:56:42 <AnMaster> Deewiant, anyway, you didn't explain how your funge space works...
13:57:27 <fizzie> "Lastly, a table." What a wonderful sentence.
13:57:41 <Deewiant> 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:58:07 <fizzie> Deewiant: Your Funge benchmarks generated too much traffic for it to handle.
13:58:27 <AnMaster> 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 <fizzie> 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 <Deewiant> fizzie: I wouldn't be that surprised, since they do say that they don't like that.
13:59:09 <Deewiant> But I would be surprised if it were /that/ popular. :-P
13:59:26 <Deewiant> 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 <Deewiant> AnMaster: Maybe around 20 hours for cfunge on my machine
13:59:49 <AnMaster> Deewiant, then it is useless to test improvements with basically then?
14:00:00 <Deewiant> Well, you can run individual ones of course
14:00:09 <AnMaster> Deewiant, well, don't they take as long?
14:00:37 <Deewiant> Like said, it's complicated :-P
14:00:38 <AnMaster> I seem to be unable to access the source and read it atm
14:01:13 <AnMaster> Deewiant, so complicated that you don't know how it works?
14:01:31 <AnMaster> (I mean, seriously, I can't see a good reason for not being able to explain it...)
14:02:04 <Deewiant> FWIW I think stinkhorn does something similar since it has similar performance characteristics (and beats cfunge often enough)
14:02:11 <AnMaster> Deewiant, also, how much ram do they use?
14:02:32 <Deewiant> If the site weren't timing out I could answer you
14:02:38 <AnMaster> I assume nothing too excessive. Since otherwise I won't be able to run them
14:02:49 <Deewiant> Depends on the interpreter :-P
14:02:54 <fizzie> Deewiant: It stopped timing out for me when I did one stop + reload now.
14:03:00 <AnMaster> Deewiant, if it is more than 2 GB then I will end up swap trashing
14:03:10 <AnMaster> fizzie, still times out for me
14:03:18 <Deewiant> For cfunge it'll be more than that on a few of the bigger ones, IIRC
14:03:48 <Deewiant> fizzie: I'm getting this on ssh to kirves: 'NFS server korppu not responding still trying'
14:03:51 <AnMaster> 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 <fizzie> Deewiant: Well, "broken" *is* the natural state of a NFS system.
14:04:38 <Deewiant> Basically, AABBs whose contents are stored as arrays, with a hash table as a fallback
14:05:29 <AnMaster> Deewiant, something similar to what glfunge was doing?
14:05:41 <Deewiant> I don't know what GLfunge was doing.
14:06:33 <AnMaster> Deewiant, anyway, how large is each such AABB?
14:06:33 <fizzie> 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:07:08 <AnMaster> Deewiant, okay, but do you have some size limits for it?
14:07:14 -!- augur has quit (Read error: Connection reset by peer).
14:07:20 <AnMaster> how do you decide when to split them off then?
14:07:32 <AnMaster> and when do you use the hash table fallback?
14:07:46 <AnMaster> Deewiant, well, maybe I misunderstood how you were doing it then
14:08:07 <AnMaster> Deewiant, I assume you create new such ones at runtimes?
14:08:23 <AnMaster> Deewiant, well I can't access the code to read it myself atm
14:08:28 <fizzie> 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 <AnMaster> since the server is still down for me
14:09:13 <Deewiant> 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 <fizzie> 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 <AnMaster> Deewiant, if you were to make windows binaries you surely have the source for *making* them around too?
14:09:48 <Deewiant> fizzie: The -p style ones loop.
14:09:55 <Deewiant> AnMaster: I was going to download it from the site.
14:10:13 <Deewiant> Since I forgot to copy it over to the NTFS disk.
14:10:20 <AnMaster> Deewiant, reboot then? Btw tried mingw? Debian/Ubuntu has a package for mingw cross compiler iirc
14:10:47 <Deewiant> I don't think cross compiling D is easy enough
14:11:00 <AnMaster> Deewiant, well it should be with llvm :P
14:11:11 <Deewiant> No, because LLVM bitcode is not platform-independent
14:11:20 -!- adam_d has quit (Ping timeout: 245 seconds).
14:11:26 <Deewiant> There's platform-specificity before the code reaches LLVM.
14:11:34 <AnMaster> isn't the llvm asm in theory if you do it right?
14:12:00 <AnMaster> a few things like type sizes need to be adjusted
14:12:44 <Deewiant> AnMaster: "Mostly" != "fully".
14:13:04 <AnMaster> Deewiant, but the remaining bits shouldn't be *too* hard to account for
14:13:17 <Deewiant> 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 <AnMaster> some of the OS API + some type sizes
14:13:32 <Deewiant> Which is a big thing and nontrivial to convert. :-P
14:13:58 <AnMaster> Deewiant, well, stuff like D already does it, doesn't it? Since there are linux and windows versions
14:14:11 <Deewiant> The LLVM D compiler doesn't support Windows.
14:14:29 <Deewiant> And even if it did, it wouldn't "do that"
14:14:41 <Deewiant> It just grabs the appropriate #ifdef-equivalent when compiling
14:14:51 <AnMaster> well yes you would need system headers
14:14:59 -!- augur has joined.
14:15:24 <Deewiant> Temp copy of my site hosted locally at http://tar.us.to:5423/
14:15:25 <AnMaster> like any cross compiler it would need headers from the target system
14:15:38 <Deewiant> And since a cross compiler doesn't exist... :-P
14:16:14 <AnMaster> Deewiant, what the hell is txz?
14:16:27 -!- augur_ has quit (Read error: Connection reset by peer).
14:17:20 <AnMaster> Deewiant, did ccbi use 32-bit or 64-bit cells?
14:17:32 <AnMaster> because cfunge defaults to 64-bit cells
14:17:42 <AnMaster> Deewiant, yes it says ccbi2-32/64 and so on
14:17:50 <AnMaster> it doesn't tell me if that is -m64 or -DUSE64
14:17:58 <AnMaster> which are *very* different things
14:18:04 <AnMaster> the fastest variant is -m64 -DUSE32
14:18:09 <Deewiant> All executables involved (the interpreters themselves or the interpreters’ interpreters, such as perl and python) were x86–64 ELF binaries.
14:18:20 <Deewiant> It says that on the page, you know.
14:22:03 <Deewiant> 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:35:20 <AnMaster> Deewiant, anyway, if this is mostly due to funge space (and I have no clue about profiling D code...)
14:35:39 <AnMaster> because my funge space code is well abstracted
14:35:59 <Deewiant> So you'll just copy it over as usual? ;-P
14:36:25 <AnMaster> Deewiant, did you implement BOOL btw? And what about REXP?
14:36:34 <AnMaster> if you did, then surely you just copied it from me!
14:36:46 <AnMaster> since I implemented those before you did
14:36:53 <Deewiant> REXP and FING are the two new ones in CCBI2, for fungot
14:36:53 <fungot> Deewiant: letrec is fine, i can verify it
14:37:05 <AnMaster> Deewiant, you copied it from me then clearly :P
14:37:08 <Deewiant> AnMaster: Hey, at least you have a history of taking code from CCBI :-P
14:37:19 <AnMaster> Deewiant, not really. Of studying it yes
14:37:45 <Deewiant> Weren't the original issues with TURT in cfunge due to my buggy implementation? ;-)
14:38:46 <AnMaster> Deewiant, that wouldn't have been an issue if you hadn't made it buggy
14:39:27 <AnMaster> Deewiant, but yes, TURT and I guess the matrix fingerprint were based on your ones
14:39:41 <AnMaster> because at the time I implemented those I didn't really know much about the underlying areas
14:39:48 <AnMaster> that would be required to implement them
14:40:39 <AnMaster> Deewiant, looks like cfunge won at http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/horizontal.b98.html
14:41:04 <AnMaster> Deewiant, where does it list the size of the program?
14:41:09 <Deewiant> IIRC cfunge wins at diagdown,diagup,hollow-square
14:41:20 <AnMaster> Deewiant, you said that varied on the main page
14:41:51 <Deewiant> Oh, you meant the parameter value?
14:41:53 <AnMaster> Deewiant, also I care much more about speed than memory usage. Relatively speaking, memory usage is not very interesting to me
14:42:18 <AnMaster> at http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/horizontal.b98.html
14:42:19 <Deewiant> On that page the graphs at the top have it as the x-axis
14:42:34 <AnMaster> Deewiant, eh? where are the graphs
14:43:06 <Deewiant> They work for me at tkk.fi but they didn't at my locally-hosted one, which was weird
14:43:18 <AnMaster> Deewiant, they don't work on tkk.fi for me
14:43:31 <AnMaster> Deewiant, they do work on wikipedia
14:43:38 <AnMaster> (tried http://en.wikipedia.org/wiki/File:SVG.svg )
14:44:05 <AnMaster> Deewiant, not if you click the image
14:44:19 <Deewiant> Yes, that works but embedding seems a bit unfortunately random
14:44:55 <AnMaster> <object type="image/svg+xml" data="plots/cactus-time.svg">Cactus plot for time used.</object>
14:44:55 <Deewiant> I presume you see the text instead? "Line plot of foo bar" or whatever
14:45:17 <AnMaster> I thought that was the normal way
14:45:18 <Deewiant> Because that doesn't work in Firefox :-P
14:45:31 <Deewiant> SVG img doesn't work in Firefox: it's a known bug
14:45:39 <Deewiant> https://bugzilla.mozilla.org/show_bug.cgi?id=276431
14:45:40 <AnMaster> Deewiant, I'm pretty sure it worked for me with .svg in 3.0.x versions
14:46:00 <AnMaster> Deewiant, shouldn't this be a trivial fix
14:46:14 <AnMaster> I mean, rewriting them to object tags internally or something
14:46:15 <Deewiant> It's a security issue since SVGs can be scripted
14:46:25 <Deewiant> Can't remember the details but no, it's not trivial.
14:46:26 <AnMaster> Deewiant, but so can web pages...
14:46:36 <Deewiant> But other images can't... I DUNNO
14:46:58 <Deewiant> AnMaster: Anyway I presume you see that "cactus plot" text?
14:47:14 <AnMaster> after view source I do see the images
14:48:03 <AnMaster> Deewiant, anyway it is pretty much guaranteed that whatever-32 is faster than whatever-64
14:48:33 <AnMaster> how comes mine was so fast for the squares?
14:49:05 <AnMaster> Deewiant, anyway the table below, it doesn't state what problem size it is for
14:49:16 <Deewiant> It's a summary, it includes all problem sizes
14:49:43 <AnMaster> you mean run1 + run2 + run3 ...?
14:49:49 <Deewiant> Yes, that is what "total" means.
14:50:00 <Deewiant> "All time measurements are in seconds (s) and all memory measurements are in mebioctets (Mio)."
14:51:02 <AnMaster> it took like 3 seconds to figure out what was written. Because "word form" reading broke down
14:51:13 <AnMaster> and then another second to parse it
14:51:49 <fizzie> I would complain about you not justifying how these benchmarks are reflective of real-world Funge-98 use, if there was any.
14:52:12 <fungot> AnMaster: magic takes away most of the " _" is 0???
14:52:16 <Deewiant> Yes, that would be a minor problem if there were any.
14:52:42 <AnMaster> you could test fungot's ul and bf interpreters instead
14:52:43 <fungot> AnMaster: nngh or something? ( so when cmuscheme48 sends the ' ,from-file foo.scm' command, it would be.
14:53:28 <AnMaster> Deewiant, ccbi1 stats for hollow square are amazing
14:53:50 <AnMaster> Deewiant, why does it say language-befunge there?
14:54:09 <Deewiant> None of them say the proper name because I was too lazy to prettify them
14:55:00 <Deewiant> AnMaster: And hey, cfunge is slower than Language::Befunge on the two biggest fork.b98
14:55:22 <AnMaster> Deewiant, I will argue that forking a lot is not realistic
14:55:32 <AnMaster> thus it is a pretty useless stats
14:55:53 <AnMaster> most programs won't have more than 2 or 3 threads. I can't imagine anything with more than 50 say
14:56:38 <AnMaster> 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 <AnMaster> what I'm confused about is diagup/diagdown being efficient in cfunge
14:57:14 <AnMaster> Deewiant, is that x to set a delta of 1,1?
14:57:37 <Deewiant> It uses x to do that, yes (what else?)
14:57:45 <AnMaster> Deewiant, oh and if I implement another funge space, expect it to be a compile time option.
14:57:55 <AnMaster> so you have to list 4 variants of cfunge next time ;P
14:58:08 <AnMaster> Deewiant, well, then it goes like 11x11x? diagonally
14:58:37 <Deewiant> "11x followed by the given number of z in a diagonal line."
14:58:50 <AnMaster> Deewiant, well I don't know how you implement z...
14:59:54 <Deewiant> The problem is that CCBI doesn't handle loading of sparse files efficiently
14:59:57 <AnMaster> Deewiant, how many decimals did you use for http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/diagdown.b98.html ?
15:00:13 <AnMaster> look at cfunge-32/64 ordering down ther
15:00:29 <AnMaster> since the sorting shows more than what you list
15:00:46 <Deewiant> It really doesn't matter if the difference is that small :-P
15:00:59 <AnMaster> Deewiant, each is an average over how many runs?
15:01:17 <Deewiant> http://users.tkk.fi/~mniemenm/befunge/fungicide.html#measurements
15:01:56 <AnMaster> "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:02:03 <AnMaster> Deewiant, how can it not vary?
15:02:25 <AnMaster> Deewiant, oh you mean vary between runs, not vary during a run
15:02:56 <Deewiant> I suppose I could just always take the memory usage as the first value
15:03:03 <AnMaster> Deewiant, well, since cfunge sets up randomness at startup, presumably the code path to write it could look slightly different
15:03:18 <AnMaster> so srandom(19847682764) vs. srandom(19847682372)
15:03:22 <Deewiant> I also assume that that makes absolutely no difference
15:03:39 <AnMaster> I think I use the microseconds from gettimeofday()
15:05:17 <AnMaster> Deewiant, the thing to do is to make it double fork and run the original process only for console IO
15:05:22 <AnMaster> that should confuse your stuff ;P
15:05:42 <AnMaster> Deewiant, also I notice you skipped efunge
15:05:45 <Deewiant> I'll disqualify such an implementation for being abusive :-P
15:06:17 <Deewiant> "There have not yet been any release, first release (0.0.1) is expected in late October or early November (2008)."
15:06:29 <AnMaster> Deewiant, anyway, what does mmap() calls show up as in /proc/self/smaps ? heap?
15:06:47 <Deewiant> I'll be honest: I don't know. The numbers seemed representative so I went with them.
15:07:36 <AnMaster> Deewiant, also since cfunge mmap()s the input file I assume it will drop sharply once the file is loaded
15:08:51 <AnMaster> Deewiant, what is up with plots/horizontal.b98/1000000/line-memtime.svg
15:10:19 <AnMaster> Deewiant, it looks weird for the lower one
15:10:20 <Deewiant> 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:42 <AnMaster> Deewiant, and why is the cfunge plot in plots/horizontal.b98/100000/line-memtime.svg discontinuous?
15:10:59 <AnMaster> it goes to almost zero at one point?
15:11:54 <Deewiant> I don't know; that happens as well, with many interpreters; they start out high, then drop, then climb "normally"
15:11:58 <AnMaster> Deewiant, and uh plots/horizontal.b98/10000000/line-memtime.svg has two red lines at once?
15:12:06 <AnMaster> memory is no longer a function of time
15:12:16 <AnMaster> since there is more than one value
15:12:35 <AnMaster> Deewiant, there is a constant red line at the top
15:12:45 <AnMaster> and there is one normal one further down
15:12:55 <Deewiant> It just marks the theoretical maximum
15:12:59 <Deewiant> I.e. the amount of memory in my system
15:13:14 <Deewiant> The time ones have something similar, for the timeout of 10800 seconds
15:13:17 <AnMaster> Deewiant, I thought it was ccbi1 :P
15:13:24 <AnMaster> maybe some other way to mark it
15:13:48 <Deewiant> 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 <AnMaster> Deewiant, did cfunge ever hit the timeout?
15:14:05 <Deewiant> You can see that in the main summary: no, it didn't
15:14:17 <Deewiant> 2318.5 seconds was the maximum for cfunge-32
15:14:49 <AnMaster> Deewiant, and what about memory limits
15:14:53 <AnMaster> plus the graphs on the main page
15:15:34 <Deewiant> There's a textual explanation above, you know
15:15:36 <AnMaster> how is time a function of how many of the benchmarks were successfully completed?
15:15:42 <AnMaster> Deewiant, read it, confused me even more
15:16:03 <Deewiant> It's just the maximum time needed to complete that many benchmarks
15:16:05 <AnMaster> "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:45 <Deewiant> No, it's not cumulative, it's the maximum. :-P
15:17:21 <Deewiant> 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 <Deewiant> (With the x-coordinate increasing by one each time)
15:18:26 <Deewiant> 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 <AnMaster> Deewiant, so what if the ten benchmarks take:
15:19:11 <AnMaster> Deewiant, so you get three or two three dots?
15:19:25 <Deewiant> So that's equivalent to 1 1 1 1 1 2 2 2 2 3 3
15:19:31 <AnMaster> Deewiant, that is useless for getting an overview of which ones are slow
15:19:45 <Deewiant> It's meant for comparing the interpreters, not the benchmarks
15:19:55 <AnMaster> Deewiant, and didn't stinkhorn complete any btw?
15:20:27 <Deewiant> This is all explained in the text
15:21:16 <AnMaster> # CCBI 1.0.20 can’t handle fork.b98 past 4096 threads at all, crashing in some way.
15:21:27 <Deewiant> "in some way" == "I don't know"
15:21:30 <AnMaster> Deewiant, does it stop at the first one crashed?
15:21:59 <AnMaster> since it seems cut short very early for ccbi if just the fork one failed
15:22:20 <Deewiant> You can see the number of benchmarks run in the table below
15:22:27 <Deewiant> 74 for most, 69 for CCBI 1, 42 for PyFunge
15:22:57 <AnMaster> Deewiant, do the fork threads exit right away?
15:23:08 <Deewiant> They're all alive when the first one hits @
15:23:52 <AnMaster> for the forks one, I think that simply tuning the realloc() growing size for threads would change it a lot
15:24:29 <AnMaster> http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/fork.b98.html <-- why are there extra smaller diagrams?
15:24:30 <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)
15:24:42 <Deewiant> There are no extra diagrams, they're all the same
15:24:51 <AnMaster> there are a lot of tiny ones at the end
15:24:54 <Deewiant> Why Firefox displays some as small, I do not know
15:25:36 <Deewiant> For me it enlarges them if they're small :-P
15:25:53 <AnMaster> reloading the page makes them large
15:25:55 <Deewiant> View in a separate tab/window/program if they're problematic
15:26:03 <AnMaster> Deewiant, btw I found out I have to allow scripts if I want the svgs to show
15:26:31 <AnMaster> which is silly, it noscript only blocks the scripts, not the whole page normally
15:26:37 <AnMaster> so why should it be any different for svgs
15:26:44 <AnMaster> only block the scripts in the svgs
15:27:15 <Deewiant> 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 <AnMaster> Deewiant, anyway I bet I could make a number of benchmarks where cfunge would be way faster :P
15:28:21 <AnMaster> ccbi1 as the fastest one would have a hard time though
15:28:46 <Deewiant> 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:34:52 <Deewiant> 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 <AnMaster> Deewiant, well life.bf is useful
16:00:05 <AnMaster> and so is fungot's ^bf and ^ul
16:00:05 <fungot> AnMaster: misc/ packages.scm
16:00:39 <AnMaster> 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:01:06 <AnMaster> Deewiant, I think I told you the command line I used before
16:01:23 <AnMaster> so it is very benchmarkable yes
16:01:35 <Deewiant> Changes there might even depend on the level of I/O buffering
16:01:44 <Deewiant> Which has nothing to do with performance
16:02:13 <AnMaster> Deewiant, stdout redirected to something tends to become fully buffered
16:02:46 <Deewiant> Where the buffer size can vayr.
16:03:05 <fizzie> Fungot seems to suggest using "misc/packages.scm", but I'm not sure how that'd work.
16:04:14 <fizzie> 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 <Deewiant> AnMaster: Preferably: replace the , with $ and set it up so that it stops after some (preferably easily changeable) number of iterations
16:04:35 <Deewiant> (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:49:36 -!- augur has quit (Read error: Connection reset by peer).
16:58:23 <AnMaster> Deewiant, IO tests are interesting too
16:59:08 -!- adam_d__ has joined.
16:59:09 <Deewiant> But try not to conflate it with non-IO.
17:01:58 -!- adam_d_ has quit (Ping timeout: 265 seconds).
17:02:28 <AnMaster> 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:56 <Deewiant> I.e. if you're going to benchmark IO, try to benchmark only IO, not IO + something otherwise performance-intensive.
17:03:02 <AnMaster> /proc/8939/maps:7fab50ecf000-7fab50f2f000 rw-s 00000000 00:04 23592979 /SYSV00000000 (deleted)
17:03:03 <AnMaster> /proc/9438/maps:7f1396aa0000-7f1396b00000 rw-s 00000000 00:04 23756833 /SYSV00000000 (deleted)
17:03:19 <AnMaster> fizzie, btw for bf benchmark that mandelbrot in bf wasn't very fast iirc
17:03:35 <AnMaster> as in, extremely slow without optimising
17:03:43 <AnMaster> and still slow with optimising compiler
17:04:20 <AnMaster> /proc/2407/maps-7f7165c88000-7f7165c89000 ---p 00000000 00:00 0
17:04:20 <AnMaster> /proc/2407/maps-7f7165c89000-7f7166489000 rw-p 00000000 00:00 0
17:04:25 <AnMaster> now those are some strange mappings
17:04:40 <AnMaster> that is - after since it was from grep -C
17:05:08 <AnMaster> Deewiant, and smaps is iirc the same, just with more info
17:05:17 <AnMaster> since it is not one entry per line
17:06:03 <AnMaster> Deewiant, looks like firefox mmap()s ~/.mozilla/firefox/profilename/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}/chrome/adblockplus.jar and so on
17:06:46 <AnMaster> Deewiant, btw as far as I can tell erlang doesn't use the system heap
17:07:04 <AnMaster> it mmap()s areas and use those I think
17:07:21 <AnMaster> Deewiant, so yeah testing efunge that way would require adjustments
17:08:01 <Deewiant> I'm /fairly/ sure that anon mmap() is included.
17:08:18 <Deewiant> I'd be very surprised if those programs all used only brk(), at least.
17:08:39 <AnMaster> Deewiant, no, I'm pretty sure there isn't
17:08:46 <AnMaster> 7f55b454e000-7f55b46e5000 rw-p 00000000 00:00 0
17:08:46 <AnMaster> 7f55b4762000-7f55b7f18000 rw-p 00000000 00:00 0
17:08:46 <AnMaster> 7f55b7f84000-7f55b8085000 rw-p 00000000 00:00 0
17:08:46 <AnMaster> 7f55b80f2000-7f55b8572000 rw-p 00000000 00:00 0
17:09:05 <AnMaster> Deewiant, because the way that erlang works, I can see how those varies
17:09:33 <Deewiant> I mean, included by my measurer: it doesn't grep over anything that looks like that IIRC
17:09:42 <Deewiant> (I.e. I don't really know what you're talking about)
17:10:26 <AnMaster> Deewiant, you said you added heap + stack from smaps iirc?
17:10:42 <Deewiant> I didn't say anything, I wrote something on the web page
17:11:02 <AnMaster> Deewiant, but [heap] is brk() as far as I can tell in some simple tests
17:11:04 <Deewiant> 'Memory usage is measured using a Python script which repeatedly reads the /proc/<pid>/smaps pseudofile, summing up any “Shared” and “Private” values.'
17:11:31 <AnMaster> Deewiant, Shared_Clean or Shared_Dirty?
17:11:51 <AnMaster> both Shared and Private seems to be split into Clean/Dirty here
17:12:09 <Deewiant> Anything that starts with "Shared" or "Private" is summed
17:12:25 <AnMaster> Deewiant, due to COW and such on I'm not sure this is actually good
17:12:30 <AnMaster> you should look at the type of the object
17:12:45 <AnMaster> Deewiant, like libc seems mapped more than once into some processes
17:13:03 <AnMaster> those are read/readonly/nx and so on
17:13:29 <Deewiant> 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 <AnMaster> Deewiant, well for one, erlang -smp would cause problems I think
17:15:29 <AnMaster> seems the threads go into /proc/<pid>/task/<pids(?)>/smaps
17:16:15 <AnMaster> the thread specific stacks are gone from the main one it seems
17:16:22 <AnMaster> 7f1106688000-7f1106699000 rw-p 00000000 00:00 0 [threadstack:0000fff0]
17:17:26 <AnMaster> linux does seem to try to do something "reasonable" for phtreads apps
17:17:54 <AnMaster> Deewiant, is there any graph over which test took the longest for a given implementation?
17:18:06 <AnMaster> Like I want to see what else than t that cfunge was extremely slow at
17:19:04 -!- augur_ has quit (Ping timeout: 268 seconds).
17:19:13 <AnMaster> // For concurrent funge: how many new IPs to allocate in one go?
17:19:50 <AnMaster> Deewiant, was that >_< over the #define?
17:19:53 -!- augur has joined.
17:20:01 <Deewiant> But I suppose it works for that too
17:20:35 <fizzie> It is soon AI competition time again; I get to invent new plots to draw about the games, yay.
17:20:41 <Deewiant> For finding the "worst" for anything, grab the preprocessed data and do some awk or something...
17:20:45 <AnMaster> Deewiant, I'm not sure non-1 sizes will work properly
17:21:01 <Deewiant> AnMaster: Some #define if only one value is ever correct :-D
17:21:03 <AnMaster> (ipList*)malloc(sizeof(ipList) + sizeof(instructionPointer[ALLOCCHUNKSIZE]))
17:21:24 <AnMaster> hint: instructionPointer is a *type*
17:22:01 <AnMaster> Deewiant, fizzie now one C nerd mark if you can tell me what it does and why it works.
17:22:18 <AnMaster> also, it confused no ends out of the static analyser sparse
17:22:42 <Deewiant> Isn't it just taking the sizeof of a static array?
17:22:49 <AnMaster> Deewiant, not a static array no
17:22:56 <AnMaster> Deewiant, but yes in that case
17:23:04 -!- adam_d__ has changed nick to adam_d.
17:23:19 <AnMaster> Deewiant, there it was sizeof(instructionPointer[(*me)->size + ALLOCCHUNKSIZE])
17:23:23 <Deewiant> Yes, I remember that VLA one... but I guess that should be equally obvious
17:23:57 * AnMaster wonders why he cast the value of malloc()
17:24:04 <AnMaster> I mean, it isn't like this is C++...
17:26:15 <AnMaster> Deewiant, where was the link to the .xz tools now again?
17:27:07 <Deewiant> You sure you don't have it already?
17:27:27 <fizzie> Indeed, xz-utils only appears in karmic and lucid.
17:27:45 <fizzie> (C.f. http://packages.ubuntu.com/search?keywords=xz-utils&searchon=names&suite=all§ion=all)
17:28:05 <AnMaster> meh *third level recurses ssfs to uncompress it*
17:28:21 <AnMaster> (since I mounted a different subtree before
17:28:28 <Deewiant> AnMaster: What do you decompress lzma with?
17:29:07 <AnMaster> lzma 4.32.0beta3 Copyright (C) 2006 Ville Koskinen
17:29:07 <AnMaster> Based on LZMA SDK 4.43 Copyright (C) 1999-2006 Igor Pavlov
17:29:17 <AnMaster> /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:41 <AnMaster> Homepage: http://www.7-zip.org/sdk.htm
17:29:49 <AnMaster> if I guessed the right package
17:30:00 <AnMaster> got to do something other, more important, RL
17:30:12 <Deewiant> Well, with luck, that'll decompress it as well :-P
17:31:15 <fizzie> fis@eris:~$ apt-cache show $(dpkg-query -S $(which lzma) | cut -d ':' -f 1) | grep ^Homepage:
17:31:15 <fizzie> Homepage: http://www.7-zip.org/sdk.htm
17:40:43 <fizzie> 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 <AnMaster> Deewiant, so the xz file is just lzma?
17:52:32 * AnMaster looks for the README on fungicide
17:52:46 <Deewiant> It might be different if xz does something different based on argv[0]...
17:53:24 <AnMaster> 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 <Deewiant> That's GNU tar specific anyway
17:53:40 <fizzie> The page about xz-utils did say that .xz is a newer container, even though the LZMA algo is still LZMA.
17:53:51 <AnMaster> Deewiant, true, but that is the tar I normally use
17:54:05 <fizzie> And lucid's GNU tar has a -J flag for xz.
17:54:10 <fizzie> filter the archive through xz
17:54:31 <fizzie> And --lzma for lzma. And --lzop for lzop.
17:54:42 <fizzie> (The latter is yet another LZMA-based thing.)
17:55:00 <Deewiant> Isn't LZO completely different?
17:55:00 <fizzie> Oh, right, lzop *was* LZO-based.
17:55:03 <AnMaster> Deewiant, anyway, I can't figure out how to just run a timed test on forking
17:55:10 <fizzie> Yes, I was just under the impression that lzop had a silly name.
17:55:19 <pikhq> lzop is deliciously fast.
17:55:28 <AnMaster> pikhq, bad compression ratio iirc?
17:55:28 <Deewiant> AnMaster: You can comment stuff out from runs.dat with #
17:55:33 <fizzie> 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 <Deewiant> Then make an interpreters.dat and use runallruns
17:55:41 <fizzie> There's certainly a number of them.
17:55:47 <pikhq> AnMaster: Not too far from gzip, actually.
17:56:06 <AnMaster> Deewiant, yes but where do I run just the fork test. Like I need to run it under valgrind --tool=cachegrind
17:56:20 <AnMaster> Deewiant, (for small sizes only of course)
17:56:23 <pikhq> AnMaster: The nice thing about lzop, though, is tat it means your compression is likely IO bound. ;
17:56:35 <AnMaster> pikhq, what about from ramdisks ;P
17:56:56 <AnMaster> (where small is something like mycology sized)
17:56:57 <Deewiant> AnMaster: Just set up an interpreters.dat with valgrind
17:57:19 <AnMaster> Deewiant, that needs to be valgrind --tool=cachegrind --lots-of-other-parameters build_opt_dbg/cfunge
17:57:35 <Deewiant> You can use runone.pl directly too I guess
17:57:51 <AnMaster> Deewiant, okay, and where does that helper fungify need to be?
17:58:03 <AnMaster> Deewiant, and how does one compile it?
17:58:16 <pikhq> AnMaster: The speed of LZO is approx. 1/6th that of memcpy.
17:58:20 <AnMaster> Deewiant, in the same dir as the .hs file?
17:58:29 -!- MizardX has joined.
17:58:40 <AnMaster> Could not find module `Test.ChasingBottoms.TimeOut':
17:58:40 <AnMaster> Use -v to see a list of the files searched for.
17:58:41 <Deewiant> AnMaster: Well, you need to have the dependencies installed, which you may or may not
17:58:51 <Deewiant> cabal install chasing-bottoms IIRC
17:59:01 <Deewiant> If you lack cabal... blame your distro
17:59:23 <AnMaster> bash: cabal: command not found
17:59:46 <AnMaster> nothing matching "chasing-bottoms" either
18:00:00 -!- cal153 has joined.
18:00:26 <AnMaster> Deewiant, if I compile it on another system, will it run on this one?
18:00:31 <AnMaster> also what the heck is up with ghc on arch:
18:00:46 <Deewiant> If it's the same arch and dynamic library versions, it probably will
18:00:47 <AnMaster> Total Installed Size: 665.06 MB
18:01:01 <AnMaster> Deewiant, I have 6.8.2 on ubuntu
18:01:18 <AnMaster> Deewiant, can you provide a static binary of it?
18:02:40 <AnMaster> ./fungify: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
18:02:51 <AnMaster> Deewiant, doesn't it support static linking?
18:03:24 <AnMaster> Deewiant, wouldn't even using GMP at all do so then?
18:03:44 <Deewiant> (Note: I can't remember but I think this was an issue once)
18:04:12 <AnMaster> Deewiant, and how can I quickly check that it works. Just running it does nothing
18:04:38 * AnMaster copied /usr/lib/libgmp.so.10 from another computer and is using LD_LIBRARY_PATH
18:04:54 <Deewiant> If it outputs something it probably works :-P
18:06:02 <Deewiant> It was originally just meant for my own use but then it turned out to be very handy in fungicide
18:06:11 <AnMaster> 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 <Deewiant> AnMaster: If you use runone.pl directly it'll take the program as an argument (i.e. the generated file)
18:07:40 <AnMaster> 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:08:10 <Deewiant> And if your distro doesn't have /that/, take it around the corner and shoot it :-P
18:08:40 <AnMaster> ah libbsd-resource-perl seems relevant
18:09:15 <AnMaster> why is there a libbsd-resource-perl-dbgsym I wonder...
18:10:41 <AnMaster> Deewiant, okay this one is more confusing:
18:10:43 <AnMaster> "make_path" is not exported by the File::Path module
18:10:43 <AnMaster> "remove_tree" is not exported by the File::Path module
18:10:54 <AnMaster> File::Path *does* seem to be there
18:12:15 <AnMaster> cpan starts asking me questions instead
18:12:46 <AnMaster> well I don't know them, about build dirs and such
18:13:00 <AnMaster> Deewiant, anyway I don't want to end up with non-distro files in /usr
18:13:37 <Deewiant> Then set up some kind of site_perl in $HOME, which I would guess is possible
18:13:42 <AnMaster> Deewiant, is it libfile-path-expand-perl ?
18:13:58 <AnMaster> Deewiant, it seems File::Path is built into perl?
18:13:59 <Deewiant> How would I know? It is File::Path
18:14:48 <Deewiant> Feel free to modify runone.pl if you think that'll be easier :-P
18:15:13 <Deewiant> http://search.cpan.org/~dland/File-Path-2.08/Path.pm
18:15:31 <AnMaster> /usr/share/perl/5.10/File/Path.pm
18:15:42 <AnMaster> there is /usr/lib/perl and /usr/share/perl
18:15:44 <Deewiant> INST_FILE /usr/share/perl5/site_perl/5.10.1/File/Path.pm
18:16:10 <AnMaster> Deewiant, how wound one tell version from the *.pm file?
18:16:37 <AnMaster> at least it says $VERSION = '2.04'
18:17:09 <AnMaster> Deewiant, bbl, have to rush, will be back in ~1 hour, 20 minutes
18:17:10 <Deewiant> I know very little Perl-the-language and practically none Perl-the-community apart from that CPAN typically works very well
18:18:23 <Deewiant> 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:20:32 -!- uorygl has quit (Quit: leaving).
18:22:22 <fizzie> 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 <fizzie> 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.
19:01:40 <pikhq> ehirdiphone: How farest thou?
19:02:24 <ehirdiphone> I need to figure out a way to code on this thing.
19:02:50 <pikhq> Jailbreak + terminal.app?
19:05:17 <Deewiant> 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:48 <ehirdiphone> And considering my language preferences the lack of Greek letters ;-)
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 <AnMaster> 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 <AnMaster> in fact I can't find any *,b98 files in there
19:33:27 <Deewiant> AnMaster: The scripts in benchmarks/ generate the files run
19:33:59 <AnMaster> Deewiant, why not use y to get the the value on the command line?
19:34:41 <AnMaster> Deewiant, So I run something like: perl fork.b98.pl 123 > fork-123.b98?
19:35:01 <Deewiant> Note that for fork it has to be a power of two; not sure what'll happen if not
19:35:03 <AnMaster> but I can't see where fork invokes fungify?
19:35:27 <Deewiant> Why would they all need it? :-P
19:35:43 <Deewiant> Because it was easy to write it that way
19:36:04 <Deewiant> 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:12 <AnMaster> hm the output size of the fork one grows one line per power of 2?
19:37:25 <AnMaster> Deewiant, does language::befunge have some huge fixed overhead? Since it was way slower than cfunge until the 65536 graph
19:37:57 <AnMaster> Deewiant, yes but I would have expected a constant factor, not a constant term, which it what it looks like to me
19:38:18 <Deewiant> The plot is logarithmic, remember
19:38:43 <AnMaster> I always disliked log plots. Don't know why.
19:38:52 <AnMaster> maybe because they are so wooden?
19:39:54 <AnMaster> Deewiant, oh and I think that fork script rounds down to nearest power of two
19:40:34 <Deewiant> I'd think it goes down but whatever
19:41:05 <AnMaster> Deewiant, no. It is inconsistent. 32767 and 32768 are same size, but 32769 is one larger
19:41:14 <AnMaster> and isn't 32768 a power of two?
19:41:41 <Deewiant> Yeah, that actually makes sense
19:44:16 <AnMaster> Deewiant, okay, so the thing to do is to grow it by 2^16 bytes each time right? ;P
19:44:21 <AnMaster> that will lead to few reallocs
19:44:58 <Deewiant> You're hopeless, you know that? :-P
19:45:07 <AnMaster> Deewiant, you know I'm joking right
19:46:00 <AnMaster> Deewiant, I may allow all these as user tunables btw
19:46:38 <AnMaster> 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 <AnMaster> Deewiant, what do you think about that?
19:49:29 <Deewiant> Go ahead? Nobody will tune them :-P
19:49:41 <AnMaster> Deewiant, you know iirc ATLAS does something like that
19:51:09 -!- ehirdiphone has joined.
19:53:41 <AnMaster> Deewiant, how many IPs does ccbi allocate in one go?
19:53:58 <Deewiant> 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 <AnMaster> Deewiant, oh I thought that was CCBI1?
19:54:35 <AnMaster> Deewiant, is that a linked list?
19:54:56 <AnMaster> Deewiant, high level array that might allocate in chunks internally?
19:55:41 <Deewiant> Yeah, the builtin array that does whatever and in practice does something poor
19:56:49 <AnMaster> well strange, allocating 32 ips per chunk doesn't change the time very much
19:57:11 <AnMaster> about 10 seconds, from 3 minutes, 13 seconds, to 3 minutes, 2 seconds
20:02:48 <AnMaster> current policy: frequency should be within 800 MHz and 1.60 GHz.
20:02:58 <AnMaster> as in, changing seems to work but does nothing
20:10:25 <AnMaster> Deewiant, Wait, do you append the ip even if it isn't the last one that is forking?
20:10:40 <Deewiant> I memmove it to the right place
20:11:01 <AnMaster> I think I found the issue, and that I need to reverse the order I traverse the ip list in
20:16:11 <AnMaster> Deewiant, do you memmove to delete an IP in the middle too?
20:19:39 -!- tombom_ has joined.
20:20:44 <AnMaster> Deewiant, okay the issue seems to be the code that basically does memmov
20:20:53 <AnMaster> Deewiant, do your list only contain pointers to IPs or such?
20:20:58 <AnMaster> that could explain it somewhat
20:21:56 <AnMaster> 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 <AnMaster> of course, that backfires for this weird case
20:22:13 -!- tombom has quit (Ping timeout: 268 seconds).
20:22:26 <AnMaster> Deewiant, because for smaller cases I found it was faster than storing a list of pointers
20:22:51 <AnMaster> Deewiant, not sure on the top of my head
20:22:57 -!- jcp has joined.
20:24:27 <AnMaster> most is due to the array of fingerprint stacks being inline in the IPs
20:24:33 -!- ehirdiphone has quit (Quit: Get Colloquy for iPhone! http://mobile.colloquy.info).
20:24:56 <AnMaster> Deewiant, this works very well when we have a "realistic" number of IPs. Which would be something less than 10.
20:25:15 <AnMaster> maybe I will provide a compile time option for another variant
20:25:45 <Deewiant> So 85 pointers' worth; moving that around will obviously be more expensive, yes
20:26:06 <AnMaster> Deewiant, for most programs the locality of reference wins over that easily.
20:26:22 <AnMaster> I would say that this is a non-realistic test case anyway.
20:27:19 <AnMaster> 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 <AnMaster> those add 9 bytes in total (1 x pointer to HRTI data + 1 x bool for SUBR being relative)
20:28:13 <AnMaster> Deewiant, so yeah, I'm going to make a "stupidly large" variant a compile time option
20:28:54 <Deewiant> You don't have to win on every stupid benchmark :-
20:29:09 <AnMaster> Deewiant, sure I do. If I make a better funge space it will also be an option
20:30:44 <AnMaster> 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:31:11 <Deewiant> I'm not going to test every silly variant :-P
20:31:20 <AnMaster> Deewiant, well, drop 64-bit cells then
20:31:51 <AnMaster> 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:32:13 <AnMaster> Deewiant, but 32-bit *cells* are faster
20:32:58 <Deewiant> The difference is small enough that I don't really care
20:33:10 <AnMaster> $ bzr branch trunk alt_ip_list
20:33:32 <AnMaster> Deewiant, hey, in one place it was cfunge-32 - stinkhorn - cfunge-64 iirc
20:33:47 <Deewiant> So improve cfunge, not my problem ;-P
20:34:05 <AnMaster> Deewiant, I could make 32-bit cells default, and hide 64-bit on the advanced page or such
20:34:59 <AnMaster> 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 <pikhq> Clearly you should use 8 bit cells and assembly.
20:36:56 <pikhq> (so you can use ah, al, and friends)
20:38:52 <AnMaster> pikhq, funge-98 requires 32-bit or more
20:39:19 <AnMaster> Deewiant, the text on http://users.tkk.fi/~mniemenm/befunge/mycology.html seems outdated
20:39:45 <Deewiant> Whoops, forgot to change the year
20:39:56 <AnMaster> Deewiant, well, don't know, is the file the current one?
20:40:14 <pikhq> AnMaster: Fine, fine. Do it on a 32-bit Brainfuck then.
20:40:46 <AnMaster> pikhq, yes that is what I use for speed testing
20:41:37 <AnMaster> Deewiant, about mycology 3DSP test: "Loaded and unloaded FPSP, assuming it and its F and P commands will work from now on..."
20:42:08 -!- ais523 has joined.
20:42:11 <Deewiant> It means that it assumes FPSP works
20:42:27 <Deewiant> It has successfully loaded and unloaded FPSP but didn't test any further
20:42:28 <AnMaster> Deewiant, what happens if FPSP is not implemented then?
20:42:35 <ais523> presumably it reflects on loading
20:42:36 <Deewiant> Then it shouldn't have loaded it
20:42:45 <AnMaster> Deewiant, and then will it skip the 3DSP test?
20:55:09 -!- adam_d has joined.
20:56:51 -!- charlls has joined.
20:57:53 -!- charlesq__ has joined.
20:57:53 <AnMaster> 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 <AnMaster> 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:31 <AnMaster> for that fork test (not largest one)
21:45:51 <Deewiant> Compare to stinkhorn, it's the fastest on those
21:46:10 <AnMaster> Deewiant, also note this runs on a 2.26 GHz Core 2 Duo
21:46:44 <AnMaster> since the last line has no forks
21:47:07 <AnMaster> or what about trailing newline?
21:47:23 <AnMaster> Deewiant, anyway, I don't have stinkhorn around
21:47:48 <AnMaster> Deewiant, I allocate 4096 IPs in each chunk.
21:48:05 <Deewiant> code.google.com/p/stinkhorn IIRC
21:48:36 <Deewiant> 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 <AnMaster> 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:22 <AnMaster> Deewiant, why not a makefile, or even a build.sh
21:49:36 <Deewiant> That is my build.sh for it :-P
21:50:10 <AnMaster> well, there should be one there
21:50:18 <Deewiant> It has a VS solution and project file but you probably don't care about those
21:50:54 <olsner> -fignore-errors-just-compile
21:51:08 <AnMaster> because it is a HUGE C++ error
21:51:23 <Deewiant> src/interpreter.cpp line 111, I think
21:51:27 <Deewiant> Change const_iterator to iterator
21:52:37 <AnMaster> Deewiant, oh wait, building all in one go. Bad idea. Per object file is better
21:53:04 <AnMaster> if you do it that way for stinkhorn you should gcc -combine and such for cfunge as well ;P
21:53:31 <Deewiant> cfunge has a build system, which I use: your problem if it's not optimal
21:55:06 <AnMaster> 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 <AnMaster> Deewiant, some testing indicates stinkhorn has a faster setup time than cfunge. While the difference is near none for large cases
22:00:53 <AnMaster> the break-even seems to be around 2^17 threads or so
22:01:52 <AnMaster> it doesn't seem statistically significant at 2^18 though. Sometimes one is slightly faster, sometimes the other
22:02:58 <AnMaster> and then stinkhorn is faster again for a bit, strange
22:03:08 -!- Gregor has joined.
22:03:17 <AnMaster> well I believe some code could possibly be tuned
22:03:49 <AnMaster> I set the pointer array realloc size to 1 again for testing something
22:04:23 <pikhq> Statically. Allocate. Everything. :P
22:06:01 <AnMaster> well the chunk here was for the list of pointers in this case
22:06:24 <AnMaster> anyway, growing it with 256 at a time seems to give pretty much the optimum
22:08:44 <pikhq> AnMaster: Yeah, but it'll mean no need to link against malloc!
22:14:00 <AnMaster> Deewiant, oh, stinkhorn doesn't use exact bounds
22:14:05 <AnMaster> that explains some of the speed I guess
22:15:46 <AnMaster> Deewiant, also: how the fuck did stinkhorn manage http://users.tkk.fi/~mniemenm/befunge/mycology-output/concurrency/stinkhorn.txt
22:16:28 <Deewiant> Easily, CCBI used to do that at some (hopefully never released) points
22:16:50 <Deewiant> Basically: handle markers for all IPs before executing any instructions
22:16:50 <AnMaster> I mean, it ran lots of spaces before
22:17:01 <Deewiant> Then get screwed if one gets p'd on top of you
22:17:03 <AnMaster> cfunge handles it the same way as instructions
22:17:30 <AnMaster> just with a "continue with this IP after" flag
22:18:05 <AnMaster> hm maybe I should rewrite that, possibly checking that flag every time we call execute_instruction has some severe overhead
22:18:17 <AnMaster> there is an obvious alternative of course
22:18:43 <Deewiant> Most likely your CPU can branch-predict well enough that the difference for most code is negligible
22:19:04 <AnMaster> Deewiant, well, it would need to do that after it returned to main loop
22:19:14 <AnMaster> 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 <AnMaster> Deewiant, what about 02010.04 or such?
22:27:37 -!- MigoMipo has quit (Ping timeout: 252 seconds).
22:27:56 <AnMaster> Deewiant, you didn't add efunge to mycology results I see?
22:28:05 -!- MigoMipo has joined.
22:28:14 <Deewiant> 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 <AnMaster> Deewiant, I will remove that message
22:30:38 <AnMaster> Deewiant, see that page now :P
22:31:06 <Deewiant> Still says the same thing, sorry :-P
22:32:21 <AnMaster> Deewiant, now it doesn't any more
22:34:28 <AnMaster> Deewiant, btw I see overall stinkhorn was slower than cfunge?
22:34:41 <Deewiant> Mostly due to the stack, I think
22:34:57 <AnMaster> Deewiant, oh? what does stinkhorn do with the stack?
22:35:07 <Deewiant> I don't know, I don't delve into sources
22:35:16 <AnMaster> Deewiant, then why do you think it is it?
22:35:42 <Deewiant> Because it loses very badly in y-rep-n
22:35:52 <AnMaster> Deewiant, and wth do you do with your stack: http://users.tkk.fi/~mniemenm/befunge/fungicide-rankings/pushpop.b98.html ?
22:36:35 <AnMaster> Deewiant, that looks like cheating. I just don't find it plausible
22:36:52 <Deewiant> AnMaster: You'll notice the timings behave almost exactly like the ones of horizontal.b98
22:37:01 <Deewiant> I.e. it's the file that's the bottleneck, really.
22:37:34 <Deewiant> It is 10 million cells, after all
22:37:38 <AnMaster> "<Deewiant> Not the loading necessarily"?
22:39:12 <AnMaster> Deewiant, so basically you manage so well because of your funge space?
22:39:32 <Deewiant> But having a non-shitty stack helps as well (c.f. stinkhorn)
22:39:48 <AnMaster> Deewiant, what does y-rep-n do?
22:40:15 <AnMaster> Deewiant, and yn-rep is what I said?
22:40:28 <Deewiant> Note stinkhorn's total time for all benchmarks is 12888.2
22:40:35 <Deewiant> Its time for y-rep-n is 12236.0
22:40:50 <AnMaster> Deewiant, ideas: n pops each element? Or it shrinks the allocated stack?
22:40:50 <Deewiant> cfunge's is 1.0 / 1.8 (32 / 64 bits)
22:41:16 -!- cheater2 has quit (Ping timeout: 276 seconds).
22:41:25 <Deewiant> stinkhorn is about 5.6 times as fast as cfunge-32
22:41:46 <AnMaster> Deewiant, it doesn't pass mycology and doesn't do exact bounds
22:41:54 <AnMaster> without exact bounds cfunge is quite a bit faster
22:42:16 <AnMaster> you shouldn't compare apples and pears
22:42:16 <Deewiant> Right, it is a bit nonconforming.
22:42:31 <Deewiant> cfunge won't be six times faster without exact bounds :-P
22:43:23 <AnMaster> Deewiant, more like 150% faster. And sometimes much more (if you write spaces to your "edges")
22:44:24 <AnMaster> Deewiant, stinkhorn seems to be missing from last y-rep-n graph?
22:44:40 <AnMaster> even though it presumably ran for most of that
22:44:44 <Deewiant> timeouts are missing, I don't know why
22:45:08 <Deewiant> Noticed it pretty late and haven't looked into it yet
22:45:28 <Deewiant> The data should be there, the plotter is just failing.
22:45:48 <AnMaster> Deewiant, the ccbi2 0.07 vs. 0.10 for cfunge is probably due to startup overhead for cfunge
22:46:05 <AnMaster> I noticed all the memory pools and such does have a constant overhead for very short running programs
22:46:08 <Deewiant> Don't bother comparing times below one second.
22:46:27 <AnMaster> Deewiant, I want to be first on the list again you see.
22:46:34 <AnMaster> and I'm going to make sure I am
22:46:58 <AnMaster> Deewiant, maybe not for every test
22:47:06 <Deewiant> 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 <AnMaster> Deewiant, anyway, was the main overhead for cfunge that fork test?
22:47:31 <AnMaster> Deewiant, that isn't fair you see
22:47:58 <Deewiant> It may've been, I can't remember
22:47:59 -!- augur has quit (Ping timeout: 240 seconds).
22:48:28 <Deewiant> 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 <AnMaster> Deewiant, I wonder why I was so fast at diagdown...
22:48:46 <Deewiant> And in the zoomed-in one you can tell that the difference isn't really that big
22:49:03 <Deewiant> It's not you being fast, it's me being slow
22:49:46 <AnMaster> Deewiant, why are you slow at it then?
22:50:12 <Deewiant> A diagonal line is the worst case for an AABB
22:50:18 <AnMaster> anyway the thing to do is to expand static area to fill most of that ;)
22:50:45 <AnMaster> since it is basically the shape of an identity matrix
22:50:53 <AnMaster> aren't there fast ways for such iirc?
22:51:18 <Deewiant> That's assuming sparse data, which won't usually be the case
22:51:33 <Deewiant> s/I'm fast/You're slow/, and yes, I know.
22:51:42 <AnMaster> Deewiant, how comes that time?
22:52:09 <Deewiant> It's still a mostly empty box.
22:52:51 <AnMaster> Deewiant, idea: require a statistical analysis file to be pre-generated
22:53:16 <AnMaster> and since it must be pre-generated, it shouldn't be counted to the running time
22:53:23 <AnMaster> since it would be a one-time thing for most programs
22:53:52 <AnMaster> Deewiant, I was inspired by db engines analysers here
22:54:07 <Deewiant> Fortunately Funge interpreters aren't DB engines
22:54:19 <AnMaster> Deewiant, why do you do so well at filled square? is all of that square executed?
22:54:56 <AnMaster> horizontal-p? how does that differ from horizontal?
22:55:57 <Deewiant> No, that describes the results, not the benchmarks themselves
22:56:24 <AnMaster> hm diagdown-p, why are you faster at that one?
22:56:41 <AnMaster> I don't think initial file loading is *that* much more efficient
22:57:40 <AnMaster> also amusing that rcfunge2 uses more ram for diagup-p at 5000 than at 10000
22:58:17 <Deewiant> When the runtime is that small it's just a case of the measurer missing it
22:58:36 <AnMaster> Deewiant, try with massif instead
22:58:47 <AnMaster> of course you can't profile speed either
22:58:51 <Deewiant> And take a 100x performance hit? No thanks
22:58:56 <Deewiant> These things can take hours as-is
22:59:00 <AnMaster> Deewiant, it is useful for the "runtime is too short" cases
22:59:04 <AnMaster> you only need to use it for them
22:59:14 <Deewiant> And I'd be measuring different things
22:59:23 <AnMaster> well what about additional info then?
22:59:24 <Deewiant> One uses /proc/smaps, the other massif
22:59:45 <Deewiant> Like said, just forget about any differences when the time is less than a second :-P
22:59:57 <AnMaster> 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:16 <Deewiant> I'd've just said "counts aren't accurate" :-P
23:00:44 <AnMaster> Deewiant, I'm tempted to make an interpreter using sqlite with a disk db for the funge space or such
23:00:50 <AnMaster> just to mess up the memory stats
23:01:45 <AnMaster> Deewiant, anyway I'm not 15x slower than you if we exclude the forks case
23:02:12 <AnMaster> Deewiant, how much slower am I then?
23:02:30 <Deewiant> Subtract and divide, it's not difficult :-P
23:02:57 <AnMaster> Deewiant, I hope your funge space code is well commented
23:03:04 <AnMaster> so I can learn what the hell you do
23:03:32 <Deewiant> TBH I trust that it's complicated enough that you won't be able to rip it easily
23:03:50 <Deewiant> If you do succeed, good on ya then I guess :-P
23:04:11 <Deewiant> That's up from maybe a tenth of that previously
23:04:14 <AnMaster> like more than 1/3 of cfunge size
23:04:30 <AnMaster> iirc cfunge is ~9000 lines of code
23:04:38 <AnMaster> or maybe 1000, something like that
23:06:28 <AnMaster> Language Files Code Comment Comment % Blank Total
23:06:29 <AnMaster> ---------------- ----- --------- --------- --------- --------- ---------
23:06:29 <AnMaster> Total 112 11941 4914 29.2% 2291 19146
23:06:33 <Deewiant> $ wc -l cfunge/trunk/src/**/*.[ch] | tail -n1
23:06:40 <AnMaster> Language Files Code Comment Comment % Blank Total
23:06:40 <AnMaster> ---------------- ----- --------- --------- --------- --------- ---------
23:06:40 <AnMaster> dmd 61 10462 1833 14.9% 2573 14868
23:06:57 <AnMaster> lib should be semi-counted only
23:07:09 <AnMaster> Deewiant, it isn't mine originally, apart from the mempool stuff
23:07:17 <AnMaster> and some of it is heavily modified
23:07:38 <AnMaster> Total 98 9052 3546 28.1% 1609 14207
23:07:49 <Deewiant> $ wc -l ccbi/src/**/*.d | tail -n1
23:08:07 <Deewiant> $ wc -l ccbi/src/**/*.[dc] | tail -n1
23:08:48 <AnMaster> or is the ccbi zip file outdated?
23:09:05 <AnMaster> btw the mempool stuff: Total 3 240 151 38.6% 71 462
23:09:34 <AnMaster> Deewiant, but to be fair some of that includes other files with different defines multiple times
23:10:03 <AnMaster> (yeah, C lacks templates, sometimes they would be useful)
23:10:37 <AnMaster> Deewiant, when do you switch to hash fallback?
23:11:15 <AnMaster> 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:12:49 <AnMaster> 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 <AnMaster> lots of fudge factors basically
23:14:37 <Gregor> http://codu.org/aforteforpiano/12f.ogg
23:15:20 <Gregor> Perfectly good soundfont.
23:15:34 -!- adam_d has quit (Ping timeout: 265 seconds).
23:15:50 <AnMaster> Gregor, also I didn't like that one very much. Not my type of music.
23:16:11 <Gregor> That's me practicing Chopin for an hour, compressed into one minute :P
23:16:57 <Gregor> Digital piano + ridiculously fast MIDI playback = lawlz
23:17:08 <Gregor> fluidsynth + ridiculously fast MIDI playback = OK :P
23:17:26 <AnMaster> Gregor, how do you mean "lawlz"?
23:17:46 <Gregor> My digital piano gets all flustered when you send it MIDI data too fast.
23:18:51 <olsner> sounds anthropomorphic
23:18:59 <Gregor> I've got to restrict my English a bit X-D
23:19:09 -!- charlesq__ has quit (Quit: Saliendo).
23:19:17 <HackEgo> * 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 <olsner> hmm, perhaps 'virrigt', but that doesn't imply the same kind of agitation
23:21:24 <olsner> bah, deprecate swedish and teach everyone english, this language is too insignificant to motivate keeping it alive
23:21:52 <Gregor> olsner: Swedish is your native language, innit? :P
23:24:34 <Gregor> That is now a Facebook post with every Swedish friend of mine tagged :P
23:26:29 <Gregor> 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 <Gregor> This is only when you send it data crazy-fast, mind.
23:27:14 <olsner> 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 <Gregor> Idonno, aplaymidi is doing whatever aplaymidi does :P
23:27:57 <Gregor> But like I said, this is only crazy-fast, e.g. http://codu.org/aforteforpiano/12f.ogg
23:31:06 <olsner> could be on the aplaymidi side though, filling up an input buffer or whatnot
23:38:38 <olsner> otoh, at 30kbit (which midi appears to be using) you should still be able to send several hundred notes per second