00:03:40 <ehird> would be very simple
00:03:53 <ehird> you can send off an opaque message -- (void *) -- to a process
00:03:53 <calamari> my latop hd was too small to partition, so win95 and linux shared the drive
00:03:59 <ehird> then use poll() or whatever to get a response, async
00:04:14 <ehird> if IO is a process, then all IO becomes async
00:06:14 <calamari> best period 1260 sequence (5 moves): L F' R2 L U'
00:06:40 <ehird> pikhq: p.s. i've seen this passed around http://www.jamesmolloy.co.uk/tutorial_html/index.html
00:06:45 <ehird> maybe better than bran's tutorial
00:08:40 <ehird> pikhq: it seems to be more modern & thorough
00:09:20 <pikhq> Tutorial, shmootorial.
00:09:49 <ehird> pikhq: hey, i haven't seen one "COPY 'N PASTE THIS" in it yet
00:09:59 <ehird> & it has even a chapter on multitasking
00:10:02 <ehird> so i'd say -- worth a look
00:10:12 <oerjan> calamari: i found a wikipedia article on the Rubik's Cube group, but nothing about its largest element order
00:10:23 <ehird> pikhq: heh, the gdt stuff is nice and long
00:10:26 <ehird> & actually explains it ;)
00:10:45 -!- Sgeo has joined.
00:10:48 <calamari> oerjan: I'm having success combining that sequence with color-based turns
00:11:08 <pikhq> ehird: I'm still proud of doing it myself. :p
00:11:09 -!- jix has quit ("CommandQ").
00:11:20 <calamari> oerjan: for example if the upper right color is red, turn the right side
00:12:18 <calamari> oerjan: so far I've gone out to a million iterations and it's not too bad.. right now tweaking it for the most even distribution
00:12:21 <ehird> pikhq: I would still take a look at the stuff there.
00:13:36 <oerjan> you mean it hasn't come back after a million iterations?
00:14:10 <calamari> oerjan: if it had, then the distribution would badly skew
00:14:27 <oerjan> hm wait, are you actually iterating the same exact moves?
00:14:51 <calamari> those 5 moves, plus 1 color based move
00:15:20 <oerjan> no i mean, the color based move does not necessarily repeat after a while
00:15:37 <oerjan> it might not be reversible
00:15:47 <calamari> that's a good thing, isn't it?
00:16:24 <oerjan> i mean you might _never_ get back to the original state
00:16:57 <oerjan> calamari: you should check if any intermediate states repeat
00:17:09 <calamari> but I am not sure how to do that
00:17:15 -!- oklofok has joined.
00:17:32 <calamari> do you know of an algorithm that doesn't use a linear amount of ram?
00:17:44 <oerjan> there's a simple way - you keep the states at time n and 2*n
00:17:56 -!- oklopol has quit (Connection reset by peer).
00:18:33 <oerjan> you can easily calculate those incrementally
00:19:03 <ehird> pikhq: http://www.jamesmolloy.co.uk/tutorial_html/7.-The%20Heap.html this kind of thing jus treminds you that malloc()ing small blocks frequently should probably be considered harmful ;)
00:19:08 <oerjan> (1) put your original state in two variables
00:19:30 <oerjan> (2) do one iteration on the first copy, two iterations on the second
00:19:47 <oerjan> (3) check if they have become equal. if not, go to (2)
00:20:11 <calamari> thank you.. I will do that immediately
00:21:06 <oerjan> this will show if they repeat, although not necessarily the first point at which a repetition occurs
00:21:58 <calamari> is there a name for that algorithm?
00:22:07 <calamari> I'd like to read more about it on wikipedia
00:22:25 <calamari> ahh ok.. well thanks :) it's good
00:30:07 -!- timotiis has quit ("leaving").
00:31:00 <calamari> well it'll have to repeat eventually since there are only ~45-48 bits of state in a rubiks cube
00:31:23 <calamari> but I'm sure that look much less time than 45 bits
00:36:01 <oerjan> sorry, but i just googled for "rubik's-cube period 1260" and the first result contains the text "Maximum order for the Rubik's Cube is known to be 1260".
00:37:34 <ehird> pikhq: Hmm. mallocd.
00:38:11 <ehird> pikhq: mallocd is, of course, started by procd, which while doing the internal book-keeping required to start mallocd, utilizes mallocd to allocate its structures.
00:39:06 <ehird> heh, if mallocd existed:
00:39:28 <pikhq> And I assume you've got mallocd running in ring 1?
00:40:46 <ehird> i'm not sure how you'd send stuff off to the malloc process
00:40:53 <ehird> a normal 'fd' sounds tempting, but somehow wrong :)
00:40:55 <ehird> pikhq: heh, guess so
00:41:02 <ehird> but that recursive dependencys kinda the main nag!
00:41:05 <pikhq> Message-passing, of course.
00:41:22 <ehird> but through which method
00:41:26 <ehird> FDs would be the unixy way
00:42:17 <calamari> oerjan: however that is when applying the algorithm without taking color into account
00:42:19 <ehird> pikhq: e.g., assuming 'write' is the syscall..
00:42:25 <ehird> how do you represent sending over a size_t?
00:42:32 <ehird> since write takes a const void *
00:42:45 <ehird> & you can't reliably cast
00:43:04 <ehird> but anyway, PSEUDOcode for malloc:
00:43:22 <calamari> sorry, what are you guys doing?
00:43:31 <calamari> looks like an operating systems class in here
00:44:03 <ehird> calamari: pikhq's writing a little kernel
00:44:07 <ehird> i'm throwing around batty ideas
00:44:27 <ehird> calamari: that's his intention
00:44:38 <oerjan> calamari: yeah. i think if you have a sufficiently complicated test you should be able to take a tour around the longest path of the _graph_ of the cube, which surely must be longer
00:45:02 <oerjan> (graph of configurations)
00:45:31 <calamari> yeah I figure there's no algorith that'll result in every combination being used in the sequence
00:45:37 <ehird> pikhq: http://www.exclaim-project.org/ I would admire the progress on this toy OS if the creator didn't take it so ?$()%@?! seriously
00:45:59 <ehird> He seriously thinks that some day not far from now it could be actually used on real systems in place of linux
00:46:24 <oerjan> calamari: that's essentially the question of whether the configuration graph has a hamiltonian path
00:47:24 * oerjan wonders if that is even known, this being NP-complete to check and all
00:47:50 <ehird> pikhq: ah, i know how mallocd could exist
00:47:58 <ehird> the kernel 'pretends' to be multiple processes
00:48:01 <ehird> procd, mallocd, etc
00:48:09 <ehird> they act just like regular, good ol' fashioned processes
00:48:19 <ehird> but they're actually coupled into the kernel core, because well -- they are core
00:49:22 <calamari> oerjan: thanks for all the help with this :)
00:49:55 <Sgeo> Is there a point to Exclaim?
00:50:38 <Sgeo> what's mallocd?
00:52:32 <Sgeo> WHY would there be a malloc daemon?
00:52:45 <ehird> Sgeo: You didn't even know what malloc was before I told you.
00:52:52 <ehird> I don't think you really should be questioning things like that ;)
00:53:07 <ehird> However, mallocd may be a bit overkill, but still pretty awesome.
00:53:34 <Sgeo> Make all library stuff a separate process while we're at it!
00:53:53 <pikhq> Sgeo: Welcome to microkernel.
00:54:27 <pikhq> calamari: Actually, my plan is to just provide enough syscalls to easily port over some good library.
00:54:37 <pikhq> (POSIX/C library, of course)
00:54:56 <ehird> pikhq: There's a nice one of them specifically deisgned for hobby OSes
00:55:02 <calamari> who was talking about newlib the other day?
00:56:19 <ehird> pikhq: Here you go
00:56:19 <ehird> http://sourceforge.net/projects/pdclib
00:56:26 <ehird> Plus it's public domain-ey-ness.
00:56:35 <ehird> And the configuration to bind it into your kernel is really simple.
00:57:21 <Sgeo> How does one go about making a kernel?
00:57:31 <ehird> Sgeo: Oh god, please don't.
00:57:31 <pikhq> With much pain and agony.
00:57:42 <pikhq> If you don't grok C, don't bother.
00:57:46 <ehird> I do *not* want to have to support the design desicions of Sgeokern.
00:57:48 <calamari> not that much pain or agony.. depending on the kernel :)
00:57:55 <pikhq> if lgdt [eax] makes you run in fear, then don't.
00:57:58 <ehird> pikhq: C knowledge is hardly enough; you need to know quite a bit about how the actual machine works..
00:58:08 <pikhq> calamari: He doesn't use C, as far as I know.
00:58:08 <ehird> for various values of 'quite a bit'
00:58:14 <Sgeo> I guess Python doesn't cut it
00:58:22 <calamari> pikhq: ahh that's right .. hehe
00:58:24 <ehird> Sgeo: What lead you to make that deduction?
00:58:32 <ehird> Sheer cunning intellect? :-)
00:58:33 <calamari> although my BOS kernel was written in x86 asm
00:58:33 <pikhq> ehird: True, but if you don't know C, then you *don't* know enough about how the machine works.
00:58:40 <ehird> pikhq: Quite true.
00:58:46 <Sgeo> Although, why can't Python be compiled into x86 instructions?
00:58:53 <pikhq> calamari: Okay, if you write it in assembly, you've *proven* that you know enough.
00:58:55 <ehird> Sgeo: that wouldn't help
00:59:00 -!- sebbu has quit ("@+").
00:59:01 <ehird> you still need lower-level access than python exposes
00:59:07 <ehird> plus, python is pretty uncompilable
00:59:12 <pikhq> Sgeo: How would you make Python write to an arbitrary address?
00:59:14 <ehird> youd just compile it down to some vm opcodes, basically.
00:59:21 <ehird> it's just too dynamic.
00:59:35 <ehird> besides, if you DO do that, AND then strap on the low-level tweaks into python..
00:59:41 <ehird> you've just lost any advantage of python and made it a pain.
00:59:49 <ehird> there's a reason C is so close to the metal in all aspects. :)
00:59:54 <pikhq> And you would've spent less time learning C and assembly.
01:00:11 <ehird> Also, if you're doing kernel C you learn to be edgy.
01:00:31 <ehird> In Python code, you just throw anything around and the gc will mostly make everything go peachy in the end.
01:00:33 <Sgeo> Are there other C-likes that are easy like Python, but still compilable and can access low-level stuff?
01:00:38 <ehird> Whereas in a kernel...
01:00:38 <calamari> pikhq: so are you planning on using newlib then? probably a gcc compiled for it so you don't have to go through that pain
01:00:54 <pikhq> calamari: Probably.
01:00:56 <ehird> 'I want to write a kernel!! But that low-level stuff frightens and confuses me, so I don't want to really learn it.'
01:01:03 <pikhq> Compiling GCC for it is *not* that big of a deal. . .
01:01:11 <ehird> pikhq: check out pdclib!
01:01:21 <pikhq> (Setting up a Hurd cross-dev environment? *shudder*)
01:01:51 <pikhq> Sgeo: Sure there is. It's called *C*.
01:02:31 <calamari> I forget the compiler option used for compiling kernels
01:02:36 <Sgeo> Doesn't at least some of the ker.. no, I guess you write in C, compile it on an already-made system, and it works as a kernel, and you could possibly compile the source on that kernel now that exists
01:02:38 <ehird> pikhq: But C is haaaard! Let's go shopping.
01:03:15 <ehird> calamari: that's a meme :)
01:03:24 <pikhq> Sgeo: Yes, at least some of the kernel needs to be in assembly.
01:03:36 <calamari> ehird: you didn't know C at one time too.. hehe
01:03:57 <Sgeo> ..but why? Can't C be compiled into x86? Isn't that why C is used?
01:03:57 * pikhq looks at gdt_asm.s. . .
01:03:59 <ehird> calamari: No actually
01:04:04 <ehird> I learned C before my conception
01:04:11 <ehird> God gave me the power as soon as I was formed
01:04:12 <pikhq> Sgeo: Because C doesn't expose *everything*.
01:04:19 <calamari> ehird: what was your return code when you came out ?
01:04:22 <pikhq> Like, say, the registers. ;)
01:04:23 <ehird> Aborting me would be a henious crime indeed, because all my genius was already there!
01:04:43 <oerjan> calamari: in http://www.math.niu.edu/~rusin/known-math/00_incoming/dirac Chip Eastham makes an educated guess that the graph does not have a hamiltonian path
01:04:56 <pikhq> I'm curious, though. . . Would it be possible, or even *sane*, to implement my asm_gdt_load function via just some inline assembly?
01:05:05 <ehird> calamari: No. Every digit.
01:05:08 <Sgeo> Do you need direct access to registers to make a kernel?
01:05:09 <ehird> The truly godly type!
01:05:14 <calamari> ehird: you need to go back to C class
01:05:22 <ehird> Sgeo: You need direct access to *everything*
01:05:33 * Sgeo doesn't quite see why..
01:05:37 <ehird> If the thing at the root of your system doesn't access every part, what are they going to do? sit around being bored? :)
01:06:18 <ehird> Nature's 4-day harmonious time cube allowed me to do it.
01:06:35 <ehird> People who say that the real pi cannot be a return value are educated stupid!
01:07:11 <pikhq> Base pi, of course.
01:07:16 <Sgeo> Although I guess the libc needs to be partially in asm.. although what if libc is compiled with another libc, then once that preliminary version is done, compile it with itself?
01:07:19 <oklofok> lol, #awesome is being invaded by people, apparently related to a project called awesome :P
01:07:54 <pikhq> Sgeo: I can make *libc* without assembly.
01:08:17 <pikhq> Assuming that my syscall interface has a function entering the kernel at a specified address. . .
01:08:40 <GregorR> If I made a project called libjesus, I'll bet I could protest FreeNode and take over #jesus .
01:08:48 <Sgeo> Anyways, are people here going to test PSOX 1.0b1 when it comes out?
01:08:52 <ehird> Sgeo: libc is basically all in C
01:09:07 <ehird> 's the *C library*
01:09:09 <pikhq> Then, I need only do (kernel_entry)(syscall, args);
01:09:10 <calamari> GregorR: just make sure it's your project otherwise you'll only get ##jesus :(
01:09:20 <pikhq> ehird: It sometimes has inline assembly.
01:10:03 <calamari> hmmm... actually that means the current channel should be ## too
01:10:06 <pikhq> Specifically, asm("foo. . ." /* Load args to the syscall in registers.*/ "int $0x80" /* Enter the kernel. */);
01:11:23 <ehird> but once we get irc.eso-std.org ;)
01:12:00 <Sgeo> Does anyone in here besides myself even care about PSOX?
01:12:02 <ehird> # is a valid channel name!
01:12:03 <ehird> it works, it exists.
01:12:17 <oklofok> Sgeo: i mostly care about your mother, tbh
01:12:22 <ehird> Sgeo: More people did before you started whining about how nobody cares about it and bothering everyone about that fact :-D
01:13:02 <calamari> Sgeo: well, I thought I'd try to be interested, but you shot down every one of my ideas and suggestions without giving them a moment's though.. so yeah then I lost interest.. oops :)
01:13:34 <Sgeo> calamari, um.. oO log link?
01:13:44 <oklofok> calamari is one bitter bitch
01:14:08 <calamari> oklofok: people try to eat me, so I became bitter to dissuade them
01:14:10 <ehird> calamari: so true, so true
01:14:44 <ehird> Sgeo should learn to phrase his questions as 'anyone want to reaffirm the way i'm doing this?' :)
01:14:52 * oerjan notes that neither #islam, #muhammed nor #buddha exist...
01:15:27 <oklofok> this is fun, i went to sleep at about 22.00 so that i could wake up early...
01:15:34 <ehird> [00:15] * Cannot join #christian (Channel is invite only).
01:15:37 <ehird> is that appropriate for freenode
01:16:06 <ehird> [00:15] * You have left channel #anus (requested by ChanServ: "GODDAMNED*WANKERS")
01:16:10 <ehird> i wanted to be in anus
01:16:38 <Sgeo> <calamari> I think I made a comment about it needing and/or/xor
01:17:24 * oerjan imagines GregorR going to protest #jesus and Freenode staff answering, "Oh no, the channel owner gave us conclusive proof that he is representing Jesus. Unfortunately we are not at liberty to disclose it" :D
01:17:28 <Sgeo> What else did you suggest?
01:18:53 * Sgeo pokes calamari
01:19:05 <ehird> Sgeo: that kind of incessant prodding is why people have been ignoring psox
01:19:10 <ehird> can't you be .. a little more patient?
01:19:55 <ehird> KjSDKLFjsdf;jsdjsdfsdfsdf
01:20:32 <Sgeo> Hm, a discussion about the LNUM/LBYTES format
01:21:04 <Sgeo> between myself and calamari
01:21:41 * oerjan pokes calamari with some salt and pepper, and olive oil
01:22:02 <Sgeo> http://bespin.org/~nef/logs/esoteric/08.02.17
01:23:35 * pikhq realises that it is possible to implement *hard links* using FAT.
01:24:03 <ehird> fat is not a REAL MAN
01:32:53 <calamari> pikhq: I want driectory hard links :P
01:33:27 <ehird> pikhq: what about a file system whose structure is a filesystem
01:33:28 <calamari> I use mount --bind for that now.. so never mind :)
01:33:30 <ehird> not an opaque amount of bits
01:33:33 <ehird> ditto for that one
01:33:37 <ehird> turtles, down, all the way
01:33:58 <calamari> ehird: need a base case to end the recursion
01:34:04 <ehird> calamari: nonsense
01:34:08 <ehird> just use an infinity machine
01:34:20 <oerjan> the empty system, of course. if it works for ZFC...
01:34:21 <ehird> the #1 preferred platform of choice for turtle-system designers & implementers
01:34:32 <ehird> Infinity machine: http://www.chiark.greenend.org.uk/~sgtatham/infinity.html
01:35:01 <oklofok> hmm, has anyone coded the empty os yet?
01:35:02 <ehird> If endeavour was written, I'd pronounce that as '@what infinity machine=http://www.chiark.greenend.org.uk/~sgtatham/infinity.html'
01:35:15 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
01:35:33 <oklofok> that would be ...well, awesome
01:35:36 <oerjan> oklofok: it was coded by Zen Buddhist monks in the early 9th century
01:36:08 <oerjan> they didn't need to invent hardware for it, since it was empty.
01:36:24 <ehird> oh, and if i ever decided i was pasting '@what infinity machine' to people too much after mentioning it,
01:36:27 <ehird> i'd do something like:
01:36:42 <ehird> '@counter infinity machine=@what infinity machine'
01:36:47 <ehird> where @counter msg=cmd
01:36:57 <ehird> means 'whenever i say something which contains msg, run cmd.'
01:37:01 <calamari> need to make an ipod shuffle os
01:37:14 <ehird> calamari: no uclinux support
01:37:21 <GregorR> Somebody should make an emulator for the infinity machine that always displays just how much slower than realtime it's going :P
01:37:30 <calamari> ehird: yeah.. guess I need the compiler first don't I
01:38:30 <calamari> pikhq: linux boots slow on my ipod video.. at least make yours boot really fast :)
01:38:54 -!- Sgeo has joined.
01:38:59 <ehird> you know what a really good infinity machinie program would be?
01:39:07 <Sgeo> What did I miss?
01:39:11 <ehird> one that somehow interacted with a normal webserver machine
01:39:21 <ehird> it would accept programs
01:39:28 <ehird> check them for safety
01:39:31 <ehird> then send it off to the infinity machine
01:39:37 <ehird> which would run them
01:39:42 <ehird> and then send its computation result over the wire
01:39:45 <ehird> back to the browser
01:39:56 <ehird> also a web service with api bindings to most langauges
01:40:03 <ehird> infinite computing made easy, for everyone!
01:40:25 <ehird> and since it can speed everything up infinitely, it will only EVER take about a millisecond more than the network lag for any computation
01:41:40 <ehird> GregorR: to be honest
01:41:45 <ehird> if you have a web server
01:41:48 <ehird> and an infinity machine
01:41:52 <ehird> it would be a few weeks project
01:42:07 <ehird> safety checking -- the infinity machine would probably have stuff for that anyway, see the article
01:42:30 <GregorR> My last statement was what we in the biz call "sarcasm"
01:42:34 <ehird> so, all it has to do is splice in 'infinity's at every step possible, so that even non-'infinity'-using code will run fast
01:42:39 <ehird> GregorR: Still. :p
01:43:30 -!- bsmntbombdood has quit (Read error: 110 (Connection timed out)).
01:44:06 <ehird> GregorR: Would be pretty useful.
01:44:07 -!- bsmntbombdood has joined.
01:44:14 <ehird> Especially since you'd only ever need a one function api.
01:44:27 <Sgeo> hi bsmntbombdood
01:44:32 <ehird> an optionally a 'cluster' thingy
01:44:40 <ehird> to specify a custom infinity machine
01:47:13 <ehird> procd handles sending messages to procs
01:47:16 <ehird> but it does this through a message
01:47:24 <ehird> > solve(CONUNDRUM);
01:48:36 <pikhq> Your kernel would need to handle the message-passing system.
01:48:59 <ehird> pikhq: But the kernel only manifests itself in the multiple processes it pretends to be.
01:50:05 -!- CakeProphet has quit ("haaaaaaaaaa").
01:50:06 <ehird> pikhq: Well, messaged would just essentially split up about 2 parts of procd for no reason and retain the same problem
01:50:22 <ehird> I guess I could have TWO primitives..
01:50:29 <ehird> That is, the send, and the async-get-response
01:50:37 <oklofok> who here linked the bogosort paper?
01:50:43 <ehird> pikhq: Of course when programming an app you shouldn't worry about any of this stuff
01:50:45 <pikhq> And optimise the fuck out of that.
01:50:48 <ehird> pikhq: it's low level, behind the scenes stuff
01:51:04 <ehird> #include <myos/internal/message.h>
01:51:08 <ehird> and they'll haev names like
01:51:24 <ehird> the trailing underscore means BEWARE
01:51:37 <ehird> but yeah, in most apps you'll just use everything like normal.
01:51:56 <ehird> except that if you want to use asynchronous IO you can use the stadard posix interfaces with one difference..
01:52:06 <ehird> everything will seem a lot snappier, because in the background, that's what its doing natively :)
01:54:03 <ehird> it will include a user-level version of that message passing stuff
01:54:15 <ehird> to make asynchronous server and client programming <3, even in C
01:54:20 <ehird> pikhq: awesome idea, or pwnsome idea?
01:54:33 <ehird> and ofc you could easily port the api to an inferior OS by emulating the ipc interface it uses :)
01:56:31 <ehird> pikhq: hmm, i think the main user-level interface will be this
01:56:51 <ehird> better post an example
02:00:28 -!- olsner has quit ("Leaving").
02:03:31 <ehird> http://pastebin.ca/935965 actually nice-looking event based programming thingy in c
02:04:28 <ehird> need a null terminator there
02:05:10 <ehird> pikhq: new - http://pastebin.ca/935970
02:06:00 <ehird> typedef struct {char *name; size_t ac; void *fp;} LWmessage_t;
02:06:07 <ehird> i wish i could give you a scary funcptr type
02:06:12 <ehird> but that's all that iwll work :)
02:07:38 <ehird> pikhq: I like my cheap interning trick though
02:12:58 <ehird> const *const is a valid type on c
02:14:59 <oerjan> defaults to int perhaps?
02:15:09 <oerjan> like short int = short
02:19:21 <pikhq> And const = const int.
02:30:43 <Sgeo> And I really should be doing homework
02:36:41 -!- ehird has quit ("This computer has gone to sleep").
02:38:06 -!- oerjan has quit ("leaving").
02:44:16 -!- Sgeo has quit (Remote closed the connection).
02:45:11 -!- Corun has quit (Read error: 110 (Connection timed out)).
02:47:53 -!- Sgeo has joined.
03:00:30 <oklofok> i just realized the translation of "windows for workgroupsversion 3.11" on my old comp was wrong
03:01:25 <oklofok> also, i need a better keyboard
03:33:49 -!- Sgeo has quit ("Ex-Chat").
03:34:09 -!- Sgeo has joined.
03:41:51 <lament> wow, spacewar on PDP-1 actually looked really pretty.
03:41:52 <lament> http://en.wikipedia.org/wiki/Image:Spacewar%21-PDP-1-20070512.jpg
03:44:51 <pikhq> Well, of course. The PDP1 wasn't this piece of crap that we have on our desks. . .
03:45:10 <pikhq> Oh, you meant it actually *looked* pretty, not that its code was elegant.
03:56:02 <lament> compare with http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/KSpaceDuel1.1.png/800px-KSpaceDuel1.1.png
04:13:32 -!- AnMaster has quit (Connection timed out).
04:14:34 -!- AnMaster has joined.
04:20:39 -!- calamari has quit ("Leaving").
04:23:40 -!- calamari has joined.
05:16:56 -!- Sgeo has quit ("Ex-Chat").
06:48:36 -!- calamari has quit ("Leaving").
07:51:16 -!- BMeph has quit ("calls it a night").
07:59:59 -!- clog has quit (ended).
08:05:29 -!- clog has joined.
08:05:29 -!- olsner has joined.
09:23:38 -!- oerjan has joined.
09:48:57 -!- olsner has quit ("Leaving").
09:53:05 <slereah__> http://obsoleteskills.com/Skills/Skills
10:14:42 -!- faxathisia has quit ("If there are any aliens, time travellers or espers here, come join me!").
10:18:10 -!- AnMaster has quit (Connection timed out).
10:19:31 -!- AnMaster has joined.
10:41:48 -!- puzzlet has quit (Remote closed the connection).
11:06:01 -!- Xion has joined.
11:06:43 <Xion> Carlos Castaneda rulezZ
11:08:35 * oerjan informs Xion that #esoteric is about esoteric programming languages. Our topic has just been a bit anarchic of late.
11:10:10 <slereah__> Although it doesn't mention castenada
11:13:46 -!- Xion has left (?).
11:32:57 <oerjan> now excuse me while i go to refill my Qi...
11:33:00 -!- oerjan has quit ("leaving").
14:18:20 -!- Corun has joined.
14:24:51 -!- timotiis has joined.
14:43:48 -!- atsampso1 has quit (Read error: 113 (No route to host)).
15:26:14 -!- Corun has quit ("This computer has gone to sleep").
15:38:28 -!- RedDak has joined.
16:11:31 -!- faxathisia has joined.
16:12:42 -!- BMeph has joined.
17:04:49 -!- sebbu has joined.
17:08:57 -!- RedDak has quit (Remote closed the connection).
17:15:22 -!- timotiis has quit (Read error: 104 (Connection reset by peer)).
17:33:59 -!- ais523 has joined.
17:34:38 <ais523> slereah__: INTERCAL's unary operators work by opping the number and the number rotated to the left
17:34:56 <ais523> e.g. #V2 is #6 (...0010 or ...0100)
17:43:47 -!- Tritonio_ has quit (Remote closed the connection).
17:50:17 -!- timotiis has joined.
18:26:53 -!- boily has joined.
18:28:12 -!- boily has quit (Client Quit).
18:40:45 <lament> is there a programming language with macros that are easy to write?
18:46:04 <ais523> lament: depends on what you mean by "macros"
18:46:13 <ais523> and "easy to write", for that matter
18:46:47 <lament> well, i'm looking at scheme and CL macros...
18:46:52 <lament> and they just seem way too complicated
18:46:57 <lament> to actually use extensively
18:47:17 <lament> unlike scheme and lisp, which are nice languages, scheme and lisp macros are not nice languages.
18:47:49 <lament> i'd rather do my pattern matching and substitution with some other, better-suited tool.
18:47:50 <ais523> lament: you could use m4
18:47:58 <ais523> although it's not all that easy to write due to issues with nested quoting
18:48:11 <ais523> (it's a TC language based entirely on macros, and almost an esolang)
18:48:39 <lament> yeah, i know about m4, but it seems a good macro system should be aware of the syntax of the language (as it is in lisp)
18:49:39 <lament> i guess the real problem is that each macro definition is a compiler
18:49:58 <lament> and to write a lot of compilers you want a very powerful language
18:50:23 <lament> which syntax-rules doesn't strike me as :)
18:51:45 <ais523> ISTR there was an assembler which used Brainfuck as a macro language
18:51:52 <ais523> but I'm pretty sure it was an esolanger who wrote it
18:53:18 <lament> oh, i actually haven't looked at r6rs macros
18:54:49 <lament> (r6rs seems pretty cool...)
19:03:16 -!- ais523 has quit ("Moving to a different connection.").
19:13:38 -!- ais523 has joined.
19:19:36 -!- jix has joined.
19:48:26 <AnMaster> /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../include/d/4.1.2/tango/core/Array.d:141: Error: cannot implicitly convert expression ('\xff') of type char to char[1LU]
19:48:26 <AnMaster> /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../include/d/4.1.2/tango/core/Array.d:152: Error: cannot implicitly convert expression ('\xff') of type char to char[1LU]
19:48:54 <AnMaster> ccbi/mini/funge.d: In function 'loadMiniFunge':
19:48:54 <AnMaster> ccbi/mini/funge.d:103: error: conversion to non-scalar type requested
19:49:16 <Deewiant> the former sounds like a tango problem
19:49:49 <AnMaster> Deewiant, I can't change gdc version
19:49:58 <Deewiant> I haven't tested tango 0.99.5, can't guarantee that will work
19:50:07 <AnMaster> Deewiant, what one have you used then?
19:50:17 <AnMaster> gcc (GCC) 4.1.2 20070214 ( (gdc 0.24, using dmd 1.020)) (Gentoo 4.1.2 p1.0.2)
19:50:23 <Deewiant> like it says on the page, tango 0.99.4
19:50:30 <Deewiant> there's a note about that on the page as well
19:50:44 <AnMaster> "If you’re using GDC 0.24, you’ll need to make a slight change in utils.d for compilation to work, replacing the line:" <-- that one
19:50:45 <Deewiant> yeah, it looks like the same change has to be done in mini/funge.d
19:52:00 <AnMaster> Deewiant, and the tango thing? downgrading is not an option, I got other apps needing the latter version
19:52:39 <ais523> lament: good to hear it
19:52:44 <Deewiant> AnMaster: I think that's your only option. there's nothing in my code that uses tango.core.Array so it's a problem within Tango
19:52:45 <ais523> just out of interest, did you already know vi?
19:52:58 <Deewiant> AnMaster: or rather, the problem is that your version of GDC is too ancient for Tango
19:53:01 <lament> i predict i'll learn emacs for about 5 minutes, then stop
19:53:50 <ais523> lament: you can get by with the arrow keys and backspace (or C-f C-b C-n C-p C-d if your terminal is really old)
19:54:04 <AnMaster> Deewiant, I can't find 0.99.4 anywhere
19:54:17 <Deewiant> AnMaster: http://www.dsource.org/projects/tango/wiki/PreviousReleases
19:54:21 <lament> ais523: i know, but everything else seems really difficult
19:54:25 <ais523> but you only really get the gain over GUI editors when you learn some of the more useful shortcuts; C-s and C-M-% are good ones
19:54:43 <ais523> lament: the docs give a misleading view of what it's like, in my mind
19:54:52 <ais523> because different people use different shortcuts
19:55:02 <lament> ais523: a lot of the time, a list of completions appears in a different window and it's so many keystrokes to switch to that window, select an appropirate completion and switch back. Is there a fast way to do that?
19:55:20 <ais523> lament: type the first letter that you haven't written so far and hit tab again
19:55:26 <ais523> it's bolded in recent versions
19:55:46 <ais523> (if that isn't unique, then you type another letter and so on)
19:56:21 <lament> they're not completions sometimes
19:56:36 <lament> like when you want to switch to another buffer (C-x C-b)
19:56:45 <lament> you get a list of buffers, itself in another window
19:57:05 <ais523> lament: C-x C-b is different from C-x b
19:57:18 <ais523> one puts up the list, the other lets you tab-complete the name on the minibuffer line
19:57:27 <ais523> (unfortunately, I can never remember which is which)
19:57:39 <lament> i'd like both at once, of course
19:57:46 <lament> show a list of all buffers, and tab-complete the name
19:58:19 <ais523> lament: go to the minibuffer-entry version, then hit tab twice
19:58:27 <ais523> that puts up a list of things for everything that tab-completes
19:59:01 -!- atsampson has joined.
19:59:06 <AnMaster> Deewiant, that older tango fails to build
19:59:11 <AnMaster> warning - gcx.d:319: Error: implicit conversion of expression ((p - *(pool + 0LU)) / 1L / 16L) of type long to uint can cause loss of data
19:59:53 <Deewiant> or the latest SVN version of GDC
20:00:12 <AnMaster> Deewiant, then I'd rather skip ccbi, *shrugs*
20:00:31 <AnMaster> and this tango thing doesn't even want to install to a prefix
20:00:44 <Deewiant> I don't know about tango, join #d.tango and complain
20:00:56 <Deewiant> it works for me using DMD just fine
20:00:59 <AnMaster> Deewiant, I'm writing a conformat c one :)
20:01:23 <AnMaster> already GOOD up to k test, k is not yet implemented
20:02:14 <AnMaster> http://rafb.net/p/Y44uBK56.html
20:02:24 <AnMaster> started coding on it yesterday
20:03:01 <AnMaster> Deewiant, I have some issues with finding a sparse matrix library or something for C though
20:03:23 <AnMaster> currently I just allocate a rather large array and use an abstraction so it should be easy to replace with something sane later
20:05:31 <ais523> AnMaster: http://pastebin.ca/936934 is the changes I had to make to ccbi to get it to run under gdc
20:05:43 <ais523> (mostly on Deewiant's guidance)
20:07:21 <ais523> diff -r ccbi_src/fingerprints/rcfunge98/base.d ../ccbi_fixed/fingerprints/rcfunge98/base.d
20:07:31 <ais523> sorry, missed it off my copy&paste somehow
20:07:38 <Deewiant> ais523: I've since changed that code so it no longer uses tango.core.Array
20:07:56 <Deewiant> but hmm, I'm getting this tango error with DMD on Linux myself
20:08:12 <AnMaster> Deewiant, with the current tango? heh
20:08:42 <Deewiant> AnMaster: not sure which version it is, SVN HEAD from a few weeks back i think
20:09:04 <Deewiant> I think I know what could cause it but I'm not sure how to fix it
20:16:02 <AnMaster> Deewiant, should k work on z btw?
20:16:25 <AnMaster> but when looking at CCBI source it looks like it ignores z too?
20:16:35 <AnMaster> the specs aren't clear on that point
20:17:08 <Deewiant> well, it ignores z because it doesn't matter
20:17:16 <Deewiant> but it only reflects on space and ; IIRC
20:17:17 <AnMaster> it does when concurrent doesn't it?
20:17:37 <AnMaster> if (i == ' ' || i == ';' || i == 'z')
20:17:45 <AnMaster> looks like it doesn't reflect on either?
20:17:50 <Deewiant> AnMaster: you got that tango.core.Array problem with the latest tango (0.99.5) correct?
20:18:00 <AnMaster> Deewiant, indeed it was 0.99.5
20:18:03 <Deewiant> doesn't matter, the spec is so unclear
20:19:42 <Deewiant> I got a minimal sample which doesn't compile due to that error
20:20:01 <Deewiant> I'll see if it's fixable or a bug
20:25:07 <Deewiant> looks like it's an ages-old compiler bug which everybody hates but for some reason has never been fixed
20:25:26 <AnMaster> so what will you do, if it affects both gdb and dmd?
20:25:45 <Deewiant> the problem is that I'm calling "tango.text.Regex.find"
20:25:51 <AnMaster> send me a patch for ccbi when you fixed it
20:25:57 <Deewiant> but there's no function called 'find' in that module any moore
20:26:10 <AnMaster> so why don't it report that error instead?
20:26:22 -!- olsner has joined.
20:26:24 <Deewiant> tango.text.Regex privately imports tango.core.Array
20:26:42 <Deewiant> this should mean that trying to call regex.find would fail since there is no find
20:27:05 <Deewiant> but due to the private import and the age-old bug, which is that fully qualifying names like that ("regex.find" as opposed to just "find") bypasses private imports, it tries to call tango.core.Array.find
20:27:11 <Deewiant> and, of course, fails since the param types don't match
20:27:34 <Deewiant> reported it myself, about 20 months ago
20:27:40 -!- Corun has joined.
20:28:00 <Deewiant> ah well, so what I need to do is figure out the right way of doing regex matching with the new tango.text.Regex
20:30:46 <Deewiant> AnMaster: there's a function called 'help' in ccbi.d
20:30:56 <Deewiant> replace its definition with the following
20:30:59 <Deewiant> static bool help(char[] s) { return (regex.Regex("^(--?|/)([?]|h(e?lp)?)$", "i").test(s)); }
20:31:26 <Deewiant> it compiles, but doesn't work :-P
20:31:49 * AnMaster is trying to get the darn k to work
20:31:59 <AnMaster> Deewiant, ccbi is "gpl 2 or later" right?
20:32:45 <AnMaster> I just need to read your code to understand how k should work
20:33:28 <AnMaster> the bit about moving if executing k did move it is complex
20:33:45 <Deewiant> and that's the main reason why I didn't implement nested k
20:33:45 <AnMaster> if (ip.x == x && ip.y == y && ip.dx == dx && ip.dy == dy)
20:34:03 <AnMaster> Deewiant, mine will reflect on nested k, and print a warning
20:34:22 <AnMaster> (with warnings enabled that is)
20:34:50 <Deewiant> mine just does something random :-)
20:35:22 <AnMaster> I try to make all undefined cases sane and also clean up the standard at the same time
20:35:28 <Deewiant> AnMaster: I pastebinned the nested k stuff last time, so you can have a look-see there too
20:35:29 <AnMaster> still waiting for answer on that though
20:35:44 <AnMaster> Deewiant, yes I did, and your code really makes it much clearer
20:35:52 <AnMaster> and I'm not going to do nested k
20:36:33 <ais523> AnMaster: if you reflect on nested k, wouldn't it be possible to form an infinite loop by jumping into the middle of three ks?
20:36:34 <Deewiant> that scope(exit) stuff is why it's tricky to get stuff like 4k] right as well
20:36:36 * AnMaster notes all instructions apart from k are inlined into the case blocks for the instructions in ExecuteInstruction function
20:37:13 <AnMaster> ais523, then it's a problem of the programmer IMO
20:37:13 <ais523> not that 111#kkk is particularly useful, anyway
20:37:15 <Deewiant> AnMaster: okay, it seems that the fact it doesn't work is a problem on my end (not using 0.99.5), try what I said earlier
20:37:42 <Deewiant> ais523: at that point it's prudent to ask "what did you expect?" :-)
20:37:47 <AnMaster> ccbi/stdlib.d:238: function ccbi.stdlib.RawCoutFilter!(false).RawCoutFilter.write of type ulong(void[] src) overrides but is not covariant with tango.io.Conduit.OutputFilter.write of type uint(void[] src)
20:37:47 <AnMaster> ccbi/stdlib.d:238: function ccbi.stdlib.RawCoutFilter!(false).RawCoutFilter.write function write does not override any
20:37:47 <AnMaster> ccbi/stdlib.d:386: template instance ccbi.stdlib.RawCoutFilter!(false) error instantiating
20:38:35 <Deewiant> AnMaster: my function returns ulong while the library function returns uint or vice versa
20:39:01 <Deewiant> this is due to the fact that you're on x86_64
20:39:28 <AnMaster> Deewiant, don't you have some intptr_t or such for your pointers? :P
20:39:40 <AnMaster> so you can always get the same type as standard libraries
20:39:51 -!- fizzie has quit (Read error: 60 (Operation timed out)).
20:39:59 <Deewiant> AnMaster: but it appears the code uses uint :-P
20:40:06 <Deewiant> I just assumed it would be size_t
20:40:17 <Deewiant> AnMaster: just change the return type of write from size_t to uint
20:40:25 <AnMaster> Deewiant, where should I do so?
20:40:44 <Deewiant> AnMaster: ccbi/stdlib.d:238 as it says :-)
20:40:46 <AnMaster> Deewiant, btw rebuild failed to build until I did: ln -s . ccbi
20:41:05 <Deewiant> AnMaster: yeah, because I'm an idiot and packaged the code under ccbi_src directory instead of ccbi
20:41:10 <Deewiant> AnMaster: I noticed that myself :-)
20:42:06 <AnMaster> obj/ccbi.ccbi.o: In function `_Dmain':
20:42:06 <AnMaster> ccbi.d:(.text+0x711): undefined reference to `_D5tango4core9Exception24IllegalArgumentException7__ClassZ'
20:42:06 <AnMaster> ccbi.d:(.text+0x72c): undefined reference to `_D5tango4core9Exception24IllegalArgumentException5_ctorMFAaZC5tango4core9Exception24IllegalArgumentException'
20:42:43 <ais523> AnMaster: are you recursing into the source directories, and linking tango?
20:42:59 <GregorR> WTF? I click off of a D channel, and find D talk.
20:43:00 <ais523> I had that sort of error when I built, due to only linking files in the main src directory
20:43:03 <Deewiant> and it outputs a six-line command line when it tries to build?
20:43:09 <AnMaster> I installed tango following http://dsource.org/projects/tango/wiki/UnixInstallGdc
20:44:01 <AnMaster> now it says: ccbi.d(19): module instructions cannot read file 'ccbi/instructions.d'
20:44:14 <Deewiant> AnMaster: i.e. a huge "gcc tango/core/Exception.d" etc.
20:44:14 <AnMaster> oh wait it removed the symlink
20:44:51 <Deewiant> AnMaster: did you see the "Troubleshooting" section on that page?
20:44:56 <GregorR> May I ask: Since when do so many people in #esoteric use D?
20:45:05 <Deewiant> GregorR: only I do, and people can't get stuff to compile :-P
20:45:07 <ais523> GregorR: it's the language in which CCBI was written
20:45:24 * GregorR strokes his nonexistent beard.
20:45:37 <Deewiant> GregorR: tango + GDC 0.24 isn't a good combination
20:45:45 <AnMaster> /usr/bin/x86_64-pc-linux-gnu-gdmd
20:45:45 <AnMaster> /usr/x86_64-pc-linux-gnu/gcc-bin/4.1.2/gdmd
20:45:45 <AnMaster> /usr/x86_64-pc-linux-gnu/gcc-bin/4.1.2/x86_64-pc-linux-gnu-gdmd
20:46:03 <AnMaster> /usr/bin/gdmd is some gentoo specific wrapper
20:46:20 <Deewiant> AnMaster: probably the third but I'd check all to be sure
20:47:40 -!- oklofok has changed nick to oklopol.
20:49:44 <AnMaster> if that also fails I guess my gdc install got borked because of tango
20:49:59 <AnMaster> and I'm not going to recompile gcc and gdc
20:50:32 <Deewiant> the binaries are the same, after all
20:51:42 <AnMaster> ar -qsv libtango-cc-tango.a core/BitManip.o core/Exception.o core/Memory.o core/Runtime.o core/Thread.o core/ThreadASM.o stdc/wrap.o stdc/posix/pthread_darwin.o
20:51:42 <AnMaster> ar: creating libtango-cc-tango.a
20:51:42 <AnMaster> ar: core/BitManip.o: No such file or directory
20:51:42 <AnMaster> gmake[1]: *** [libtango-cc-tango.a] Error 1
20:52:03 -!- oerjan has joined.
20:52:22 <AnMaster> look, it replaced libgphobos.a it seems
20:52:48 <AnMaster> it didn't even create a backup
20:52:48 <Deewiant> AnMaster: you can always compile lib/common/core/BitManip.d yourself
20:53:17 <Deewiant> AnMaster: "gdmd -c lib/common/core/BitManip.d" or whatever :-)
20:53:57 <AnMaster> but it cleans it out on a new build
20:55:33 <Deewiant> AnMaster: tell you what, see if http://iki.fi/deewiant/ccbi works for you
20:56:34 <AnMaster> tango.core.Exception.ArrayBoundsException@/u/opi/48/mniemenm/bin/../opt/dmd/import/tango/core/Array.d(2131): Array index out of bounds
20:56:47 <Deewiant> that's because I don't have 0.99.5
20:56:52 <Deewiant> and the trunk I do have is buggy :-P
20:57:08 <Deewiant> well, I guess not since it dies if it gets command line arguments :-)
20:57:12 <Deewiant> I'll get 0.99.5 and build a new one
20:57:16 <AnMaster> $ ./ccbi ~/bashfunge/trunk/mycology/mycology.b98
20:57:17 <AnMaster> tango.core.Exception.ArrayBoundsException@/u/opi/48/mniemenm/bin/../opt/dmd/import/tango/core/Array.d(2131): Array index out of bounds
21:02:07 <AnMaster> yay k works as it should now I just got the f93 space issue (will fix later when I restructure some things) and now:
21:02:07 <AnMaster> Unknown instruction at x=11 y=49: ' (39)
21:02:29 -!- BMeph has quit (Read error: 104 (Connection reset by peer)).
21:03:21 -!- sebbu2 has joined.
21:06:40 <ais523> AnMaster: what lang are you writing the implementation in?
21:06:55 <AnMaster> ais523, C, using several C99 features
21:06:59 <AnMaster> BAD: wraparound with non-cardinal delta doesn't work
21:07:49 <ais523> AnMaster: not really, you just reverse the direction of the pointer, not executing any commands en route, and reverse it again when you hit the edge of the playfield a second time
21:08:25 <AnMaster> ais523, yes, but that is slow and painful, *me is caching edges for each column and row*
21:08:29 -!- SimonRC has quit (Read error: 110 (Connection timed out)).
21:08:46 <ais523> my INTERCAL debugger, for instance, implements the 'set next instruction' command by putting a loop around the program, preventing any commands executing until the right point is reached, and running the program until it reaches the right point
21:08:48 <AnMaster> and then there is the stack stack thingy
21:09:31 <ais523> it's the whole ABSTAIN thing
21:09:43 <ais523> you just need a way to make things tickless (if threading), and to prevent commands running
21:09:51 <ais523> so you have a flag in your interp which makes all commands into NOPs
21:10:10 <ais523> then, every time you hit the playfield edge, you toggle the flag and change the IP direction
21:10:15 <AnMaster> like ipmCODE ipmSTRING and so on
21:10:28 <AnMaster> ais523, yes I know that version
21:11:24 <ais523> you only need to do it for non-cardinal directions
21:11:33 <AnMaster> how on earth to find if this is the edge or not when traveling non-cardinal!
21:11:41 <AnMaster> I can't see how I could find it
21:11:58 <Deewiant> AnMaster: err, referring to CCBI of course :-P
21:12:01 <AnMaster> Deewiant, wgetting same binary?
21:12:12 <Deewiant> appears to work on my end, at least :-)
21:12:52 <AnMaster> Deewiant, also where does one find docs on the official catseye extensions
21:13:05 <AnMaster> reverse engineering your code = not fun
21:13:07 <Deewiant> AnMaster: I believe I linked there last time
21:13:19 <Deewiant> AnMaster: same place as the funge-98 spec, move one directory up
21:13:36 <Deewiant> AnMaster: as in, http://catseye.tc/projects/funge98/
21:14:20 -!- SimonRC has joined.
21:17:02 -!- sebbu has quit (No route to host).
21:17:03 -!- sebbu2 has changed nick to sebbu.
21:17:40 <AnMaster> Deewiant, if you got a matrix that you can acccess using x and y, how would you find edge or not when traveling non-cardinal?
21:18:06 <AnMaster> store some sort of bounding box and reflect only when you hit it?
21:18:14 <AnMaster> err not reflect, but wrap I mean
21:18:38 <ais523> in 2D, if you know for certain you're going non-cardinal, then technically speaking you only need to store the top and bottom
21:18:49 <ais523> because anything that goes off the left or right edge will hit the top or bottom eventually
21:19:01 <ais523> unless it goes directly left or right
21:19:04 <Deewiant> AnMaster: what I do is keep track of min/max X and Y
21:19:26 <Deewiant> AnMaster: which isn't 100% accurate (c.f. the mycology tests on wrap at edge of file/line) but works
21:19:48 <AnMaster> Deewiant, ah, so a kind of bounding box then
21:19:54 <oerjan> AnMaster: check against each edge in turn and drop it down at the one it leaves first, i think
21:20:23 <Deewiant> I think GLfunge98 did something cool, but I can't remember for sure
21:20:24 <AnMaster> right, can't do that though until I get the final fungespace thing to work
21:20:41 <ais523> such as having some 'uninitialised' value on the playfield that magically turns into 32 when you try to read it
21:20:44 <AnMaster> Deewiant, it passes mycology at least
21:20:51 <Deewiant> AnMaster: alright, good enough :-)
21:21:12 <AnMaster> Deewiant, but it isn't 64-bit :(
21:21:23 <Deewiant> don't have a 64-bit machine, sorry
21:21:30 <Deewiant> compile it yourself if that's a problem ;-)
21:21:46 <AnMaster> Deewiant, you know the problems that cause
21:22:06 <Deewiant> AnMaster: AFAIK GDC's 64-bit support is a bit flaky anyway
21:22:30 <AnMaster> anyway I'll fix my fungespace later, I got a abstraction anyway, so it is easy to replace get/set/wrap/loadfile with something else
21:23:02 <AnMaster> because current is just extended 800x2500 array, until I find some sparse matrix that work XD
21:23:38 <AnMaster> (oh and setting -1,-1 would still work, it wraps to positive value, so even if you jumped there, mycology would never know)
21:24:56 <AnMaster> Deewiant, err your y is not correct it seems, it leaves out some utf8 from env variables?
21:25:28 <Deewiant> the envvar support on linux is fairly untested
21:25:29 <AnMaster> LC_ALL=sv_SE.UTF8 one env variable contains a ö
21:25:44 <Deewiant> AnMaster: pipe it to a file and see what comes out at that pos
21:25:46 <AnMaster> Deewiant, you don't run a real OS normally?
21:25:56 <Deewiant> AnMaster: no, I like my computer games :-)
21:26:27 <Deewiant> AnMaster: just nothing? like "aäb" becomes "ab"?
21:26:32 * AnMaster notes CCBI is NOT conforming :P
21:28:26 <AnMaster> Deewiant, if I make a new standard (that is I'm still waiting for answer on my mail about license) I'm going to define all the undefs
21:28:47 <AnMaster> possibly in some cases to other values than what ccbi does, (though I will keep those I find sane)
21:29:23 <ais523> hmm... does anyone here know of a command (preferably POSIX, or something else reasonably available on Linux) that looks for two identical lines in a file, but doesn't need to read in the whole file before it can check?
21:29:58 <ais523> AnMaster: no, the lines needn't be consecutive
21:30:09 <ais523> I'm trying to verify that my infinite loop program is actually working
21:30:09 <AnMaster> ais523, ah like sort -n | uniq -d ?
21:30:46 <AnMaster> <greybot> awk '!seen[$0]++' # Remove second and subsequent instances of each input line, without having to sort them first.
21:31:08 <ais523> AnMaster: actually I don't
21:31:21 <AnMaster> ais523, I don't very well either, just the basics
21:31:25 <ais523> I know sed and perl, though
21:31:40 <AnMaster> but I'm sure you could do it in them
21:31:51 <AnMaster> heck, you could even do it in befunge if you wanted, it is turing complete
21:32:07 * ais523 runs that awk script through a2p
21:32:15 <ais523> although I could guess what it did anyway
21:32:58 <ais523> a useful thing to have around if you don't know awk
21:33:02 <ais523> because it compiles almost literally
21:33:09 <ais523> without making too much of a mess of the code
21:33:21 <Deewiant> AnMaster: export A=ä; and then running Mycology works just fine here
21:33:49 -!- slereah_ has joined.
21:34:06 <ais523> yes, my infinite loop works!
21:34:20 <ais523> #!/usr/bin/env underlambda
21:34:20 <ais523> (((x)\x)(((((z)y(z)x^)\z^)\y^)\x^)((y)(y)z^)\y\z)((x)x^)\x^|
21:34:21 <Deewiant> AnMaster: the code for getting the env vars is quite pointer-mathy and should be understandable for a C coder like you, if you see the problem let me know ;-)
21:34:37 <AnMaster> Deewiant, if I have time that is
21:34:41 <ais523> of course, it's possible to write that much more simply as (:^):^, but I wanted to do it Unlambda-style
21:35:03 -!- slereah__ has quit (Read error: 104 (Connection reset by peer)).
21:35:13 <ais523> (what I've written there is almost literally ```sii``sii, except that to save space I lambdad ``sii in `xx)
21:35:20 <AnMaster> Deewiant, hm I wonder, a sandbox mode, that doesn't allow file, and restricts some extensions partly, would that be nice?
21:36:04 <AnMaster> Deewiant, for funge08 as a flag it can check with y to see if the interpreter is in that mode
21:36:05 <ais523> someday I have a plan of running an esogolfing site that sandboxes by restricting the capability of interps and compilers to be able to do evil things
21:36:17 <Deewiant> AnMaster: well, y already says whether files are supported
21:36:26 <Deewiant> AnMaster: so if the interpreter is in that mode it can just say so in y
21:36:28 <AnMaster> Deewiant, some extensions allow IO right?
21:36:44 <ais523> not all interps have to support all fingerprints anyway
21:36:45 <Deewiant> AnMaster: yes, and you can tell that they don't work by the fact that you try and load them and it fails ;-)
21:36:59 <Deewiant> TURT, DIRF, FILE, some others maybe, yes.
21:37:09 <AnMaster> Deewiant, but some may have useful stuff that does work in a sandbox but other parts that don't?
21:37:30 <Deewiant> AnMaster: none of those do, and I think it's poor style to make a fingerprint which does
21:37:48 <Deewiant> AnMaster: of course "useful" is relative :-P
21:38:00 <Deewiant> AnMaster: but if the output doesn't work, the corresponding instruction just reflects
21:38:05 <Deewiant> so I don't think it's that bad
21:38:18 <Deewiant> a conforming script should just say "output failed" at that point and not die
21:38:30 <AnMaster> Deewiant, btw, mycology did some very interesting thing when I had an error in turn right code that meant dy changed but dx didn't
21:38:47 <Deewiant> AnMaster: I can't test for every possible bug
21:39:27 <Deewiant> AnMaster: if your ] is the equivalent of 0"/ fr- mr"x it's not my fault that Mycology runs a ] expecting it to work .-P
21:40:12 <Deewiant> that'd set the IP's delta to (109,114) and leave some crap on the stack
21:40:18 <Deewiant> I can't test for that, either :-P
21:40:31 <ais523> well, you can, because they're pretty large numbers, but you probably shouldn't
21:40:31 <AnMaster> Deewiant, how can you write strings backwards in your head
21:40:50 <Deewiant> I can only give as much output as possible and then the developer can see what did work and look at the src to see what didn't
21:40:55 <Deewiant> AnMaster: 1 year of writing Befunge :-D
21:41:28 <AnMaster> Deewiant, if mycology was easier to read :/
21:41:30 <Deewiant> but no, I usually had a program reverse long strings for me
21:41:55 <AnMaster> haha that actually makes sense in Swedish backwards
21:42:49 <AnMaster> ok now you are just crasy, using uncide to write upside down
21:42:52 <ais523> Deewiant: are you copy-pasting those upside-down letters from a character map, or do you happen to know how to type them offhand?
21:42:55 <oerjan> so it's not the same as retvis?
21:43:11 <Deewiant> AnMaster: suggestion if you haven't done so already - implement a "trace mode" (or full-blown debugging)
21:43:14 <AnMaster> Deewiant, btw this test suite I use to test some basic things (it is longer than this): http://rafb.net/p/uCth5W27.html
21:43:26 <Deewiant> ais523: lɯʇɥ˙dılɟ/ɯoɔ˙pɐɟʌǝɹ˙ʍʍʍ//:dʇʇɥ
21:43:55 <ais523> AnMaster: you put the question mark at the wrong end of that word
21:43:59 <ais523> it's revfad upside-down
21:44:05 <Deewiant> AnMaster: yeah, that was my mistake really
21:44:14 <Deewiant> AnMaster: at the start I didn't expect it to become nearly as long as it did
21:44:20 <ais523> (my font managed it fine)
21:44:31 <Deewiant> AnMaster: the Befunge-93 area had to be squashed since it has to fit in 80x25
21:44:34 <AnMaster> Deewiant, heh, yes mine just does 38 basic tests
21:44:40 <Deewiant> AnMaster: after that I figured maybe 80x200 would fit the whole thing
21:44:52 <AnMaster> or you could have used several files
21:45:02 <Deewiant> I decided against that early on
21:45:05 <ais523> hmm... now we need a reversible esolang in which writing a string upside-down reverses what a function does
21:45:17 <Deewiant> because I wanted it to be easy to use
21:45:26 <ais523> that way you don't need all instructions to be self-inverse, but still have symmetry
21:45:27 <Deewiant> "foo mycology.b98" and bam, you know whether your interpreter works or not
21:45:48 <Deewiant> fungus is much more annoying than that - it tries to load parts of itself using y and i
21:45:49 <ais523> incidentally, the upside-down i and l are wrong
21:46:17 <ais523> Deewiant: at least it doesn't try to load parts of itself using compression and p
21:46:22 <Deewiant> so if y and/or i aren't supported properly you get all kinds of problems
21:46:34 <AnMaster> Deewiant, but, so does mycology, it tries to load the randomness thing
21:47:02 <AnMaster> Deewiant, where do you find fungus?
21:47:27 <Deewiant> http://www.quote-egnufeb-quote-greaterthan-colon-hash-comma-underscore-at.info/befunge/fungus.php
21:47:53 <Deewiant> yeah, he's proud of it, a domain name which is valid befunge code :-)
21:48:07 <ais523> Deewiant: aren't all strings valid Befunge code?
21:48:15 <AnMaster> look, I bet there isn't any fight over that domain
21:48:44 <Deewiant> ais523: ...and does something meaningful and doesn't loop infinitely
21:49:25 <Deewiant> although I suppose if you run sed s/at/@/g you'll get many non-infinite-looping domain names
21:49:43 <Deewiant> but I guess the idea is that it spells out some code, not that it is code in itself :-)
21:56:40 <ais523> wow, there's a Befunge-in-INTERCAL there
21:56:57 <ais523> if it works, I'm going to ask for permission to add it to the C-INTERCAL distribution
21:57:24 <ais523> it hit an error when I first tried to run it, though
22:00:33 <ais523> Deewiant: mycology is unfortunately more than 80 chars wide
22:00:45 <ais523> is there an 80x25 version for use with Befunge-93 interpreters?
22:04:56 <AnMaster> ais523, the first 80x25 chars in mycology is 93 testsuite
22:05:03 <ais523> yes, I just realised that
22:05:17 <ais523> that's a nonconformance in the INTERCAL interp already, then
22:06:58 * oerjan is suddenly surprised there isn't a befunge debugger named penicillin
22:07:41 <AnMaster> oerjan, heh? most times you can output such in interpreters
22:07:42 <oerjan> or something like that
22:08:10 <oerjan> i mean i am surprised no one has used that name...
22:09:29 <ais523> oerjan: I don't see anything obvious about it
22:09:56 <ais523> in other news, interfunge passes Mycology-93
22:10:10 <oerjan> penicillin is made from a fungus...
22:12:00 <ais523> AnMaster: it seems J^4 wrote a Befunge interp in INTERCAL
22:12:23 <AnMaster> next you are going to tell me someone did that in brainfuck
22:12:26 <ais523> oerjan wrote an Unlambda interp in INTERCAL, though, so I'm not sure which is more insane
22:12:35 <AnMaster> and I'm just waiting for a befunge98 interpreter in befunge98
22:12:39 <ais523> and AnMaster: brainfuck is marginally easier to program in than INTERCAL, in most cases
22:12:59 <ais523> except for those cases where INTERCAL's more advanced features come in useful
22:13:23 <ais523> INTERCAL's probably better for really complex programs, but writing such in esolangs is normally inadvisable anyway
22:13:36 <ais523> AnMaster: threading and backtracking can be useful
22:13:47 <ais523> AnMaster: PLEASE COME FROM by itself is a syntax error
22:13:50 <AnMaster> ais523, isn't there some threaded brainfuck versions?
22:14:06 <AnMaster> ais523, look I don't know intercal! I just know a few words
22:14:10 <ais523> although there are expressions starting with ?, so it needn't be a syntax error depending on what's on the next line
22:14:16 <ais523> and yes, there's Brainfork
22:14:23 <ais523> but INTERCAL's threading model is more elegant IMO
22:14:41 <AnMaster> ais523, look, anything is more elegant than threading in esoteric languages IMO
22:14:59 <ais523> you can't get much more elegant than aiming two COME FROMs at the same line
22:15:23 <ais523> AnMaster: multithread and run both
22:15:47 <ais523> what did you expect it to do?
22:18:19 <ais523> it does that if multithreading is disabled
22:20:14 <ais523> BTW, the backtracking model is more general than Prolog's
22:40:39 <ais523> do you know what a continuation is?
22:40:47 <ais523> if you do, it's slightly easier to explain
22:41:13 <AnMaster> ais523, isn't that something like passing some code and it's context around?
22:41:24 <ais523> the context itself is the continuation
22:41:32 <ais523> you were describing Continuation Passing Style
22:41:33 <AnMaster> note: I'm an imperative and object orientated guy!
22:41:46 <ais523> backtracking is an imperativish version
22:42:02 <AnMaster> go on, I'll join in when I can
22:42:10 <ais523> basically, at a point in the program, you can decide to MAYBE perform an action (with MAYBE being an INTERCAL keyword; other languages have other ways to specify it)
22:42:21 <ais523> so for instance, you could MAYBE assign a value to a variable
22:42:33 <AnMaster> right, no problem if (random() %1)
22:42:47 <AnMaster> should likley be uniform or close enough
22:42:51 <ais523> the assignment is done, but the software remembers the state when it was done
22:43:14 <ais523> and at any time later in the program, you can GO BACK to before the assignment was done, and run the code instead in an alternate version where the assignment wasn't done
22:43:31 <AnMaster> ais523, I see, useful for debugging, but not much else?
22:43:33 <ais523> or you can GO AHEAD and forget the saved state just before the assignment
22:43:42 <ais523> AnMaster: it's useful not just for debugging
22:43:48 <ais523> for instance if you want to implement regexps
22:44:04 <AnMaster> yes, I'd use pcre, or for parser, bison/yacc/whatever
22:44:11 <ais523> for instance, you might not be sure what a particular symbol means without reading more context
22:44:25 <ais523> or whether a particular bit of a regexp matches here or later
22:44:36 <AnMaster> ais523, ah, evil lookaheads :P
22:44:37 <ais523> for instance, consider /ab/ matching "cdaefabg"
22:44:59 <ais523> instead of looking-ahead, you can MAYBE match the a of /ab/ to the first a in the string
22:45:18 <AnMaster> ais523, but that is likely to be slower?
22:45:20 <ais523> and when you find the b doesn't match, you can GO BACK and match the a to the second a instead
22:45:29 <ais523> and backtracking is infamous for being slow
22:45:43 <AnMaster> then it's pointless *true C programmer*
22:45:45 <ais523> and also producing useless debug info in the case that none of the options match
22:46:00 <ais523> but sometimes it's the easiest option
22:46:07 <AnMaster> ais523, it isn't the best still
22:46:10 <ais523> (in that way it's sort of like recursion; slow but sometimes easiest)
22:46:42 <AnMaster> ais523, I still wouldn't do recursion if I could avoid it!
22:47:16 <AnMaster> in fact, while gcc think my function that does looping will recurse, and therefore won't inline it, it won't recurse
22:47:27 <AnMaster> because I won't excute looped k instructions in funge
22:47:40 <AnMaster> but I can hardly blame gcc for not being smart enough
22:48:18 <ais523> for an example, you can look at http://pastebin.ca/937153
22:48:30 <ais523> it's permute.i from the C-INTERCAL examples, and its documentation
22:49:41 <ais523> it's actually pretty easy to read for an INTERCAL program, which is 'not very'
22:50:20 <AnMaster> look, at least befunge got some kind of elegance!
22:53:42 <ais523> INTERCAL has its own kind of elegance
22:53:51 <ais523> there's a translation into a weird C/INTERCAL/Prolog mix lower down the page
22:54:05 <AnMaster> yes and that is equally hard to read
22:54:43 <ais523> the program, as written, is basically impossible to express in C
22:54:53 <ais523> (even though I compile into C)
22:55:01 <ais523> you have to write it really differently
22:55:08 * ais523 goes to paste the C it compiles into
22:55:56 <AnMaster> I guess a lot of goto could do it
22:56:18 <ais523> http://pastebin.ca/937166
22:56:22 <ais523> AnMaster: worse. setjmp
22:56:40 <ais523> and you have to save all the variables involved, too
22:56:55 <ais523> AnMaster: it's the INTERCAL compiler's name
22:57:08 <AnMaster> ick is how I feel over that code
22:57:08 <ais523> the ick_ is the name-mangle prefix it uses so as not to clash with other people's code
22:57:19 <ais523> that's only half of it
22:57:36 <ais523> because you have to link in libickmt too, which contains most of the heavy work for the backtracking
22:57:42 <AnMaster> wait a sec, how does rand differ from random
22:57:54 <ais523> AnMaster: it's standard C89, rather than POSIX
22:58:10 <AnMaster> The functions rand() and srand() conform to SVr4, 4.3BSD, C89, C99, POSIX.1-2001. The function rand_r() is from POSIX.1-2001.
22:58:12 <ais523> and although there's no reason for it in either standard, random tends to be more random
22:58:28 <AnMaster> ais523, ah that's good, I use random()
22:58:48 <AnMaster> weird man srand works, but man 3 rand gives me an openssl man page
22:59:58 <AnMaster> ais523, what about drand48 then?
23:00:21 <slereah_> http://www.muppetlabs.com/~breadbox/intercal-man/blotch.gif
23:00:33 <ais523> slereah_: it doesn't actually mean anything
23:00:43 <ais523> it was listed in the original spec as being available for future expansion
23:01:06 <slereah_> But does it exist in an actual character set?
23:01:14 <ais523> you get it by overprinting a whole load of punctuation marks
23:01:25 <ais523> I think it's [^H]^H-^H# but I'm not sure
23:01:35 <slereah_> Punching the fuck out of the punch card?
23:01:51 <ais523> hey, at least two INTERCAL-72 operators were overpunches
23:02:05 <ais523> but they've since been added to Unicode
23:02:36 <ais523> the bookworm is the mathematical for-all symbol
23:02:48 <ais523> and the change symbol is a cent sign
23:02:52 <AnMaster> someone was stupid enough to do an esoteric language on punch cards!?
23:02:55 <ais523> it dates from the days of EBCDIC
23:03:02 <ais523> it was invented in 1972, after all
23:03:04 <slereah_> Well, it was all that was available
23:03:18 <AnMaster> slereah_, what about MULTICS thing?
23:03:22 <ais523> CLC-INTERCAL still accepts the "Hollerith" input format
23:03:42 <slereah_> I tried to find some punch card computer or something, but there's only one company that sells them, and it isn't cheap :o
23:04:17 <AnMaster> http://en.wikipedia.org/wiki/Multics
23:04:39 <slereah_> I'm also not that computer savvy
23:05:05 <ais523> AnMaster: if you feel insane enough, read http://filebin.ca/vjsonz/unravel.c
23:05:15 <slereah_> The internet really let me down when it comes to punch cards.
23:05:37 <ais523> it's the multithreading/backtracking part of C-INTERCAL's runtime library
23:05:49 <ais523> that interacts with the compiled-from-INTERCAL program I pasted recently
23:06:23 <AnMaster> look you can do that *without setjmp
23:06:35 <ais523> yes, in theory you can do anything without setjmp
23:06:44 <ais523> in this case, though, the setjmp jumps out of the library and into the user program
23:06:46 <AnMaster> ais523, and even it's easy here now
23:07:00 <ais523> in most special cases it's easy
23:07:11 <ais523> but have you even seen what the general case looks like? It's horrific
23:08:02 <AnMaster> I don't want to read more of that file
23:08:38 <ais523> any budding open source programmer is invited to refactor if they feel they're up to the challenge
23:09:11 <AnMaster> I don't want to mess with INTERCAL ever in compiled form
23:09:52 <ais523> unravel.c manages to safely contain most of the really gnarly stuff, anyway
23:10:03 <ais523> the rest of the compiler is completely sane by comparison
23:10:14 <AnMaster> Deewiant, I find my interpreter faster up to the point where it fails mycology
23:10:47 <ais523> (incidentally, anyone reading this in the logs, if the filebin link has gone you can extract the file from the tarball at http://intercal.freeshell.org/download)
23:11:27 <ais523> AnMaster: My client flags Deewiant as being away, so you're unlikely to get an answer immediately
23:11:37 <ais523> but then it flags you as beeing away too
23:13:24 <AnMaster> Deewiant, huh, think I found a bug in CCBI on returning from the request 18 of y instruction
23:13:30 -!- Corun has quit (brown.freenode.net irc.freenode.net).
23:13:32 -!- GregorR has quit (brown.freenode.net irc.freenode.net).
23:13:53 -!- Corun has joined.
23:13:53 -!- GregorR has joined.
23:14:18 <AnMaster> Deewiant, n29*y <-- shouldn't that return 1? because there is one item on the single stack, the top stack
23:17:00 <AnMaster> Deewiant, further, ccbi gets into an infinite loop or something on mycouser if I do this:
23:17:01 <AnMaster> Assuming Befunge-98 instructions work...
23:17:02 <AnMaster> Which base to read input in? 3
23:17:02 <AnMaster> Input a number in that base: 47
23:17:40 <AnMaster> Which base to read input in? 473
23:17:45 <AnMaster> didn't let me input anything :(
23:21:19 <ais523> wow: http://www.quote-egnufeb-quote-greaterthan-colon-hash-comma-underscore-at.info/befunge/tquine.php
23:21:30 <ais523> that's certainly a new twist on the notion of a quine
23:22:11 -!- RedDak has joined.
23:23:00 <olsner> wonderful domain name too
23:25:51 -!- ais523 has quit ("Bye!").
23:26:08 <slereah_> Found this in the vintage computer section : http://cgi.ebay.com/chinese-ABACUS-WITH-LEATHER-DRAGON-PHOENIX-WOOD_W0QQitemZ180222253443QQihZ008QQcategoryZ1247QQssPageNameZWDVWQQrdZ1QQcmdZViewItem
23:27:32 <olsner> heh, "vintage computer"
23:27:50 <olsner> Item location:??, ??, China
23:29:05 <AnMaster> http://www.quote-egnufeb-quote-greaterthan-colon-hash-comma-underscore-at.info/befunge/jbefbef.php <-- heh
23:29:31 <AnMaster> http://www.quote-egnufeb-quote-greaterthan-colon-hash-comma-underscore-at.info/befunge/unebef.php <-- befunge interpreter in unefunge :(
23:30:13 -!- oerjan has quit ("Good night").
23:55:49 -!- jix has quit ("CommandQ").