←2008-05-05 2008-05-06 2008-05-07→ ↑2008 ↑all
00:03:49 -!- Corun has quit ("Leaving").
00:38:50 -!- Corun has joined.
00:48:50 -!- Corun has quit ("Leaving").
01:03:59 -!- ihope has joined.
01:07:28 <ihope> Last night, I wrote some notes for an AI thingy with a pencil on yellow wide-ruled paper. Today at school, I wrote some notes for that AI thingy with a pen on white college-ruled paper.
01:07:56 <ihope> The notes on white paper have much more crossing out. I wonder if that's related to the color of the paper.
01:10:46 <ihope> I'll scan thhem in case anyone wants to use them to best the human mind.
01:16:28 <ihope> Darn. One of these is illegible and the other's cut off.
01:17:22 <ehird> Bye for today!
01:17:29 <ihope> Bye.
01:17:40 <ihope> You're not going to stick around to see my revolutionary ideas? :-P
01:17:45 <ehird> Nope.
01:17:50 <ihope> See you.
01:18:06 -!- ehird has quit (Remote closed the connection).
01:22:47 <ihope> Yellow page, huge edition: http://i29.tinypic.com/2wbvrqr.jpg
01:23:51 <ihope> White page, non-huge edition: http://i32.tinypic.com/2vt7jid.jpg
01:32:32 <ihope> And the yellow one mentions Tailsteak!
01:33:48 -!- Corun has joined.
02:47:38 -!- Slereah_ has joined.
02:47:38 -!- Slereah has quit (Read error: 104 (Connection reset by peer)).
04:16:23 -!- Corun has quit ("Ok, I'm ZZzzzing :-P").
04:18:08 -!- calamari has joined.
05:11:07 -!- Slereah has joined.
05:11:07 -!- Slereah_ has quit (Read error: 104 (Connection reset by peer)).
05:47:06 <Sgeo> ihope, tailsteak? Wherewhere?
05:47:10 * Sgeo opens Firefox
05:48:01 <Sgeo> ihope, OCR much?
05:51:15 * Sgeo takes back any accidental implied insultiness
05:55:45 -!- GreaseMonkey has joined.
05:58:28 -!- Slereah_ has joined.
05:58:35 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
06:16:44 -!- Slereah has quit (Read error: 110 (Connection timed out)).
07:56:55 -!- Iskr has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:02:42 -!- Iskr has quit ("Leaving").
08:03:19 -!- Iskr has joined.
08:25:13 -!- calamari has quit ("Leaving").
08:39:02 -!- olsner has joined.
09:03:41 <oklopol> Deewiant: I can tell that's ROT13 from the letters, and from having seen a lot of ROT13 in my time. :-P <<< i can *read* it, pwnd ya bad, didn't i?
09:04:24 <oklopol> hmm
09:04:51 <oklopol> i actually cannot, now that i started reading. perhaps i memorized a crooked rot13 chart :)
09:05:15 <oklopol> EBG = VYT in mine.
09:05:32 <oklopol> right, perhaps it wasn't rot-13
09:07:07 <fizzie2> That sounds more like Atbash.
09:08:07 -!- fizzie2 has changed nick to fizzie.
09:08:17 <oklopol> (hmm... now that i think about it i've memorized a complement alphabet :D)
09:08:39 <fizzie> Yes, that's what Atbash is: http://en.wikipedia.org/wiki/Atbash
09:10:16 <oklopol> cool, it has a name.
09:10:24 <oklopol> oh
09:10:41 <oklopol> i didn't notice your earlier comment there, not that it changes anything
09:10:53 <oklopol> (but had to explain the "oh")
09:11:23 <oklopol> hmph, now i need to use another 5 minutes for alphabet memorization :<
09:13:25 <fizzie> I think the first question of the first homework round of our introductionary-cryptography-thing-course was about Atbash. Completely pointless, of course. (And the second question had ROT-13. Later on the homework questions made a bit more sense.)
09:23:11 <lament> rot-13 your atbash for twice the strength
09:25:00 <lament> (it's nice to know that they commute!)
09:27:10 <olsner> oh, rot13.atbash == atbash.rot13?
09:30:38 <GreaseMonkey> what's atbash?
09:32:49 <fizzie> See the Wikipedia link just a couple lines upwards.
09:33:03 <fizzie> Also rot_N.atbash = atbash.rot_{26-N}, for obvious reasons.
09:36:36 <fizzie> Too bad tr doesn't like "tr a-z z-a"; otherwise it'd be a nice Atbash utility. It's already good for rot-13ing with "tr a-z n-za-m".
09:36:47 <fizzie> tr: range-endpoints of `z-a' are in reverse collating sequence order
09:39:35 <olsner> ghci -e 'runCommand $ "tr a-z " ++ reverse [
09:39:40 <olsner> 'a'..'z']'
09:39:58 <olsner> or something like that :P
09:54:12 <fizzie> Well, perl -pe '@a=("a".."z"); @b=reverse(@a); eval "tr{@a}{@b}";' also works, but can't say it's pretty.
10:23:36 -!- GreaseMonkey has quit ("Unisex.").
11:34:12 -!- ais523 has joined.
11:46:35 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1"").
12:16:42 <AnMaster> err
12:17:16 -!- Tritonio has quit (Remote closed the connection).
12:41:02 -!- sebbu2 has joined.
13:01:30 -!- sebbu has quit (Connection timed out).
14:59:13 -!- ais523 has joined.
15:14:51 -!- ehird has joined.
15:22:30 -!- timotiis has joined.
15:35:05 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
15:35:15 -!- oklopol has joined.
15:35:50 -!- RedDak has joined.
15:42:37 -!- RedDak has quit (Remote closed the connection).
15:51:56 <ais523> a couple of esoteric programs have turned up here: http://thedailywtf.com/Comments/Code-examples-and-interviews.aspx?pg=3
15:52:17 <ais523> they were discussing stupid job interview questions that asked people to write programs under arbitrary restrictions
15:52:26 <Slereah_> Heh.
15:52:34 <Slereah_> Let's see that!
15:52:39 <ehird> 1
15:52:39 <ehird> 2
15:52:40 <ehird> Fizz
15:52:43 <ais523> and I submitted an INTERCAL program that fit most of the spec of one problem, while someone else wrote a Befunge program for the other (easier) problem
15:52:49 <ais523> 4
15:52:51 <ais523> Buzz
15:52:53 <ais523> Fizz
15:52:54 <ehird> tee hee
15:52:54 <ais523> 7
15:53:00 <ais523> I was doing the substring program
15:53:06 <ehird> irp fizzbuzz!!
15:53:12 <ais523> mine almost fits the spec, but it's case-sensitive and outputs in Roman numerals
15:53:19 <ehird> hahahah
15:53:29 <ais523> oh, someone came into #irp the other day and ran a few programs
15:53:37 <ehird> ais523: the problem with the daily wtf will that everyone will say "that language is the real wtf!! LOL ENTERPRISEY!!"
15:53:51 <ehird> it's a site filled with idiots who like to laugh at the people that they think are idiots :p
15:53:58 <ais523> when they tried the beer thing, I linked them to the lyrics on 99-bottles-of-beer.net, and then they went away
15:54:05 <ehird> ais523: heh
15:54:08 <ehird> ais523: you're not standard!
15:54:10 <ais523> ehird: not all of them are idiots, just some of them
15:54:12 <ehird> the correct response is 'go to hell'
15:54:16 <ais523> ehird: I know
15:54:22 <ais523> but I was implementing an extension
15:54:23 <ehird> irp++
15:54:52 <ais523> I can't wait for the next OMGWTF, by the way
15:55:06 <ais523> I'm planning to submit code automatically translated from the INTERCAL
15:55:14 <ais523> that's two WTFs pretty much guaranteed
15:55:21 <Slereah_> What is this fizbuz business?
15:55:31 <ais523> Slereah_: a silly interview question, also a children's game
15:55:49 <ais523> see the page I linked for Fizzbuzz in Befunge, and an implementation of substr in INTERCAL that finds all matches
15:56:08 <Slereah_> No one can read esoteric code, ais523.
15:56:10 <ais523> the correct FizzBuzz output, as I remember it (although the spec they give isn't clear), is:
15:56:18 <Slereah_> It's a thing you write, not that you read!
15:56:35 <ais523> 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz and so on
15:56:59 <ais523> in the children's game, you continue until someone screws up the sequence, then they're out
15:57:08 <ais523> the sequence showed up on anagolf a while ago, too
15:57:08 <Slereah_> So fiz is for dividible by 5, butt for 3?
15:57:13 <ais523> yep
15:57:15 <ais523> a nice simple rule
15:57:15 <ehird> and fizbutt for both
15:57:24 <Slereah_> That doesn't seem too hard for a non-esoteric language.
15:57:25 <ais523> err.... buzz, not butt
15:57:38 <ais523> Slereah_: it isn't, it's really easy, but apparently lots of programmers are incapable of it anyway
15:57:43 <ehird> ais523: fizz too
15:57:45 <ehird> but fizbutt is amusing
15:57:48 <ehird> and Slereah_ said it
15:57:57 <fizzie> What about my butt?
15:58:09 <ehird> hahahah
15:58:09 <ais523> it seems to be just fiz and buz in the US, though
15:58:20 <ais523> and fizzie: what an appropriate nick for this conversation!
15:58:26 <Slereah_> ...
15:58:26 <ehird> ais523: i cant' resisit saying something about dumbing down :-)
15:58:28 <ehird> *can't
15:58:30 <ehird> *resist
15:58:31 <ehird> (irony)
15:58:32 <Slereah_> I did write butt, didn't I.
15:58:51 <ais523> read the INTERCAL, anyway, it isn't too hard...
15:59:01 <Slereah_> I can't read much INTERCAL
15:59:03 <ais523> well, I didn't try to obfuscate it, but the algorithm is interesting
15:59:28 <ais523> it's my standard technique of using stacks to store arrays, and backtracking to access them non-destructively
15:59:46 -!- Parma-Quendion has joined.
16:00:07 <ais523> do you think anyone will take me up on my offer to explain my code?
16:00:14 <Slereah_> I once had the idea of doing something like that.
16:00:29 <Slereah_> Giving a programming assignment back in C and something esoteric
16:00:34 <Slereah_> but I was too lazy to do it
16:00:46 -!- Quendus has quit (Nick collision from services.).
16:00:54 -!- Parma-Quendion has changed nick to Quendus.
16:01:25 <ais523> well, I'm the sort of person who, when set an assignment that asks for a Windows binary among other things, hands in both the Windows binary and a Linux x86 binary that does the same thing, because the Linux version was the original
16:01:34 <ais523> and likewise hands in the .odt with the requested .pdf
16:01:54 <Slereah_> Hm. Maybe I can do a fizzbutt on the Love Machine 9000.
16:02:09 <ais523> I have to go for a bit, but I'll be back later
16:02:11 -!- ais523 has quit ("brb").
16:21:19 -!- ais523 has joined.
16:21:55 <ehird> wb ais523
16:21:57 <ais523> any relevant developments while I was gone?
16:22:25 <Slereah_> [17:01] * ais523 (n=ais523@pw01-fap01.bham.ac.uk) Quit ("brb")
16:22:26 <Slereah_> [17:21] * ais523 (n=ais523@pw01-fap01.bham.ac.uk) has joined #esoteric
16:22:31 <Slereah_> Can you guess?
16:22:42 <ais523> most likely not
16:22:57 <ais523> but I never know; after all, there was a conversation going, and that increases the chance of something happenign
16:23:03 <ais523> s/gn$/ng/
16:23:39 <ehird> Slereah_: that was a fulll log
16:23:41 <ehird> *full
16:23:42 <ehird> err
16:23:43 <ehird> ais523:
16:23:48 <ais523> ah
16:31:43 <ais523> it's interesting, really, that so much more effort goes into writing esoprograms than reading them
16:32:01 <ais523> generally speaking esoprograms are written and run, but not actually read except by their author
16:32:18 <ais523> I don't think that's a good thing; there are all sorts of programming techniques that can be learnt from others' code
16:32:31 <ais523> especially in esolangs
16:32:50 <ais523> the advantage of common things being difficult is that uncommon things become just as easy as the common things in some cases
16:32:51 <ehird> ais523: reading them is very hard
16:32:57 <Slereah_> Well, it's usually better to ask them directly
16:33:00 <ais523> well, it depends on the language
16:33:21 <Slereah_> It's not like it's hard to find them.
16:33:28 <ais523> Unlambda, for instance, is easy to write for an esolang (if you compile from lambda-calculus) but hard to write well, and hard to read
16:33:28 <Slereah_> There's like 75% of them all right here!
16:34:23 <ais523> well, there's time-zone issues
16:34:31 <ais523> and it's always nice to figure something out for yourself
16:34:37 <Slereah_> But then again, with Unlambda, you can use any function and copypaste it into your program
16:34:42 <ais523> although I suppose writing programs is also part of the learning process
16:35:07 <Slereah_> Just need some (^f.f(x)) program
16:35:11 <ais523> for instance, the concept of storing code in the stack turned out to be central to Underload; both Keymaker and I wrote programs that did that in different ways
16:35:36 <ehird> ais523: do you want my mkproposal.pl?
16:35:39 <ehird> it should work
16:35:45 <ehird> it doesn't diff, though. For editing, use the web interface.
16:35:47 <ais523> yep, you may as well post the link again
16:35:54 <ehird> But if you just want to splurge a directory in, and maybe edit a few files
16:35:57 <ehird> then use my script and amend
16:35:59 <ais523> I can find it in logs if necessary, though
16:36:09 <ais523> but I'm lazy
16:36:09 <ehird> ais523: I'm considering letting you define a sub - 'end'
16:36:13 <ehird> which will run after it creates everything
16:36:18 <ehird> kind of like a literate program
16:36:25 <ehird> but .. nah
16:36:47 <ehird> ais523: http://pastebin.ca/1009420
16:36:49 <ais523> I'm actually amused that literate programming has caught on
16:36:54 <ehird> comments on my perl style welcome :)
16:37:02 <ais523> it's a good idea, but I'm not entirely sure why it needs a special syntax
16:37:19 <ehird> ais523: because it's not just 'comments > code'
16:37:22 <ais523> I've written several programs with more comments than code, where the code is inside the comments, which use comment markup for the comments as usual
16:37:29 <ais523> and I know it isn't just comments > code
16:37:31 <ehird> you have to be able to write the program in the order that it makes sense to explain it in
16:37:36 <ehird> and subroutines just don't handle that
16:37:43 <ehird> (you need finer control and more access to the enclosing context)
16:38:04 <ais523> ehird: you didn't set the expiry on that to infinite
16:38:13 <ehird> ais523: so? i haven't licensed it yet
16:38:18 <ais523> it should be, really, for all esolang stuff, as I don't want it to vanish off the net
16:38:37 <ais523> but if you haven't licensed it yet, and you plan to put it up elsewhere, then fine
16:39:04 <ehird> ais523: pb.eso-std.org
16:39:05 <ehird> ;)))
16:39:19 <ais523> does that exist yet?
16:39:24 <ais523> elliotthird.org was down last I checked
16:39:45 <ehird> ais523: no httpd
16:39:47 <ehird> remember? i wiped it.
16:39:51 <ais523> I know
16:39:52 <ehird> my irc network is up though.
16:39:56 <ais523> I was wondering if you'd fixed it in the meantime
16:40:09 <ehird> don't intend to until i get the stuff ready to put up
16:40:09 <ais523> oh, and you don't set the executable/non-executable flag on the files you create
16:40:17 <ehird> ais523: hm, that's a good point
16:41:42 <ais523> interesting way you do marker selection, BTW
16:41:49 <ais523> that's kind-of clever
16:41:59 <ehird> ais523: how is it interesting?
16:42:00 <ais523> reminds me slightly of Ethernet collision retries
16:42:10 <ais523> ehird: increase the length and re-randomize each time
16:42:11 <ehird> it is just guaranteed to also work for finite files :-)
16:42:25 <ais523> normally people just re-randomize, or follow a pattern
16:42:26 <ehird> ais523: really i don't even need to increase the length
16:42:36 <ais523> ehird: yes, I know, that's what the comment was about
16:42:38 <ehird> what kind of file includes all 3 uppercase letter combinations on a line of their own?
16:42:42 <ais523> increasing the length is probably good, though
16:42:52 <ehird> yeah, my program is provably correct
16:42:53 <ehird> :-P
16:42:56 <ehird> well .. not really
16:42:57 <ehird> since it's perl
16:43:03 <ais523> and I can imagine a list of all known assembler opcodes in a file
16:43:07 <ehird> so just about anything relating to it is unprovable
16:43:13 <ais523> that might contain all 3 uppercase letter combinations
16:43:20 <ehird> ais523: UUU is an asm upcode?
16:43:29 <ais523> if it doesn't, we'll have to invent an esoasm to do the remaining ones
16:43:42 <ais523> and UUU is an RNA codon, not sure about asm
16:43:48 <ais523> does RNA count as assembly language?
16:43:51 <ais523> it's compiled into protein
16:43:59 <ais523> by a simple assembly-like substitution
16:44:05 <ehird> ais523: when you give me a 'hello world' in rna...
16:44:09 <ehird> ... then two things will happen
16:44:09 <ehird> .
16:44:14 <ehird> 1. i'll call it an asm language
16:44:21 <ehird> 2. fundie christians will kill you, in your sleep
16:44:31 <ehird> ais523: hm, odd, my irc network doesn't show up on nmap
16:44:34 <ehird> paranoid openssh :-)
16:44:39 <ehird> security by obscurity!
16:45:05 <ais523> heh, the entire genetic code of a human, when transcribed into RNA, is arguably a hello, world
16:45:13 <ehird> ais523: ha!
16:45:16 <ais523> a more literal hello, world than most programming languages, for that matter
16:45:32 <Slereah_> What would be hello world in RNA?
16:45:37 <ais523> but I don't think the genetic code by itself is enough to recreate a human
16:45:40 <Slereah_> A form of life that says "Hello, world" and then dies?
16:45:49 <ais523> I think Wikipedia had a DNA Hello, world
16:45:58 <ehird> Slereah_: that would rock
16:46:06 <ais523> when transcribed into protein and written out in the standard notation, you got HELLQWQRLD or something
16:46:08 <ehird> '...pop Hello, world! AEURURURURARRRRRRRRRRRRRRR-'
16:46:08 <ais523> let me try to find it
16:46:13 <ehird> '*dead*'
16:46:23 <Slereah_> ais523 : Metamath has a Hello, world theorem
16:47:46 -!- RedDak has joined.
16:48:07 <Slereah_> http://us.metamath.org/mpegif/helloworld.html
16:48:10 <ais523> ah, it's transwikied to Wikibooks now: http://en.wikibooks.org/wiki/Transwiki:List_of_hello_world_programs
16:48:19 <ais523> but I couldn't find the DNA one on there
16:49:21 <ais523> the worrying thing is that I have a vague memory that it was me who transwikied it
16:49:36 <Slereah_> "It is not difficult to write a message in a plasmid using the one letter code for the amino acids by inserting a suitable string of three letter of DNA per amino acid with some adjustments O => Q. For instance Hello world is HELLQ WQRD or Histidine-Glutamic acid-Leucine-Leucine-Glutamine-Tryptophan-Glutamine-Arginine-Aspartic acid."
16:49:44 <ehird> Slereah_: what does the hello world theorem actually mean?
16:49:46 <ehird> translate into english
16:49:58 <Slereah_> ehird : Nothing important.
16:50:07 <ais523> Slereah_: that's missing a Leucine
16:50:43 <Slereah_> It means that it is true that h does not belong to the set formed by the relation L over L and 0, and...
16:50:55 <Slereah_> I'm not too sure about the second part.
16:53:26 <ais523> it was transwikied, but it wasn't my fault this time
16:53:28 <ais523> it seems
16:55:52 <ehird> 344563446523446523446524465234465234465234456234465234456 = 2
16:56:07 <ais523> ...Wikibooks has hello worlds in 198 languages, plus 46 GUIs, 9 page description languages, 3 media-based scripting languages and 25 esolangs, including some esolangs I've never heard of
16:56:11 <ais523> this bears investigation
16:56:34 <ehird> ais523: any comments on my perl style?
16:56:46 <ais523> ehird: it's not particularly idiomatic, it looks more like C
16:56:49 <ais523> but that's probably a good thing
16:57:02 <ehird> ais523: what would you change? It doens't look anything like C to me..
16:57:10 <ehird> In fact, my mind views it as 'deliciously obfuscated' :-)
16:57:33 <ais523> if I were obfuscating it I wouldn't have single-use subroutines, and I wouldn't break print statements just to do some calculations
16:57:45 <ais523> you can do the calculation inside an argument to the print, you know...
16:58:26 <ehird> "The Del on the first line begins function definition for the program named HWΔPGM." -- the APL one
16:58:35 <ehird> why would you name a program HWΔPGM
16:58:38 <ehird> what's wrong with HELLO
16:58:44 <ehird> I mean 'Hello World Program', okay, but still
16:58:54 <Deewiant> HELLO isn't descriptive
16:58:57 <ais523> also, all those variables grate on the functional programmer inside me, but they're probably the clearest way to write it
16:59:01 <Deewiant> is it hello world, hello jack, hello bob, what?
16:59:13 <Deewiant> HWΔPGM is explicit
16:59:23 <Slereah_> Deewiant : Hello is hello for any variable
16:59:24 <Deewiant> hell, HELLO doesn't even say if it's a program!
16:59:31 <ehird> Deewiant: HWORLD
16:59:35 <Slereah_> Hence, it can be used to salute the entire world
16:59:36 <ehird> and since you're defining a program ...
16:59:57 <ehird> ais523: I dont' see how breaking the print wuld do anything apart from give me a mammoth print with statements inside
17:00:00 <ehird> would
17:00:16 <ais523> ehird: what's not obfuscated about a mammoth print with statements inside?
17:00:29 <ais523> I'm not saying your program is bad, just that it isn't particularly obfuscated for Perl
17:00:34 <ehird> ais523: not talking about obfuscation, relaly
17:00:36 <ehird> just idiomatic perl
17:00:41 <ais523> oh, and here's an esolang I was unaware of: http://www.nishiohirokazu.org/blog/2006/09/kemuri_1.html
17:00:46 <ais523> luckily, most of the page is in English
17:01:11 <Slereah_> It seems awfully Japanese ^^
17:01:11 <ais523> no spec, but there's an interp so it could be deduced from that
17:01:42 <Slereah_> "The only command to push constant values into the stack is the `. It pushes 13 values 33, 100, 108, 114, 111, 119, 32, 44, 111, 108, 108, 101, 72 in this order. "
17:01:47 <Slereah_> That is so cheating.
17:01:59 <ehird> Slereah_: 'awfully Japanese ^^' - the writer is obviously japanese
17:02:04 <Slereah_> I know.
17:02:07 <ais523> ah, there is a spec, I just missed it because it was so short
17:02:15 <ehird> esolangs and golfing are more popular with those japs it seems
17:02:20 <ehird> but golfing moreso
17:02:23 <ehird> and golfing with ruby tops
17:02:40 <ais523> Slereah_: the pushing of those values is cheating, but it's the only way to get constants
17:02:42 <Slereah_> "Super NAND Time!!"
17:02:49 <ehird> but ` is such a cheat
17:02:50 <ehird> :-)
17:02:51 <ais523> you have to do bitwise XORs and complements on those values to get to other values
17:02:55 <Slereah_> ais523 : What about "1"?
17:03:04 <Slereah_> It's also a constant!
17:03:07 <ehird> "l"(small L) and "*"(asterisk) are reserved for possibility to use as a command "Execute the stack as Brainf*ck" in future. ha
17:03:21 <ais523> Slereah_: you can only get a constant by XORing together characters of "Hello, world!"
17:03:28 <ais523> you can't push a literal 1 onto the stack
17:03:37 <ais523> so it's more interesting than it looks
17:03:47 <ais523> only capable of outputting constant text strings, though, so it isn't Turing-complete
17:03:55 <ais523> it's only barely cat-complete
17:04:03 <ais523> and cat programs are a lot easier to write...
17:04:58 <ehird> ais523: l and * would make it tc
17:05:18 <ais523> yes, but allowing inline BF is a cheaty way to make something TC
17:05:31 <ehird> ais523: by the way, i have an idea for a language
17:05:32 <Slereah_> Those people and their cheating way.
17:05:34 <ais523> just like calling Perl regexps TC is cheating
17:05:40 <ehird> you can implement it by TAIL-FILE-RECURSION
17:05:42 <ehird> basically
17:05:46 <ehird> the only 'looping' in the language
17:05:55 <ehird> is when the interp loads its all file
17:05:59 <ehird> and then exits after running itself
17:06:23 <ais523> so it reloads a different file when the currently running file ends?
17:06:28 <Slereah_> I wonder, is there a form of Brainfuck without any restriction on the code?
17:06:34 <ehird> ais523: no
17:06:35 <ehird> like
17:06:37 <ehird> in interp.pl
17:06:41 <Slereah_> Like an unbalanced [ would just be a conditional
17:06:45 <ehird> require "interp.pl"; exit
17:06:48 <ehird> or something
17:06:52 <ehird> and that's the only way the language can loop
17:06:53 <ehird> by doing that
17:06:53 <Slereah_> and unbalanced ] would just bring back to the beginning of the code.
17:06:54 <ais523> Slereah_: FukYorBrane does that
17:07:08 <ais523> at least, not exactly, IIRC it ignores unbalanced loops
17:07:11 <Slereah_> It's hard to find new ideas!
17:07:23 <ais523> all code has to be valid, because the program tends to get corrupted during use
17:07:32 <ais523> and has to keep running unless it hits a bomb, or all threads quit
17:09:39 <ais523> compare http://en.wikibooks.org/wiki/List_of_hello_world_programs#Ruby_with_GTK.2B to http://en.wikibooks.org/wiki/List_of_hello_world_programs#Windows_API_.28in_C.29
17:09:52 <ais523> that's pretty much proof of ehird's and my complaints about how bad the Windows API is
17:10:07 <ais523> of course, I picked the examples to make that statement look good, but still...
17:10:23 <ehird> ais523: hee, you linked to ruby as a good example
17:10:31 <ehird> i was expecting perl
17:10:31 <ehird> :)
17:10:35 <ais523> ehird: I wanted something clean and simple compared to that C stuff
17:10:39 <Slereah_> 99 should also do a hello world database.
17:10:42 <ais523> Ruby is good at clean, simple, small programs
17:10:47 <Slereah_> The hello world lists are too scattered
17:10:49 <ais523> even graphical ones, apparently
17:10:55 <ehird> ais523: ruby has some really weird bits :-) but it's nice
17:11:03 <ehird> as for gui ones
17:11:06 <ehird> wanna see a Shoes version of that?
17:11:16 <ehird> I can write it *right here*
17:11:19 <ehird> here goes:
17:11:19 <ehird> [[
17:11:22 <ehird> Shoes.app do
17:11:31 <ehird> button("Hello, world") { exit }
17:11:31 <ehird> end
17:11:32 <ehird> ]]
17:12:56 <ehird> ais523: well, the window gets kinda big when you do that
17:13:00 <ehird> you can trivially make it any size, though
17:13:09 <ehird> Shoes.app :width => a, :height => b do # that's all
17:15:04 <ehird> THE CHANNEL, IT DUN DIE
17:15:13 <Slereah_> noes.
17:16:07 -!- ais523 has quit (Read error: 104 (Connection reset by peer)).
17:16:07 -!- ais523_ has joined.
17:16:30 <ais523_> sorry, did I miss anything?
17:16:35 -!- ais523_ has changed nick to ais523.
17:16:37 <ehird> ais523_: last thing you heard?
17:16:38 <Slereah_> [18:14] <ehird> THE CHANNEL, IT DUN DIE
17:16:54 <ais523> <ehird> I can right it *right here*
17:16:59 <ehird> *write
17:17:01 <ais523> s/right/write/
17:17:04 <ehird> <ehird> here goes:
17:17:04 <ehird> <ehird> [[
17:17:04 <ehird> <ehird> Shoes.app do
17:17:04 <ehird> <ehird> button("Hello, world") { exit }
17:17:04 <ehird> <ehird> end
17:17:05 <ehird> <ehird> ]]
17:17:07 <ehird> <ehird> ais523: well, the window gets kinda big when you do that
17:17:09 <ehird> <ehird> you can trivially make it any size, though
17:17:11 <ehird> <ehird> Shoes.app :width => a, :height => b do # that's all
17:17:19 <ais523> maybe I should write a hello, world in OpenGL
17:17:26 <ais523> without using any text functions
17:17:29 <ehird> ais523: the cool thing about shoes
17:17:35 * ais523 has just finished an OpenGL project
17:17:38 <ehird> is that it contains animation and graphics functions ala Processing
17:17:43 <ehird> and excellent mouse/keyboard handling
17:17:45 <ais523> they wanted a Windows executable
17:17:49 <ehird> as well as the standard, native gui fare
17:17:56 <ais523> so I invented a programming language for expressing graphical scenes in
17:18:02 <ais523> and wrote a cross-platform interpreter for it
17:18:21 <ais523> and handed in the source, Windows and Linux executables, and the source code for the particular program they wanted
17:18:34 <ais523> I doubt anyone else did it like that
17:20:21 <ehird> ais523: you know what sucks? the lack of gui toolkits good for writing /real apps/ that aren't complex as hell
17:20:43 <ais523> GTK is reasonably simple
17:20:54 <ais523> and GLUT is very simple, but not good enough for large-scale applications
17:21:01 <ehird> ais523: GTK is based on hell, though
17:21:07 <ehird> GObject is the worst idea I've heard in years
17:21:10 <ehird> It's a good esoteric idea, though.
17:21:13 <ehird> Kind of like Malbolge.
17:21:16 <ais523> well, Qt isn't that bad either
17:21:28 <ehird> qt is nice, but not nice to program
17:21:46 <ais523> oh, and the graphical version of intercalc (the CLC-INTERCAL calculator) is written in GTK
17:22:00 <ais523> I'm not sure what argument that makes either way
17:27:40 <ehird> ais523: i can't wait until everything's rewritten in c intercal
17:27:51 <ais523> what do you mean by 'everything'
17:28:05 <ehird> everything
17:28:22 <ais523> ehird: that's never going to happen, what would C-INTERCAL itself be written in?
17:28:28 <ehird> ais523: intercal
17:28:30 <ais523> besides, I rather like a multitude of languages existing
17:28:39 <ais523> ehird: what would it compile into? INTERCAL?
17:28:44 <ais523> that would be kind of pointles
17:28:46 <ais523> s/$/s/
17:28:52 <ehird> ais523: it would interpret it
17:29:00 <ehird> and since everything is in INTERCAL
17:29:02 <ehird> it would be fast
17:29:04 <ais523> ehird: but the whole point of C-INTERCAL is that it's a compiler
17:29:15 <ehird> ais523: then we'll stop using c-intercal ;)
17:29:35 <ais523> the different design decisions of C-INTERCAL and CLC-INTERCAL stem mainly from the fact that one's a compiler and one's an interpreter, and from the different langs they're written in
17:31:17 <ais523> however, I feel that a practical INTERCAL-based language is a reasonable idea
17:31:32 <ais523> if it had the usual arithmetic operators and decent string handling, INTERCAL would be quite nice to program in
17:36:37 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1"").
17:36:53 -!- ais523 has joined.
17:37:15 <ais523> sorry... did I miss anything?
17:37:19 <ais523> the last I saw was <ais523> if it had the usual arithmetic operators and decent string handling, INTERCAL would be quite nice to program in
17:38:07 <Slereah_> noyhing missed.
17:38:17 <ais523> and everything sent/
17:38:22 <ais523> s/\//?/
17:38:31 <ehird> ais523: yes
17:38:33 <ehird> <ais523> if it had the usual arithmetic operators and decent string handling, INTERCAL would be quite nice to program in
17:38:33 <ehird> * ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1"")
17:38:33 <ehird> * ais523 (n=ais523@pw01-fap01.bham.ac.uk) has joined #esoteric
17:38:49 <ais523> hmm... that's nice, it even got my sig
17:39:07 <ais523> You are standing in the main hall of what appears to be some sort of
17:39:11 <ais523> castle. There is a door in each of the east and west walls; the one in
17:39:11 <ais523> the west wall has a [ symbol marked on it, but there are no markings on
17:39:11 <ais523> the door in the east wall. There is a large staircase, which goes upwards
17:39:11 <ais523> to a balcony high on the north side of the room. The south of the room is a
17:39:11 <ais523> large door, heavily barred with wooden bars that you would have no chance
17:39:12 <ais523> of lifting.
17:39:27 <ais523> (unfinished esoteric text adventure with several esolang puzzles in, so far three puzzles none of which leads anywhere)
17:39:58 <ais523> although one of them is capable of leading to a secret area if you have a good knowledge of INTERCAL run-time error messages
17:39:58 <Slereah_> What are the puzzles?
17:40:07 <ais523> Slereah_: try moving through the game, and you'll find out
17:40:13 <ais523> there's a SMETANA puzzle on the stairs
17:40:18 <ais523> a Brainfuck puzzle to the west
17:40:23 <ais523> and an INTERCAL puzzle to the east
17:40:58 <ais523> SMETANA because the whole "Step 1. Step 2." blatantly implies a staircase
17:41:13 <Slereah_> ais523 : GO STAIRCASE
17:41:23 <ehird> ais523: shall I write a bot that will interface the game and irc?
17:41:25 <ais523> You are standing on stair 0 of a flight of stairs.
17:41:29 <ais523> The stairs are numbered from 0 at the bottom to 9 at the top; the numbers
17:41:32 <ehird> so you don't have to do it manually.
17:41:33 <ais523> are written on the banisters rather than the stairs themselves. The top
17:41:37 <ais523> and bottom stairs are blank, but the others have writing on, as follows:
17:41:41 <ais523> 9.
17:41:46 <ais523> 8. Go to step 2.
17:41:49 <ais523> 7. Swap steps 3 and 5.
17:42:02 <ais523> 6. Swap steps 3 and 4.
17:42:05 <ais523> 5. Go to step 6.
17:42:09 <ais523> 4. Go to step 1.
17:42:13 <ais523> 3. Swap steps 2 and 4.
17:42:18 <ais523> 2. Swap steps 1 and 7.
17:42:22 <ais523> 1. Swap steps 5 and 8.
17:42:26 <ais523> > 0.
17:42:34 <ais523> ehird: you could do, but manually is simple and the parser's really rudimentary
17:42:34 <ais523> so it's best for me to parse in my head rather than make people use the parser, which only accepts one-char commands, no args
17:42:35 <ais523> each description ends with a menu of which command does what in that context
17:42:42 <Slereah_> JUST CLIMN THE FUCKING STAIRS
17:42:44 <ais523> oh, and your options are to walk up a step, down a step, or to slide down the banister
17:42:51 <ais523> so you're going up, presumably?
17:42:57 <Slereah_> Yes, yes I am.
17:43:02 <Slereah_> Will I be teleported?
17:43:23 <ais523> When you arrive on step 5, you are suddenly teleported to step 2!
17:43:23 <ais523> When you arrive on step 2, you are suddenly teleported to step 1!
17:43:23 <ais523> When you arrive on step 1, steps 5 and 8 swap places!
17:43:30 <ais523> at this point, the staircase looks like this:
17:43:38 <ais523> 9.
17:43:42 <ais523> 8. Go to step 2.
17:43:46 <ais523> 7. Swap steps 3 and 5.
17:43:50 <ais523> 6. Swap steps 3 and 4.
17:43:59 <Slereah_> Oh noes!
17:44:02 <ais523> 5. Go to step 6.
17:44:06 <ais523> 4. Swap steps 1 and 7.
17:44:10 <ais523> 3. Swap steps 2 and 4.
17:44:14 <ais523> 2. Go to step 1.
17:44:18 <ais523> > 1. Swap steps 5 and 8.
17:44:22 <ais523> 0.
17:44:26 <Deewiant> er what just happened
17:44:26 <ais523> I kept going up until you were teleported
17:44:29 <Deewiant> ah
17:44:34 <Slereah_> Do I have Mario-like jumping abilities?
17:44:34 <ais523> you have no choice now but to walk off the staircase; it resets when you do that
17:44:34 <ais523> in general all the puzzles reset when you leave the room and they are unsolved
17:44:35 <ais523> some reset even if solved, some don't
17:44:38 <ais523> Slereah_: not in this game
17:45:01 <ais523> presumably you'd gain them if you found a blue mushroom to eat, but there are none in the game at the moment
17:45:35 <ais523> an ehird web interface would likely work better than pasting, though, just because the SMETANA problem produces so much output
17:45:40 <ais523> the other two are less noisy
17:45:49 <ehird> ais523: but that's less ircy
17:45:50 <ehird> :P
17:45:53 <ehird> But I can do a web interface, trivially.
17:45:55 <ehird> Shall I?
17:45:58 <ais523> may as well
17:46:08 <ais523> I'll paste the source-code; it doesn't really give anything away
17:46:33 <ais523> it's really lousy, though, I may rewrite it in an esolang at some stage
17:46:38 <ehird> ais523: no point pasting the code
17:46:40 <ehird> you can run it on your machine
17:46:44 <ehird> once i've written the web interface
17:46:51 <ais523> then how will the web interface access the code?
17:46:57 <ehird> ais523: by using a subprocess.
17:47:05 <ehird> ais523: it takes input on stdin, and spews stuff on stdout, right? Then I can make something meaningful out of it.
17:47:17 <ais523> yes, but you'll need the code or an executable to be able to run the code
17:47:23 <ais523> you can't interface to the code if you don't have it
17:47:25 <ehird> ais523: So I give you my web interface.
17:47:26 <ehird> And you run it.
17:47:38 <ais523> ehird: I have no server that's externally accessible
17:47:44 <ehird> ais523: Ah.
17:47:48 <ais523> as it happens Apache's running on here, but I can't get round the firewall
17:47:49 <ehird> ais523: You can just give me a linux binary, then.
17:47:53 <ais523> because I don't control it
17:47:55 <ehird> Smaller than source code :p
17:47:59 <ehird> filebin.com
17:48:01 <ais523> I have a linux x86 binary, though
17:48:05 <ehird> that'll work fine
17:48:08 <ehird> i am on linux x86 after all
17:48:16 <ehird> oops
17:48:17 <ehird> http://filebin.ca/
17:48:23 <ais523> esogame: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), not stripped
17:48:26 <ais523> and I know it's .ca
17:48:46 <ehird> ais523: that iwll work perfectly
17:48:50 <ehird> *will
17:49:00 <ais523> http://filebin.ca/shdmov
17:49:18 <ehird> Okay./
17:49:23 <ehird> Web interface to the esogame coming up.
17:49:39 <ehird> Hurm
17:49:42 <ehird> ./esogame: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.4' not found (required by ./esogame)
17:49:45 <Slereah_> Does the game have some sort of plot, or is it just a bunch of puzzles?
17:49:50 <ehird> ais523: what kind of directory structure is THAT
17:49:50 <ais523> Slereah_: no plot as of yet
17:49:53 <ais523> that's coming later
17:50:04 <ais523> and really, I don't know what kind of dir structure that is
17:50:19 <ehird> ais523: oh well, paste the source code to filebin and /msg me the url i guess
17:50:19 <ais523> ldd esogame
17:50:20 <ais523> linux-gate.so.1 => (0xb7fc3000)
17:50:20 <ais523> libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e59000)
17:50:20 <ais523> /lib/ld-linux.so.2 (0xb7fc4000)
17:50:28 <ehird> (since pastebin.ca is public)
17:50:32 <Slereah_> Will the victory imply some sort of pastry?
17:50:38 <Slereah_> Perhaps a cake-like object
17:50:44 <ais523> Slereah_: probably, but a victory is currently impossible
17:50:55 <ais523> no doubt you'll have to make the cake-like object yourself, though, using a Chef program
17:51:03 <Slereah_> :D
17:51:06 <Slereah_> I like the idea.
17:51:21 <ais523> I've /msg'd ehird the source code
17:51:30 <ais523> but it doesn't spoil any of the puzzles
17:51:30 <Slereah_> Will you need a Camouflage program to enter the building?
17:51:48 <ais523> Slereah_: not sure, you start inside the building, but it's currently possible to leave but not to re-enter
17:51:58 <ais523> that might be a decent way to manage re-entry
17:52:14 <Slereah_> Heh.
17:52:20 <ais523> I was planning to construct the building a bit like Television Center, with two floors, and make the whole thing a giant Whirl program
17:52:28 <ais523> s/program/interpreter/
17:52:55 <ais523> that would require rooms to become harmless once their puzzles were solved
17:53:02 <ehird> ais523: OK, I can make a web interface to this trivially.
17:53:04 <ehird> Even with savegames!
17:53:11 <ehird> (It just generates a unique game id when you go there, then saves to that filename.)
17:53:16 <ehird> (Just go to the URL to load again.)
17:53:24 <ehird> How do you load a saved game, though, ais523?
17:53:27 <ais523> actually, I might move the INTERCAL room directly above the Brainfuck room, then restrict people to going clockwise round the puzzle
17:53:32 <ais523> ehird: specify it on the command line at current
17:53:43 <ehird> aha, ais523
17:53:44 <ais523> I started that program years ago and haven't updated it much since
17:53:46 <ehird> OK, this will be fun
17:53:58 <ais523> maybe I'll update it more once my exams are finished
17:54:07 <ais523> but I've already promised lots of things to different people
17:54:51 <ais523> such as fixing the bug with C-INTERCAL that Debian's autobuilder found on Itanium, or the bugs I found with C-INTERCAL on Solaris
17:55:08 <ais523> on the plus side, C-INTERCAL's going to be ridiculously extensively portability-tested, given its subject matter...
17:55:39 <ehird> esco!!!!
17:55:47 <ehird> haha i think me and Slereah_ are the only ones who find that funny
17:55:50 <ais523> esco????
17:56:00 <ais523> ah, an esoteric OS?
17:56:22 <Slereah_> Esoteric interpreter!
17:56:27 <Slereah_> Well, compiler
17:56:32 <ais523> compiles what into what?
17:56:36 <ais523> and written in what?
17:56:39 <Slereah_> Everything!
17:56:49 <Slereah_> Such diverse languages as Brainfuck, ook, spoon...
17:56:57 <ais523> I actually want a compile everything into everything suite
17:57:02 <ehird> ais523: esco is a shitty pile of crap
17:57:03 <ais523> EsoInterpreters is a good start
17:57:05 <ehird> to put it bluntly
17:57:19 <ehird> they support about 5 languages, half of which are brainfuck syntax-changes.
17:57:19 <ais523> ideally, have some way to compile around a cycle of esolangs (with at least one 'real' language represented)
17:57:25 <ehird> and the code is crappy c++.
17:57:29 <ais523> then any lang in the cycle can be compiled into any other
17:57:30 <ehird> and the dev linked to it all over the wiki
17:57:32 <ehird> etc
17:58:00 <Slereah_> It would be hard to compile BF into Unlambda.
17:58:06 <Slereah_> Or vice versa.
17:58:07 <ais523> e.g. it's currently possible to compile Unlambda -> Underlambda (I lost the source code for that, but I can remember how it was done)
17:58:11 <ais523> and Underlambda -> Underload
17:58:18 <ais523> not quite, no input
17:58:23 <ais523> Underlambda -> C, definitely
17:58:24 <Slereah_> http://esco.sourceforge.net/
17:58:37 <ais523> and I have a P'' interp in Unlambda
17:58:57 <ais523> changing that to a BF->Unlambda compiler wouldn't be ridiculously difficult because I still have the Relambda source
17:59:31 <Slereah_> Relambda?
17:59:38 <ais523> Slereah_: Unlambda + lambda
17:59:48 <ais523> it's a language I use privately to write Unlambda programs
18:00:04 <Slereah_> Oh.
18:00:09 <ais523> there's a Relambda to Unlambda compiler in my esolangs.el, though, which I've pasted at least twice
18:00:21 <ais523> it's buggy, unfortunately
18:00:28 <ehird> ais523: the esco guys are funny
18:00:34 <ehird> "Byter is a language for training brains."
18:00:36 <ehird> they warped that into
18:00:36 <ais523> but unlambda + lambda is a pretty simple combination
18:00:40 <ehird> "Byter is a language for training your brain."
18:00:50 <Slereah_> Well, that was most of the idea for Lazy Bird.
18:01:03 <ais523> Lazy Bird doesn't actually have a lambda, though, does it?
18:01:07 <ais523> just lots of useful combinator
18:01:10 <ais523> s/$/s/
18:01:15 <Slereah_> although the real idea was "I'm trying to write Unlambda on the love machine 9000 and it's terrible"
18:01:19 <Slereah_> ais523: It has lambdas.
18:01:25 <ais523> OK
18:01:30 <ais523> Underlambda has lambdas too
18:01:40 <ais523> and I had great fun trying to express them as rewrite rules into Underload
18:01:43 <ais523> I think I succeeded, though
18:01:50 <Slereah_> Here be a Fibonacci with lambdas : ``m^x^y````yk.1r``xx``v`y0```yk`sb`y0``v0i
18:02:15 <ais523> that's basically the same syntax as Relambda, except that I use $x and $y to read the value of lambda bindings
18:02:32 <ehird> ais523: by the way, a trivial way to do continuations in an esolang:
18:02:32 <ais523> the ^ is the same
18:02:38 <ehird> ({} is an array here)
18:02:44 <Slereah_> \ is pretty ugly as a lambda.
18:03:03 <ehird> X [Y] callcc Z -> {X Z} Y Z
18:03:04 <ais523> I use ^ in Relambda, but \ in Underload
18:03:08 <ehird> trivial
18:03:18 <ehird> ais523: which leads me to a new idea --
18:03:20 <ehird> 'forward parameters'
18:03:21 <ais523> ehird: that's pretty much how the Underlambda rewrite rule works
18:03:29 <ehird> in a concat lang, the 'back parameters' are the ones coming before the call
18:03:36 <ehird> my idea is 'forward parameters': the ones in front!
18:04:02 <ais523> that makes some sense if you have an amount of control over what they are
18:04:13 <ehird> ais523: here's callcc using 'forward parameters'
18:04:13 <ehird> \x y,z -> {x z} y z
18:04:16 <ais523> but one issue is that back parameters can be manipulated in all the usual concatenative ways
18:04:17 <ehird> that's in lambda + concat notation
18:04:22 <ehird> you could probably come up with a better way to do it
18:04:23 <ais523> forward parameters couldn't be, they'd have to be literals
18:04:27 <ehird> ais523: nahhhh
18:04:29 <ehird> ais523: they could be thunks
18:04:32 <ehird> lazy concat
18:04:43 <ais523> oh, I see
18:05:01 <ais523> well, in that case it's just the sort of typical rewrite rule which is trivial in Perl, Thutu or Cyclexa
18:05:28 <ais523> how's that web interface, by the way?
18:07:29 <ehird> ais523: going quite well
18:07:34 <ehird> i mean, the actual thing is trivial
18:07:39 <ehird> the fun part is writing the server boilerplate!
18:07:40 <ehird> <.<
18:08:04 <ais523> heh, I could probably make it into a CGI script by adding a couple of lines and using a continuation library
18:08:20 <ehird> ais523: Probably, but forking like hell would kill this kind of thing
18:08:32 <ehird> ais523: besides, you need multiple users at one time
18:08:40 <ehird> and you can't persist processes, anyway
18:08:40 <ais523> OK, but why would a continuation library need forking?
18:08:42 <ehird> so you couldn't use a cgi
18:08:48 <ehird> ais523: cgi = fork each request
18:09:11 <ais523> if you can persist continuations across runs of the program, then you can just exit in between calls
18:09:33 <ehird> ais523: ah, i see what you're saying
18:09:36 <ehird> i'm using subprocesses
18:09:44 <ais523> Underlambda's actually got persistent continuations as part of the language, in the C, S and D commands
18:09:54 <ehird> ais523: hm, should i make saving implicit?
18:09:58 <ehird> like, each action saves
18:10:03 <ehird> since i generate a unique name anyway
18:10:07 <ais523> not sure, the save on it's pretty broken anyway
18:10:13 <ais523> because it doesn't save the internal state of puzzles
18:10:18 <ehird> ais523: does it not? dshdkf!
18:10:23 <ais523> just a whole load of variables I don't actually use yet
18:10:25 <ehird> i'm going to all this fuss partly for the saves
18:10:32 <ehird> ais523: make it persist it pronto :<
18:10:44 <ais523> OK, I'll look at the code for the first time in years...
18:11:07 <ais523> the problem is keeping a consistent save-file format whilst adding extra puzzles...
18:11:36 <ais523> aargh, it's basically impossible the way I've written it
18:11:45 <ais523> it seems I've duplicated the parser inside the puzzle functions
18:11:53 <ais523> and used auto variables to store the states of the puzzles
18:12:05 <ehird> ais523: :(
18:12:13 <ais523> I told you this thing needs a rewrite
18:12:26 <ehird> oh well, i'll just do no save games for now
18:12:41 <ais523> pokpokpopokpkopkopokpkopokpokpkopokpokpkopokpkopkopkopokpkopokpkoppokpkopokpokpkpokpokpokpkopko
18:13:27 <ais523> at least the BF puzzle doesn't actually need a save, it's always either solved or reset
18:13:35 * ais523 just had a worryingly evil idea
18:13:41 <ais523> this game's a text adventure
18:13:49 <ais523> and I'm planning to add a text adventure system to PerlNomic
18:14:01 <ais523> I wonder if the two could be combined in some way?
18:14:16 <ehird> <ais523> pokpokpopokpkopkopokpkopokpokpkopokpokpkopokpkopkopkopokpkopokpkoppokpkopokpokpkpokpokpokpkopko
18:14:17 <ehird> WHAT is that
18:14:21 <ehird> is that like oko v2
18:14:21 <Slereah_> If you want to program some embryos : http://www.vivo.colostate.edu/molkit/rtranslate/index.html
18:14:27 <ais523> sorry, I went all oklopol for a moment
18:14:41 <ais523> I probably would have deleted it rather than posted it in most other channels
18:15:24 <ehird> ais523: don't worry, we're all dirty okoers here, i meaokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokok
18:15:46 <ehird> @@valid = "a".."z" + "A".."Z" + "0".."9" # this is elegant in some weird way
18:16:13 <ais523> what lang? It looks a bit like Perl, but isn't
18:16:30 <ehird> ais523: Ruby!
18:16:50 <ehird> hm, no Range#+
18:17:06 <ehird> oh, of course
18:17:09 <ehird> i'll have to convert it to an array
18:17:15 <ehird> otherwise representing that as a range makes no sense
18:17:51 <Deewiant> why not just a regex
18:17:56 <ehird> ais523: ruby's love of functional programming saves the day!
18:17:58 <ehird> @@valid = ["a".."z", "A".."Z", "0".."9"].inject([]) {|a, b| a.to_a + b.to_a}
18:18:00 <ehird> (inject is reduce/fold)
18:18:09 <ehird> Deewiant: 'cause i want to generate it too
18:18:11 <Deewiant> @@valid = /[a-zA-Z0-9]+/
18:18:14 <Deewiant> ah
18:18:47 <ais523> using || as parens looks strange
18:18:55 <ehird> ais523: it's the parameters
18:18:58 <ehird> it's taken from smalltalk
18:19:00 <ehird> smalltalk of that is:
18:19:03 <ehird> [:a :b | ...]
18:19:16 <ehird> ais523: and the extra one is so that you can do 0-adic ones easily
18:19:16 <ehird> { ... }
18:19:27 <ehird> also, { and } can be spelled 'do' and 'end' which is more elegant for multi-line blocks
18:19:30 <ehird> .inject([]) do |a, b|
18:19:31 <ehird> ...
18:19:32 <ehird> end
18:19:53 <ais523> ehird: they stole that feature from Magenta!
18:19:59 <ehird> ais523: heheheheh
18:20:13 <ehird> ais523: rule of thumb: {} for one-line blocks (only one expression)
18:20:16 <ehird> do..end for multi-line
18:20:19 <ehird> ais523: fun thing about ruby: no statements
18:20:22 <ehird> everything is an expression
18:20:29 <ehird> so you can give /anything/ as an argument to a function
18:20:32 <ehird> even a class definition
18:21:11 <ais523> "everything is an expression" is good
18:21:21 <ais523> there is no reason for a statement/expression split nowadays
18:21:35 <ais523> such splits also go against my sense of elegance in programming
18:21:36 <ehird> ais523: quite. Ruby is a lot deeper than most people think
18:21:41 <ehird> (those who learn of it from Rails, mostly)
18:21:50 <ais523> that's why INTERCAL has separate expressions and statements
18:21:56 <ehird> ais523: Ha!
18:22:01 <ais523> oh, and some of the expressions have side effects#
18:22:07 <ais523> s/.$//
18:22:10 <ehird> well, ruby's expressions have side effects
18:22:14 <ehird> because otherwise there'd be no side effects :P
18:22:20 <ais523> that's fine if they serve the role of statements too
18:22:32 <ais523> although arguably, Haskell managed to find a different solution to that particular problem
18:22:59 <ais523> but in a lang with split expressions/statements, having side-effect expressions is just silly
18:23:44 <ais523> I wonder what the historical reasons for langs having separate expression and statements are?
18:23:54 <ais523> possible reasons: parsing before LR(1) was invented, line numbers
18:24:04 <ais523> e.g. combining expressions and statements in Forte would be really difficult
18:24:11 <ais523> probably other reasons I haven't thought of
18:24:59 <ais523> the parsing is because people used to use top-down parsing for statements and bottom-up or operator-precedence parsing for expressions
18:25:08 <ehird> ais523: it was just intuitive back in tha 'old dayz
18:25:11 <ehird> 'old, heh
18:25:26 <ais523> not really, asm doesn't have separate expressions and statements
18:25:38 <ais523> so why did the first higher-level languages separate them?
18:25:38 <Deewiant> asm has only statements
18:25:42 <Deewiant> so adding expressions was an obvious next step
18:26:10 <ehird> exactly
18:26:13 <ais523> ah
18:26:14 <Deewiant> or it seems obvious to me, anyway. More so than changing all statements to expressions. :-P
18:26:21 -!- oerjan has joined.
18:26:22 <ehird> yeah
18:26:23 <ehird> it was like
18:26:27 <ehird> 'add a, b; mov b, x'
18:26:29 <ehird> is silly
18:26:34 <ehird> and esp. for large expressions
18:26:37 <ais523> expressions would have originally been invented as a way to reduce temporary register usage
18:26:38 <ehird> why not 'mov a+b, x'?
18:26:50 <ehird> and then you get into function calls and stuff
18:26:54 <ehird> 'mov sqrt(a), x'
18:27:03 <ehird> then you get a language leaving asm behind - like C
18:27:11 <ehird> and ends up making IO stuff into functions
18:27:13 <ehird> you see?
18:27:46 <ais523> yes
18:27:49 <ais523> that makes sense
18:28:21 <ehird> ais523: another nice thing about ruby - it has good string interpolation built in
18:28:32 <ais523> many langs have that nowadays
18:28:32 <ehird> #{foo}, in a string literal, is an interpolation of the code foo, converted to a string
18:28:37 <ehird> sometimes you can even leave out the {}
18:28:42 <ais523> even Cyclexa does, or will do when I finish the spec
18:28:45 <ehird> #foo and #@bar and #$xyz works, but they're obscure-looking
18:28:48 <ehird> so nobody uses them :-)
18:28:53 <ehird> ais523: you can nest quotes in these
18:29:01 <ehird> "#{"#{"hello"}"}"
18:29:03 <ehird> is "hello"
18:29:03 <ais523> ehird: but you can have nested comments in email addresses
18:29:16 <ais523> however, I tried it in my email client and it rejected the address
18:29:23 <ais523> not even sure if it allows non-nested comments
18:29:26 <ehird> ais523: gotta admit though, "#{"#{"hello"}"}" is amusnig
18:29:29 <ehird> *amusing
18:29:38 <ais523> but nested comments strike me as a good anti-spam measure
18:29:44 <ais523> what spambot parses those nowadays?
18:30:00 <Deewiant> what mail client supports them?
18:30:18 <ais523> Deewiant: all the ones which follow the spec, so probably about 2 that nobody's ever heard of
18:30:21 <Deewiant> yep
18:31:24 <ehird> eh
18:31:25 <ehird> *heh
18:31:54 <ehird> ais523:
18:31:55 <ehird> Thread.new { @buffer[id] += proc.gets until proc.closed? }
18:32:02 <ais523> anyway, try sending a message to ais523(524\)(525)x)@bham.ac.uk and seeing what happens
18:32:08 <ehird> 'until' and 'x?' are cute idioms :-)
18:32:13 <ais523> anyone who actually reaches me has a superior mailer
18:32:23 <ais523> ehird: they'll be adding a please to it next
18:32:24 -!- helios24 has joined.
18:32:35 <ehird> ais523: heh
18:32:47 <ais523> oh, yes, email addresses even have an escape syntax for escaping comment markers in comments
18:33:01 <Slereah_> Hello sir helios24.
18:33:09 <helios24> Slereah_, hi ;)
18:33:37 <ehird> ais523: i do believe I just emailed you
18:33:45 <ehird> unix mail(1) :-)
18:33:48 <ais523> it hasn't arrived yet
18:33:50 * oerjan notes that good old pine supports that address nicely (it strips out the comments as soon as i leave the To: line)
18:34:10 <ais523> maybe it'll arrive later, or maybe a relay en-route will choke on the comments
18:34:36 <ais523> oerjan: that's a really clever idea, allow all users and don't confuse the mailer
18:34:49 <ehird> ais523: I have a class called PunkRock in my program. It is a pun on 'proc'.
18:35:35 <ais523> maybe I'll publically display my email as a valid address with comments in, spambots would be unlikely to track it down and people with decent mailers could visit it without deobfuscating
18:37:39 <ehird> ais523: eurgh, you can't do redirects right
18:37:41 <ehird> if you use a 301
18:37:46 <ehird> reloads go to the redirector
18:37:48 <Deewiant> ais523: so what's the actual address supposed to be
18:37:49 <ehird> instead of hte redirectee
18:37:52 <ehird> if you use anything else
18:37:54 <Deewiant> ais523: ais523x)@...?
18:37:55 <ehird> then a browser caches the redirector
18:37:59 <ehird> to go to the redirectee
18:38:05 <ais523> Deewiant: look more closely, \ is an escape character
18:38:20 <Deewiant> ais523: aye, so you escape the one after 524
18:38:30 <Deewiant> ah, they nest?
18:38:54 <Deewiant> i.e. (foo(bar)baz) is one comment, not baz)
18:38:59 <ais523> yes, nested comments
18:39:02 <Deewiant> thunderbird thinks it's baz)
18:39:07 <ais523> remember this is email addresses we're talking about
18:39:32 <ais523> but no regexp can handle arbitrarily nested comments
18:41:20 -!- RedDak has quit (Read error: 104 (Connection reset by peer)).
18:41:37 <ehird> ais523: gosh, this bug is odd
18:41:43 <Deewiant> looks like it's an open bug at mozilla since 2002 :-)
18:41:43 <ais523> what does it do?
18:42:06 <ais523> Deewiant: but it should be easy to fix, surely?
18:42:20 <ehird> ais523: the proc buffer appears to be empty
18:42:21 <Deewiant> possibly, I don't know
18:42:22 <ehird> even though it is not
18:42:33 <ais523> "proc buffer" = /proc?
18:43:38 <ehird> ais523: no, the game subprocesses
18:44:48 <ehird> I mean, it's there. Just.
18:44:53 <ehird> OH
18:44:58 <ehird> Setting the wrong instance variable :|
18:46:04 <ehird> ais523: OK, I just need to add input.
18:53:25 <ehird> ais523:
18:53:26 <ehird> return if (proc = proc_for(name)).nil?
18:53:41 <ais523> why did you paste that particular line of code to me?
18:55:16 <ehird> ais523: OK, I think it's almost ready
18:55:18 <ehird> and ... I just found it cute.
19:02:20 <ehird> ais523: Hmm. Odd bugs.
19:02:51 <ehird> ais523: Give me a good number for reading in chunks
19:02:54 <ehird> 1024? 4096?
19:03:02 <ais523> CLC-INTERCAL uses 1024
19:03:06 <ais523> I don't know if that makes it a good number, though
19:03:36 <Deewiant> 1 << rand_int(8, 16)
19:04:06 <ais523> but I don't have the fingerprint 0 0 1 1 loaded
19:04:31 <ais523> so I think it reflects, and as I don't have 1 1 1 1 loaded either that's an infinite loop
19:04:52 <ehird> ais523: the problem is that we redirect back straight after a post
19:04:53 <ais523> sorry, it would just be the fingerprint 1, I forgot the semantics for a moment
19:04:58 <Deewiant> huh what now?
19:04:59 <ehird> which means you get either no or only some of the game's response
19:05:07 <ais523> Deewiant: I was trying to interpret your code as Funge-98
19:05:19 <Deewiant> you'd never get to the (
19:05:25 <ais523> it's the ) I'm talking about
19:05:28 <ais523> you do get to that
19:05:37 <ehird> ais523: any ideas about my solution?
19:05:38 <Deewiant> right, wrapping
19:05:41 <ehird> apart from doing it ajaxy that is :-)
19:05:43 <Deewiant> you'd hit my nick first though ;-)
19:05:49 <ais523> ehird: what redirect code are you using?
19:05:54 <ais523> there's more than one
19:05:57 <ehird> ais523: nothing to do with that
19:06:09 <ehird> just the timing of the seperate thread which does the reading
19:06:12 <ais523> why do you have a redirect?
19:06:17 <ehird> ais523: after the form post
19:06:20 <ehird> i redirect to the game display
19:06:29 <ehird> this can happer faster than I read in the game's response
19:06:30 <ais523> and where does the information that then displays come from?
19:06:45 <ehird> ais523: the buffer which i store to by reading continuously in a seperate thread
19:06:51 <Deewiant> ais523: but what it would do is try to unload the fingerprint 0. the first param it pops is the length of the fingerprint's identifier
19:07:01 <ais523> Deewiant: there are two 1s on the stack
19:07:07 <ehird> hmm, /me has an idea
19:07:08 <Deewiant> d'oh
19:07:13 <Deewiant> right you are
19:07:17 <ais523> ehird: use some sort of readbuffer-valid/readbuffer-invalid flag?
19:09:08 <ehird> ios.closed? => true or false
19:09:08 <ehird> Returns true if ios is completely closed (for duplex streams, both reader and writer), false otherwise.
19:09:15 <ehird> ^^ but I only want to know about reading!
19:09:25 <ais523> ehird: then use a non-duplex stream?
19:09:38 <ehird> ais523: but I need both input and output, for one process
19:09:41 <ehird> It's the game process :-)
19:09:46 <ehird> aha
19:09:47 <ehird> .eof?
19:09:48 <ehird> of course
19:10:43 <ehird> wow what happened
19:10:45 <ehird> it's gone molasses slow
19:11:02 <ais523> ehird: you might want to look up on how it checks for EOF
19:11:11 <ais523> it may be something silly like test read + unget with timeout
19:11:13 <ehird> ais523: my thoughts exactly
19:11:33 <ehird> ais523: how DO I detect if your game exited
19:11:34 <ehird> :-)
19:11:53 <ais523> ehird: by looking at its process number?
19:11:58 <ais523> that's the usual method
19:12:27 <ais523> e.g. you can use kill to see if it's possible to send something a signal, if it isn't then it's probably exited
19:12:46 <ehird> WTFFF
19:12:46 <ehird> Tue May 06 19:13:41 +0100 2008: ERROR: Resource temporarily unavailable
19:13:03 <Deewiant> :-)
19:13:23 <ais523> your server has switched to Daylight Saving Time
19:13:34 <ais523> mightn't that cause problems during the DST switch?
19:13:34 <ehird> ais523: ha, that's not quite what i was talking about
19:13:46 <ehird> no, it's just that my processes are only lasting one requset
19:14:22 <ais523> languages other than UNIXy shells have insufficient ampersands
19:14:46 <ehird> ais523: EAGAIN is the error, by the way
19:14:56 <ehird> whut does that be meanin'
19:15:09 <ais523> ehird: EAGAIN means that an application started a non-blocking read, but it would have blocked
19:15:18 <ais523> so it returns instantly with an error, because the read is non-blocking
19:15:23 <ehird> ais523: ah!
19:15:33 <ehird> ais523: how do I do a non-blocking-read-but-blocking-if-it-needs-to-be
19:15:39 <ais523> ?
19:15:44 <Deewiant> just do a blocking read? :-P
19:15:46 <ais523> a read is either blocking or not
19:15:54 <ehird> that is: 'if the process dun wanna give me nuttin', just return the empty string. But if it has sum of dat nice output for me, block and gimme it'
19:15:55 <ais523> it sounds like you've described a blocking read
19:16:13 <ehird> ais523: but if I do a blocking read it'll wait until the process wants to output N characters
19:16:25 <ehird> I do this every request, to get the output it's sent, y'see
19:16:25 <ais523> ehird: you've just described a non-blocking read
19:16:29 <ehird> (dropped the thread)
19:16:39 <ehird> ais523: OK, but it's having that odd error, so it's obviously not doing what I asked.
19:16:39 <ais523> presumably you're running it in a tight loop, and that's causing the slowness?
19:16:54 <ehird> errr ... What
19:17:03 <ehird> When did I say anything baout slowless
19:17:04 <ehird> *slowness
19:17:16 <ais523> <ehird> it's gone molasses slow
19:17:22 <ehird> ais523: that's not related in any way to this.
19:17:25 <ehird> i fixed thatl
19:17:27 <ais523> oh
19:17:28 <ehird> anyway:
19:17:32 <ehird> proc.buffer += proc.read_nonblock(4096)
19:17:36 <ehird> i do that each time you view the game screen
19:17:42 <ehird> to syphon anything the game wants to tell me
19:17:49 <ehird> but this isn't working past the first request
19:17:51 <ais523> what does read_nonblock return in a situation where it would block?
19:17:52 <ehird> it fails with EAGAIN
19:17:56 <ais523> null, all data available, or error?
19:18:00 <ehird> ais523: EAGAIN, presumably?
19:18:02 <ehird> That's what you said.
19:18:05 <ais523> yes, it does in C
19:18:10 <ehird> ais523: Yes, EAGAIN.
19:18:12 <ais523> but I would have expected Ruby to wrapper around that
19:18:14 <ehird> That's what t's giving me.
19:18:17 <ehird> An IOError of EAGAIN
19:18:21 <ehird> (raises an exception)
19:18:25 <Deewiant> "read_nonblock just calls read(2). It causes all errors read(2) causes: EAGAIN, EINTR, etc. The caller should care such errors. "
19:18:26 <ehird> even python just wraps around the errnos
19:18:29 <ais523> that's ridiculous high-level language design
19:18:30 <ehird> Deewiant: Yes.
19:18:38 <ehird> ais523: No, it's common high-level language design
19:18:39 <ehird> Very common
19:18:39 <ais523> looks like you have to catch the EAGAIN yourself
19:18:43 <ehird> Haven't seen one langugae not do it
19:18:48 <ehird> ais523: OK, and if I get an EAGAIN whatd o I do?
19:18:50 <ehird> *do
19:18:54 <ais523> I'll look it up
19:19:03 <ehird> I could do proc.read(4096), but then what if the game wants to give me, say, 512 characters? It'll hang.
19:19:18 <ais523> ehird: according to the documentation of read(2), you only get EAGAIN if there's no data
19:19:21 <ais523> and all the data available otherwise
19:19:40 <ehird> ais523: OK
19:19:42 <ais523> so just trap the exception and handle it with no action in the handler
19:19:51 <ehird> proc.buffer += proc.read_nonblock(4096) rescue nil
19:19:53 <ehird> yes, ruby even has post-rescue
19:20:31 <ehird> ais523: OK, a bit better, except that when I type 'Go' now it gives me a screen with just my input. Then if I refresh it sees it
19:20:37 <ehird> (because, obviously, the output isn't instanteneous)
19:20:42 <ais523> sounds like a race condition
19:20:48 <ehird> yes
19:20:57 <ehird> but i don't see what i can do about it save for an artificial delay
19:21:54 <ais523> normally, some sort of semaphore or spinlock, or other way to send data between multiple process
19:21:57 <ais523> s/$/es/
19:22:11 <ais523> e.g. (1) COME FROM (1) AGAIN / ABSTAIN FROM (1) in C-INTERCAL
19:22:11 <ehird> ais523: Even more worryingly, if I do 'Up'
19:22:18 <ehird> then it doesn't display anything, no matter how many refreshes
19:22:20 <ehird> until the next input
19:22:25 <ais523> strange
19:22:35 <ais523> are you flushing the pipe into my program?
19:22:49 <ehird> ais523: oh. that might hlep
19:22:50 <ais523> also, my program doesn't flush output pipes, you may need to add a few fflushes in there
19:22:51 <ehird> XD
19:24:10 <ehird> ais523: into your program?
19:24:13 <ehird> i'm trying not to modify it
19:24:22 <Deewiant> with luck it's line buffered
19:24:26 <ais523> well, programs built to run in ttys don't always run properly in pipes
19:24:37 <ais523> sometimes you need to change the buffering mode of the program
19:25:10 <ais523> e.g. all C-INTERCAL 0.28 output programs support a command-line option to flush after every output character
19:25:21 <ais523> so you can cause that to happen without modifying the output
19:25:56 <ehird> ais523: if I paste my code will you think of something? :P
19:26:04 <ais523> ehird: if it's written in Ruby, probably not
19:26:08 <ehird> ais523: it's very readable
19:26:11 <ais523> it's a good language for several things, but I don't know it
19:26:19 <ais523> and understanding the code won't solve the problem
19:26:28 <ehird> ais523: while reading it, this might help - http://www.ruby-doc.org/core/classes/IO.html
19:26:32 <ais523> it's understanding what obscure language feature you need to solve it that's needed to solve the problem
19:26:45 <ehird> http://pastebin.ca/1009573
19:26:51 <ehird> i don't think it's obscure
19:26:52 <ehird> really
19:28:46 <ehird> ais523: nothing obvious?
19:29:02 <ais523> I suggest modifying my program to flush and send some special character (there's probably a control char in ASCII for this purpose, it's got a lot of useful control chars like that) after every input, and blocking for that char
19:29:19 <ais523> otherwise, how can you possibly tell when my program's finished its output?
19:29:43 <ais523> failing that, get my program to flush (or switch stdout unbuffered), and put a time delay in before the reload
19:29:47 <ehird> ais523: well, there's an online zork
19:29:47 <ehird> :-P
19:30:05 <ehird> anyway, ais523, your program just uses raw printf
19:30:06 <ehird> changing would be hell
19:30:16 <ais523> no, trivial
19:30:24 <ais523> if it's just printf you can #define printf to flush
19:30:25 <ehird> :|
19:30:33 <ehird> ais523: yeah, but then I can't use "printf"
19:30:44 <ehird> and you also use puts
19:30:51 <ais523> or you can just use a single setbuf call on stdout
19:31:25 <ais523> setvbuf(stdout, _IONBUF, 0, 0);
19:31:34 <ais523> that command causes all stream I/O on stdout to flush instantly
19:31:40 <ais523> just put it at the start of main()
19:32:01 <ehird> esogame.c:176: error: ‘_IONBUF’ undeclared (first use in this function)
19:32:13 <ais523> _IONBF, sorry
19:32:56 <ehird> esogame.c:176: warning: passing argument 2 of ‘setvbuf’ makes pointer from integer without a cast
19:33:08 <ais523> have I got the args in the wrong order? let me check again
19:33:23 <ais523> setvbuf(stdout, 0, _IONBUF, 0);
19:33:24 <Deewiant> stdout, NULL, _IONBF, 0
19:33:25 <ais523> that's better
19:34:04 <ehird> ais523: well, nothing mmuch happens
19:34:09 <ehird> really looks like I'm gonna have to add a delay..
19:34:10 <ehird> but that sucks
19:34:15 <ais523> you need a delay as well
19:34:21 <ais523> that just prevents the stair lockup problem
19:34:22 <ehird> ais523: but how much
19:34:25 <ais523> it does, doesn't it
19:34:32 <ehird> yes
19:34:33 <ehird> it does
19:34:35 <ais523> and the delay needs to only be a few hundred milliseconds
19:34:49 <ais523> but there's no way you can do without a delay without further modifying the program you interface with
19:35:05 <ehird> ais523: OK, seems to work apart from one thing
19:35:09 <ais523> what one thing?
19:35:13 <ehird> if you give it an empty line you have to give it some input before it'll say it doesn't understand
19:35:27 <ais523> does my program do that?
19:35:33 <ehird> ais523: oh wait
19:35:34 <ais523> is it a bug with you or with me, in other words
19:35:36 <ehird> you just hang on enter
19:35:38 <ehird> it's a bug with me
19:35:41 <ehird> if I remove the stripping of newlines
19:35:46 <ehird> then it'll add a new line each time
19:35:46 <ehird> so
19:35:47 <ehird> obvious
19:38:40 <ais523> all fixed now?
19:39:04 <ehird> ais523: OK
19:39:08 <ehird> ais523: It basically works.
19:39:17 <ehird> I only need to add like 2 things:
19:39:26 <ehird> - The ability to quit the game properly
19:39:39 <ehird> - Disabling your saves, because they can access the FS and don't work anyway
19:41:14 <ehird> ais523: so, you say I should try signalling
19:41:15 <ehird> to see if it's dead
19:41:16 <ehird> what signal?
19:41:23 <ehird> this will be done on each refresh/entered line, etc
19:41:25 <ais523> there's a no-op signal for that purpose
19:41:34 <ais523> number 0, I think
19:42:39 <ais523> yes, kill's documentation says it's 0
19:43:10 <ais523> I'm not sure how that interacts with zombies, though
19:44:11 <oerjan> BRAINS...
19:44:16 <oerjan> sorry, reflex
19:44:29 <ais523> zombie processes can be a pain to get rid of
19:44:39 <ais523> in computer games you kill zombies with headshots
19:44:47 <ais523> on UNIXes you kill zombies by killing their parents
19:44:56 <ehird> hahaha
19:45:00 <ehird> that would be a great fps
19:45:04 <ehird> there's an invasion of zombies
19:45:08 <ehird> SOLUTION: kill ancestors
19:45:13 <ehird> and they immediately die
19:45:15 <ais523> quite difficult due to the need to sort out the recursion
19:45:41 <oerjan> ehird: there was something on that on TvTropes (WARNING: addictive)
19:45:55 <ehird> ais523: so it seems that I can still kill -0 your game after it's done, because it's still >open<
19:45:58 <ehird> you've just stopped writing to it
19:45:59 <ehird> (eof)
19:46:03 <ais523> yes, that's the problem
19:46:07 <ais523> can the EOF be detected?
19:46:11 <ehird> ais523: yes -- .eof?
19:46:14 <ehird> but as we've discussed
19:46:15 <ehird> that's molasses-slow
19:46:16 <ais523> or the SIGPIPE that you get for writing to a finished process?
19:46:18 <ehird> and seems to be broken anyway
19:46:22 <ehird> and it's not writing that helps
19:46:25 <ehird> because just after writing Q
19:46:28 <ehird> we go to the display screen
19:46:33 <ehird> -> we need to detect it without writing
19:46:49 <ais523> well, the command normally used for that is wait
19:46:52 <ais523> but it waits...
19:47:01 <ais523> I wonder if there's a non-blocking version?
19:47:16 <ehird> dont_wait
19:47:19 <ehird> sounds INTERCALly
19:47:41 <ehird> ais523: I am tempted to write a language in which your adventure game will be both easy to write and will be portable across UIs ;)
19:47:44 <ehird> that would be fun
19:47:46 <ehird> it could even by esoy
19:47:58 <ais523> in C it's waitpid(pid, &status, WNOHANG)
19:48:03 <ais523> not sure what that translates to in Ruby
19:48:42 <Deewiant> waitpid(pid, WNOHANG)
19:48:54 <ehird> Deewiant: bingo
19:48:55 <Deewiant> no clue what happened to the status
19:49:02 <ehird> are you a rubyist or just good with google :-)
19:49:03 <ehird> and
19:49:04 <ais523> isn't it kind-of important in this case
19:49:05 <ehird> the status is returned
19:49:08 <Deewiant> good with google
19:49:09 <ais523> because otherwise it's a no-op
19:49:13 <Deewiant> and somewhat of a rubyist
19:49:21 <ehird> Deewiant: anyway, it's Process.waitpid
19:49:21 <Deewiant> but not nearly enough to remember this kind of stuff :-P
19:49:29 <Deewiant> yep
19:49:41 <Deewiant> and Process::WNOHANG if you want to be pedantic ;-P
19:50:19 <ehird> ais523: okay, almost there
19:50:20 <ehird> after a quit
19:50:21 <ais523> pedantic = needed for program to work, or compiler setting?
19:50:22 <ehird> if you refresh
19:50:23 <ehird> it's done
19:50:26 <ehird> looks like i need more delay
19:50:26 <ehird> :D
19:50:28 <ehird> ais523: and needed
19:50:33 <ehird> ruby ain't a compiler anyway
19:50:38 <ais523> sorry, interp setting
19:50:44 <Deewiant> ais523: needed, although I think there may be some way of importing the module so that it's not
19:50:45 <ehird> it's an interpreter of the slowest kind (YARV, aka Ruby 1.9 aka Ruby 2.0 is fixing this)
19:50:47 <Deewiant> not sure
19:50:56 <ais523> actually, I'm kind of surprised that you needed the delay at all
19:51:03 <ais523> considering the relative speeds of Ruby and C
19:51:57 <ehird> ais523: snarky
19:52:03 <ehird> Mongrel, the server, has its core written in C
19:52:09 <ais523> sorry
19:52:11 <ehird> and since it's a long running process, really we're IO bound
19:52:16 <ehird> but i agree
19:52:21 <ehird> ruby is the slowest thing ever :-)
19:52:28 <ais523> ehird: try HOMESPRING some time
19:52:30 <ehird> but soon... 2.0..
19:52:39 <ais523> I'm pretty sure Ruby's faster than that
19:52:44 <ehird> (ruby 1.9 is almost usable, and it will stablly become 2.0 soon)
19:52:50 <ehird> ais523: did you know - ruby has continuations
19:52:53 <ehird> plain jane callcc
19:52:54 -!- boily has joined.
19:53:04 <ais523> I'd have been disappointed if it didn't
19:53:10 <ehird> even reusable. a limitation, though: you can't switch to a continuation made in another thread
19:53:13 <ehird> ais523: well, python doesn't
19:53:25 <ais523> "It has continuations!" shouldn't be some sort of brilliant killer-app nowadays
19:53:27 <ehird> that limitation kinda destroys them though
19:53:28 <ais523> it should be a default
19:53:38 <ehird> esp. since it copies the stack (since they're very c-integrated)
19:53:40 <ehird> so it's slow too
19:53:40 <ais523> the next step is getting all langs to have continuations that serialise to disk
19:53:41 <ehird> even so
19:53:43 <ehird> nice to know it's there
19:53:49 <ehird> yeah they don't serialize either
19:54:08 <ais523> I can't actually thing of any lang but Underlambda with serialisable continuations
19:54:10 <ehird> ais523: ruby = lisp + perly syntax with some extra humaney stuff + smalltalk
19:54:24 <ais523> sounds much like the much-fabled Perl5
19:54:27 <ehird> + simplified + some complexity, but of a new kind (ruby's own kind)
19:54:27 <ais523> only they got to it first
19:54:32 <ais523> s/Perl5/Perl6/
19:54:50 <ehird> ais523: i've seen perl6 -- it's nothing like ruby
19:54:55 <ehird> it SHOULD be, though :-)
19:54:55 <ais523> no
19:55:00 <ais523> the description fits both languages
19:55:02 <ais523> but they are still different
19:55:04 <ehird> ais523: one advantage of ruby is that you can actually compile it ;P
19:55:12 <ehird> perl6 is actually more mallable than perl5
19:55:29 <ais523> well, in perl6, every {} is actually an anonymous lambda, and context determines whether it runs or not
19:55:31 <ais523> I like that idea
19:57:06 <ehird> OK, I think I've got the game playable
19:57:59 <ais523> website?
19:58:43 -!- boily has quit ("Schtroumpf!").
19:59:13 <ehird> ais523: about to
19:59:15 <ehird> just disabling saves
20:00:23 <ehird> ais523: http://91.105.74.139:8080/
20:00:24 <ehird> have fun
20:00:29 <ehird> err wait
20:00:33 <ehird> just gonna log when someone starts a new game
20:00:35 <ais523> Could not connect to host 91.105.74.139 (port 8080).
20:00:38 -!- Slereah has joined.
20:01:04 <ehird> ais523: yes
20:01:06 <ehird> added the logging
20:01:07 <ehird> should work now
20:01:08 <ehird> http://91.105.74.139:8080/
20:02:06 <ehird> ais523: 'sit good?
20:02:10 <ais523> I think so
20:02:27 <ais523> 'twould be nice to autoscroll to the bottom of the page, though
20:02:35 <ais523> that's probably possible using anchors
20:02:48 <ehird> ais523: does for me!
20:02:51 <ehird> because it focuses the input field
20:02:57 <ais523> not for me in Konqueror
20:03:01 <ehird> ais523: use epiphany
20:03:02 <Deewiant> nor for me in Firefox
20:03:16 <ehird> it does it in a <script> at the end
20:03:17 <ehird> hang on
20:03:19 <ehird> ais523: oh and
20:03:23 <ehird> You are standing on stair 9 of a flight of stairs.
20:03:24 <ehird> :D
20:03:28 <Deewiant> in a script? well I have javascript disabled
20:03:29 <ais523> yep, fine in Epiphany
20:03:39 <ehird> Deewiant: you can't focus a form field any other way
20:03:50 <Deewiant> no, but you could use an anchor as ais523 suggested.
20:04:01 <ehird> just restarted the server
20:04:05 <ehird> it should work fine now
20:04:15 <ehird> ais523: works in konq?
20:04:32 <ais523> no
20:04:52 <ehird> OK
20:04:54 <ehird> then I give up on konq
20:04:55 <ehird> :P
20:04:58 <ais523> there's an anchor in the source but not the URL
20:05:02 <ehird> ais523: tried saving yet?
20:05:10 <ehird> and i'm not doing anchors
20:05:13 <ehird> i'm focusing a form field
20:05:19 <ehird> but fine, let me try something
20:05:20 <Deewiant> the statue on the left is starting to annoy me
20:05:23 <ais523> it doesn't understand when you try to save
20:05:27 <ais523> Deewiant: is it reacting to you?
20:05:34 <Deewiant> I've managed to get it to say '?'
20:05:42 <ehird> ais523: restarted
20:05:44 <ehird> should work now
20:05:52 <ehird> Deewiant: sorry about your game
20:05:53 <ehird> :|
20:06:04 <ais523> don't worry, the BF problem isn't stateful
20:06:05 <Deewiant> no problem
20:06:06 <ehird> ais523: does it scroll now?
20:06:14 <ais523> checking...
20:06:21 <ais523> np
20:06:24 <ais523> s/np/no/
20:06:32 <Deewiant> I'm not very good at BF anyway :-/
20:06:50 <ais523> what sort of input are you feeding to it?
20:07:01 <ais523> for a clue, see what happens with +[] as input
20:07:28 <Deewiant> I figured it might want ++.
20:07:28 <ehird> ais523: eh, just use epiphany
20:07:30 <ehird> :-)
20:07:33 <Deewiant> but I guess not
20:07:36 <ehird> Deewiant: enable JS for this
20:07:37 <ais523> ehird: I am now
20:07:38 <ehird> it should work in FF
20:07:41 <ehird> and it'll be a lot nicer
20:07:47 <ais523> and ++. is a pretty boring BF program
20:07:49 <ehird> it scrolls and focuses the form field so it's just like the real program
20:08:04 <ais523> the statue's saying ? because saying control-B would be silly
20:08:06 <Deewiant> ais523: it's 2. :-P
20:08:16 <ais523> Deewiant: the problem isn't nearly that simple
20:08:36 <ehird> ais523: tried saving? what I do is feed it /dev/null
20:08:37 <ehird> :D
20:08:41 <ehird> and print out my little message
20:08:44 <Deewiant> now the statue on the left said 2
20:08:46 <ehird> I also just trap 'Q'
20:09:11 <ehird> :,[.,]
20:09:11 <ehird> The statue on the left appears to be listening to what you say.
20:09:11 <ehird> The statue on the left says:
20:09:11 <ehird> ?????????????????????????????????????????????????????????????????????
20:09:11 <ehird> and continues like this for some time.
20:09:19 <Deewiant> heh
20:09:39 <ehird> i am just imagining someone repeatedly saying ?
20:09:54 <ais523> try +[.+]
20:10:11 <ais523> also, +[]
20:10:18 <ais523> those should be enough hints to solve the problem
20:11:08 <Deewiant> ah, I think I've figured out what to do
20:11:17 <Deewiant> now, how to do it
20:11:43 <ehird> What do you want to say?
20:11:43 <ehird> :>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
20:11:43 <ehird> It would be too risky to try to say something that long, as you
20:11:44 <ehird> would be bound to mess up somewhere.
20:11:50 <Deewiant> heh
20:12:10 <ais523> length limit is to prevent the use of text-generators to get around the problem
20:12:18 <ais523> incidentally, I think I managed a solution in under 10 chars, once
20:12:54 <ehird> well, I'm dumb.
20:13:04 <Deewiant> if I tell you what to do can you code it for me? :-P
20:13:17 -!- oerjan has quit ("Good night").
20:13:29 <ehird> maybe
20:14:30 <Deewiant> AFAICT we want to infinite-loop both the statues
20:14:47 <ehird> Deewiant: ah! so BOTH of them listen to BF code?
20:14:49 <Deewiant> the guy on the left runs what you tell it
20:14:49 <Deewiant> the guy on the right runs what the guy on the left says
20:14:52 <ehird> I get it!!
20:14:56 <ehird> :D
20:14:57 <ehird> ok, I can do this
20:15:14 <Deewiant> now, figure out a program that outputs +[] and then infinite-loops.
20:15:22 <ehird> yes
20:15:23 -!- Slereah_ has quit (Read error: 110 (Connection timed out)).
20:15:23 <ehird> that's not hard
20:16:25 <ehird> --[>+<++++++]>>[-]--[>-<---]>+++++>[-]-----[>----<---]>+<<<.>.>.[]
20:16:31 <ehird> beh
20:16:33 <ehird> too long
20:16:36 <ehird> seems that using constants are out
20:16:36 <ehird> oh wait
20:16:38 <ehird> duhh
20:16:38 <ehird> i'm stupid
20:16:39 <ehird> okay
20:16:45 <ehird> this is easyd
20:17:07 <ehird> --[>+<++++++]>.>--[>-<---]>+++++.++.[]
20:17:20 <ais523> I just solved it in 15 chars
20:17:20 <ehird> YESSSS
20:17:22 <ehird> I GOT IT!
20:17:23 <ais523> +[.++.++++++++]
20:17:26 <Deewiant> gratulation
20:17:33 <ehird> me = 38 chars
20:17:34 <ehird> but yay
20:17:35 <ehird> i got it
20:17:40 <Deewiant> but now we're stuck :-P
20:17:45 <Deewiant> (Not programmed yet.)
20:17:47 <ehird> yes
20:17:47 <ehird> :P
20:17:50 <ais523> you need to restart, I haven't written any more of that area
20:17:58 <ais523> try the SMETANA or INTERCAL problem
20:18:01 <ehird> (to restart: Q, refresh)
20:18:10 <ehird> ais523: i'm gonna do the stairs
20:18:11 <ehird> I did it before
20:18:29 <ais523> they aren't too hard
20:19:21 <ehird> ais523: so, how good is my web interface
20:19:27 <ais523> oh, you need to check on lowercase Q too
20:19:29 <Deewiant> eh? did you just boot the server?
20:19:35 <ais523> and the interface is fine, if a bit rudimentary
20:19:36 <ehird> Deewiant: ... no
20:19:43 <Deewiant> I suddenly flew to the starting screen
20:19:45 <ais523> Deewiant: I think I quitted your game somehow
20:19:47 <Deewiant> two steps away from the top, too :-P
20:19:50 <Deewiant> ais523: oh?
20:19:57 <ais523> because I entered Q, and some step game came up
20:20:06 <Deewiant> ehird: you are teh bug
20:20:08 <ais523> from context, I guess it was your game
20:20:19 <ehird> ais523: WTF
20:20:21 <ehird> ok, debug time
20:20:21 <Deewiant> now it won't accept connections
20:20:29 <ehird> when "q"
20:20:29 <ehird> proc.close
20:20:29 <ehird> @procs.delete(name)
20:20:29 <ehird> @content = "Game ended."
20:20:29 <ehird> $stderr.puts "Game #{name} ended."
20:20:30 <ehird> return
20:20:32 <ehird> Deewiant: I quit it
20:20:34 <Deewiant> ehird: earlier, I had to use Q like a bunch of times
20:20:38 <Deewiant> before I got to the main screen
20:20:41 <ehird> ais523: did you refresh after the q
20:20:48 <ais523> ehird: yes
20:20:49 <Deewiant> I may or may not have
20:20:59 <ehird> ok, well it ensures that the ids are unique
20:21:01 <ehird> so what the hell
20:21:02 <ehird> i have no idea
20:21:03 <ehird> restarting
20:21:07 <ehird> re up
20:21:11 <ais523> I think the ID in my URL changed
20:21:15 <Deewiant> 'who knows, reboot it and hope it works'
20:21:17 <ais523> but I wasn't paying attention to it
20:21:26 <ehird> Deewiant: there's no way it could happen
20:21:27 <ehird> so yah
20:21:31 <Deewiant> :-D
20:22:01 <ehird> oops
20:22:02 <ehird> another bug
20:22:13 <ais523> what was it? the me-quitting-Deewiant's-game bug?
20:22:27 <ehird> restarted
20:23:05 <ehird> oh, wait a sec
20:23:05 <ehird> OK
20:23:08 <ehird> don't refresh on the game page
20:23:09 <ehird> never refresh
20:23:11 <ehird> only use the form
20:23:14 <ehird> refreshing makes browsers go silly
20:23:17 <ehird> (they request / again)
20:23:19 <ehird> (giving you a new game)
20:23:42 <ehird> ais523: so about that adventure-game-writing language ;)
20:24:09 <ais523> ehird: well, someone put MechaniQue up on esolangs.org, but I doubt it would be good for writing BF interps in
20:24:33 <Deewiant> aww man, I fail, I can't do the stairs anymore
20:24:43 <ehird> ais523: yeah, mechanique kinda sucks
20:24:46 <ehird> mine would be specialised for yours
20:24:47 <ais523> Deewiant: you can slide down the banisters to reset them
20:24:47 <ehird> :P
20:24:49 <ehird> Deewiant: me neither
20:24:57 <Deewiant> ais523: yeah, I know, I've had to resort to it a few times :-P
20:25:00 <ehird> ais523: for example, it would have a proper language :p
20:25:22 <ais523> maybe I'll write it in Underlambda, once I have a decent optimisng interp and the spec sorted out
20:25:32 <ais523> serialising of continuations is a really useful feature for saving games
20:25:42 <ehird> ais523: but the whole point of mine is that it would work on multiple UIs
20:25:47 <ehird> so it really needs to be a specialized language
20:25:51 <ehird> (it would even have bold, colours etc)
20:26:15 <ais523> well, Underlambda could have a c series of tiers that do complicated UI stuff
20:26:25 <ais523> I'm already thinking about a b series of tiers for file manipulation
20:26:36 <ehird> ais523: yes ... but mine would make the typical scenario trivial
20:26:43 <ais523> but knowing Underlambda's style, tier 1b would probably be direct access to single bits on disk sectors...
20:27:00 <Deewiant> aw, man, I got to step 7 but it deadlocked me
20:27:11 <ais523> what do you mean by deadlocked?
20:27:18 <ehird> you have to go dow na bit, Deewiant
20:27:19 <ais523> a bug in ehird's code, or a mistake in your solution of my problem?
20:27:20 <Deewiant> step 1 is 'go to step 1' or equivalent
20:27:21 <ehird> then it swaps it in
20:27:34 <Deewiant> ehird: yeah, except that to swap step 8 I would have had to go to step 1
20:27:53 <Deewiant> and the only way to go there implied changing step 1 to 'go to step 1' :-P
20:28:28 <ehird> beh, i broke it
20:28:29 <ehird> ais523: halp :P
20:28:33 <ais523> ehird: how?
20:28:36 <ais523> what did you break?
20:28:38 <ehird> Deewiant: so .. why not change it?
20:28:40 <ais523> what are the symptoms?
20:28:44 <ehird> ais523: i just can't do it, is what i'm saying
20:28:51 <ais523> "something is wrong" is a pretty useless bug report
20:28:52 <ehird> i broke it where it = my capacity for it
20:28:57 <Deewiant> ehird: ... I did, and then I'm at the bottom with no way of going up because step 1 goes to itself
20:29:09 <ais523> let me have a go, anyway
20:29:23 <ais523> if I solve it I'll post the solution, or bits of it, on request
20:29:33 <ais523> (I can't remember the solution, BTW)
20:29:54 <Deewiant> dammit
20:30:05 <ehird> ais523: also, hopefully my language will include a great way to specify a parser
20:30:07 <Deewiant> every time I get to step 7 I can only toggle step 8 between 'goto 2' and 'goto 1' :-P
20:30:07 <ehird> it wouldn't be built-in
20:30:13 <ehird> but parsers would be subclassable and stuff
20:30:19 <ehird> so writing a parser for a specific part of the game is trivia
20:30:20 <ehird> l
20:30:37 <ais523> great way to specify a parser = Cyclexa?
20:30:38 <Deewiant> woo, I did it
20:30:53 <Deewiant> I am on a balcony
20:31:10 <ehird> ais523: not for a natural language for thing like this, thoug
20:31:10 <ehird> h
20:31:19 <ehird> it would be a bit specified to natural languages but you can always just use its regular code
20:31:22 <ehird> to parse /anything/
20:31:37 <ehird> and catch parse errors
20:31:42 <ehird> so you could e.g. parse brainfuck with the regular parser
20:32:02 <ais523> Deewiant: well done, but there's nothing up there either
20:32:06 <ais523> try the INTERCAL
20:32:08 <Deewiant> ais523: yes, I could tell. :-)
20:32:11 <ais523> room, it's actually possible to die there
20:32:19 <Deewiant> oh noes
20:32:23 <Deewiant> I don't know any INTERCAL
20:32:25 <ais523> also to escape into a secret location, if you know enough INTERCAL
20:32:36 <Deewiant> except that it has evil stuff like COME FROM
20:32:37 <ais523> but here's a quick cheatsheet for the commands used in there:
20:32:42 <ais523> (1) line lable
20:32:50 <ais523> DO NOT or DON'T = comment
20:32:51 <Deewiant> and you need to use stuff like PLEASE
20:32:57 <ais523> COME FROM (1) = come from that line label
20:33:06 <ais523> DO (1) NEXT = save current location on a stack, go to (1)
20:33:15 <ais523> RESUME #1 = go back to top saved location on the stack
20:33:28 <ais523> RESUME #2 = pop stack, then go back to top saved location on the stack
20:33:38 <ais523> (the location you go back to is also popped in both of those, by the way)
20:33:43 <ais523> FORGET #1 = pop the stack
20:33:48 <ais523> I think that's about it
20:33:50 <Deewiant> ais523: what happens with RESUME if the stack is empty
20:33:58 <Deewiant> death? :-P
20:34:06 <ais523> Deewiant: The NEXT stack ruptures. All die. Oh, the embarassment!
20:34:12 <Deewiant> oh noes
20:34:15 <Deewiant> better avoid that then
20:34:19 <ehird> ais523: halp with stairs?
20:34:34 <ais523> ehird: I've forgotten how to solve it too
20:34:40 <ehird> ais523: heh
20:34:46 <ais523> but you need to get the switch-8 thing up near the top of the stairs so you can use it
20:35:02 <ehird> ais523: also, my language would have a plain text backend (usable on ANYTHING), a plain text + ANSI backend (you get bold, colours etc and all the fancy features)
20:35:06 <ehird> and a web backend
20:35:11 <ehird> and a $gui_toolkit backend
20:35:12 <ais523> solved it
20:35:22 <Deewiant> ehird: I started with uuuuud
20:35:23 <ehird> ais523: also, it would have things like aligning to the center
20:35:26 <ehird> and other nicities
20:35:34 <ehird> ais523: ooh you solved it. Halp :D
20:35:44 <Deewiant> ais523: how many steps?
20:35:46 <ais523> how much help do you need? And of what nature?
20:35:50 <ais523> Deewiant: lots
20:35:56 <ehird> ais523: a bit, and of some nature.
20:35:57 <Deewiant> ais523: ditto. can you count? :-)
20:36:00 <ehird> and it took me like 7 before
20:36:04 <ehird> i just did it fast then thought
20:36:06 <ais523> I'll try
20:36:13 <Deewiant> looks like 22 steps here
20:36:20 <Deewiant> (pasted the log into a text editor)
20:37:51 <ais523> 20 steps for me, not counting stepping onto the stairs, but counting stepping off
20:38:01 <ehird> ais523: so .. halp
20:38:12 <ais523> wait, I'm just getting my windows back to normal
20:38:19 <ais523> OK, what sort of help do you want?
20:38:23 <Deewiant> I think I counted stepping on and off
20:38:28 <ais523> The start of the solution, or hints about what you need to do, or what?
20:38:30 <ehird> ais523: just the first few steps
20:38:37 <Deewiant> ais523: uuuuud
20:38:47 <Deewiant> er
20:38:48 <ais523> Deewiant: you have a different solution to me
20:38:48 <Deewiant> ehird:
20:38:56 <ais523> mine starts u|uuduudud
20:39:08 <ais523> where the first u steps onto the stairs, and the others take place within the stair minigame
20:39:24 <Deewiant> u|uuuuduud here
20:39:53 <ehird> Deewiant: can't do it for yours
20:40:21 <ais523> anyway, in strategic terms, you want the goto-6 on stair 5
20:40:37 <ais523> and the swap 1 and 7 accessible from up there
20:41:05 <ais523> so you can swap the swap 5 and 8 in from step 1, then use it
20:41:18 <ehird> beh i give up
20:41:19 <ehird> intercal time
20:41:40 <Deewiant> I think I need to map this intercal before there's any hope of success :-S
20:41:48 <ais523> yes, I mapped it too
20:41:58 <Deewiant> but I can't be bothered
20:41:59 <ehird> i'm not gonna map it
20:42:02 <ais523> maybe I should just paste a map, to save people time exploring
20:42:16 <Deewiant> I'd appreciate that
20:42:21 <ehird> yes
20:42:49 <ais523> I'll just grab it from the source code, to save time
20:43:11 <Deewiant> ais523: how about the end of your stairs solution, btw? uuuuuuu|u here :-)
20:43:27 <ais523> udduuuu|u
20:43:35 <ais523> yours seems more elegant than mine
20:43:50 <ais523> that's some nifty setup to be able to do that
20:43:56 <Deewiant> heh
20:44:25 <Deewiant> I'll paste the whole thing for posterity lest it disappear
20:44:28 <Deewiant> u|uuuuduuduuddduuuuuuu|u
20:45:07 <ehird> ais523: so that IF-eso-language ... would you be interested?
20:45:07 <ais523> u|uuduududuuuuudduuuu|u
20:45:10 <ais523> ehird: yes
20:45:18 <ehird> the idea is that the simplest actions can be one line of trivial code
20:45:23 <ehird> and you can easily extend that
20:45:31 <ais523> http://pastebin.ca/1009668
20:45:32 <ehird> and that the blocks of parsers and stuff can easily reuse other bits
20:45:35 <ais523> map of the INTERCAL room
20:45:38 <ehird> and that sane defaults apply
20:45:38 <Deewiant> cheers
20:45:41 <ehird> as well as ways to override them
20:45:52 <ehird> so that in the end you have some mostly-trivial blocks followed by trivial blocks
20:46:00 <ehird> and occasionally complex blocks, that override lower levels
20:47:10 <ais523> ah, Joris has found another bug in C-INTERCAL. I'm sort of glad of that, I was worried e might have been losing eir touch...
20:47:27 <ais523> (Joris has sent me at least one bugfix after every release so far for several releases)
20:47:55 <Deewiant> ais523: hmm? does the map change?
20:48:06 <ais523> no, the map's a constant
20:48:11 <ais523> your location changes from time to time, though
20:48:16 <Deewiant> DON'T ACT IN ANY WAY is to the west, (7) NEXT to the north
20:48:25 <ais523> I may have transposed the map by mistake
20:48:26 <Deewiant> and (3) NEXT to the south
20:48:35 <Deewiant> even a transposition doesn't make this make sense
20:48:44 <ais523> or a rotation?
20:48:53 <Deewiant> to the east is (6) NEXT
20:49:00 <Deewiant> ah, there we go
20:49:15 <Deewiant> for some reason I imagined myself standing on the tile to the west
20:49:20 <Deewiant> but yeah, a rotation
20:49:25 <Deewiant> north is to the right on that paste
20:52:04 <Deewiant> hmm, why does that have to be a RESUME #2 and not #1 :-P
20:53:10 <Deewiant> argh
20:53:19 <ais523> Deewiant: what happened?
20:53:19 <Deewiant> bloody COME FROMs
20:53:31 <Deewiant> I thought I had a solution but I didn't :-P
20:55:32 <ehird> ais523: i'm gonna draft some syntax for it
20:55:46 <ehird> ("high-level", i.e. once you've defined a scene and a parser and all the stuff i don't wanna think about right now)
20:56:16 <ehird> ais523: should i pattern match on e.g. "move X" or just "move" as a command? (you'll define command names in the parser)
20:56:17 <ehird> so
20:56:19 <ehird> two options
20:56:20 <ehird> like
20:56:29 <ehird> @{put X in Y}
20:56:29 <ais523> commands should have optional args
20:56:29 <ehird> or
20:56:32 <ehird> @{put_in}
20:56:35 <ehird> and then get the args
20:56:43 <ehird> ais523: both would match synonyms etc, since the parser would handle that
20:56:48 <ehird> but which is better? the pattern match or the symbolic name?
20:56:53 <ais523> when commands do have args, they're most likely to be items
20:56:59 <ais523> I think @{put X in Y} is better
20:57:06 <ais523> that's what CLC-INTERCAL uses, and it looks good there
20:57:25 <Deewiant> ais523: so now then... I'm in the top right corner, is something supposed to happen or is this not the solution? :-)
20:57:33 <ais523> Deewiant: that is the solution
20:57:36 <ais523> I just haven't programmed any more
20:57:41 <ehird> ais523: so, something like
20:57:47 <ais523> congratulations, all 3 problems have been solved by someone other than me
20:57:55 <Deewiant> is there any way out except by quitting?
20:57:56 <ais523> you can try to find the secret area now
20:57:58 <ehird> @{put X in Y} -> Y:children:append(X)
20:58:00 <ehird> ais523: right?
20:58:00 <ais523> if you like
20:58:04 <ais523> ehird: yes
20:58:09 <Deewiant> I seem to recall I bumped into walls when I tried to leave
20:58:11 <ehird> (it will be object oriented, in a way, because that makes sense for this -- don't you agree?)
20:58:21 <ais523> Deewiant: the entrance to it is in the INTERCAL room
20:58:28 <ehird> ais523: the other option would be something like:
20:58:36 <ehird> @put_in(X, Y) -> ...
20:58:56 <ehird> ais523: my only concern about pattern matching is that you'll need to have "put X in Y" in the parser AND the action text, pretty much
20:59:37 <ais523> ehird: "put X in Y" is the name of the situation
20:59:38 <Deewiant> hm, looking at the code I don't see any route to a secret, AFAICT one can only move around or die due to stack underflow
21:00:12 <ehird> ais523: good point
21:00:16 <ehird> ais523: also, rooms will be function calls
21:00:17 <ehird> so
21:00:21 <ehird> @{north} -> Lobby.
21:00:22 <ehird> will work
21:00:32 <ehird> @{north} -> "Lower atrium".
21:00:34 <ehird> will also work
21:00:35 <ehird> err wait no
21:00:37 <ehird> @{north} -> 'Lower atrium'.
21:00:39 <ehird> will also work
21:00:44 <ehird> ais523: '...' is for names with spaces
21:00:46 <ehird> "" is a string
21:00:51 <ais523> Deewiant: if you read the definition of NEXT in INTERCAL, you'll find there's also stack overflow
21:01:10 <ais523> the error message for that is "Program has entered the black lagoon", which happens when the 80-high stack overflows
21:01:19 <ais523> so I have the black lagoon as a secret area
21:01:31 <Deewiant> 80-high? is that specified? O_o
21:01:34 <ais523> it's probably going to be connected to some sort of complicated machine programmed in HOMESPRING
21:01:37 <ais523> Deewiant: yes, it's specified
21:01:48 <ehird> ais523: http://pastebin.ca/1009685
21:01:49 <ehird> code example
21:02:00 <ehird> !x means 'the error x
21:02:03 <EgoBot> Huh?
21:02:07 <ais523> looks good
21:02:09 <ehird> 'wall' will just be an error that says something like
21:02:12 <ehird> "There's a wall that way!"
21:02:19 <ais523> it's similar to the concept of a feedback message I use in the current code
21:02:23 <ehird> ais523: also, strings are automatically translatable
21:02:30 <ehird> i guess i'll have a non-translatable string thing
21:02:31 <ehird> like L"..."
21:02:32 <ais523> when you try to do something with a feedback message, you get that message and nothing else happens
21:02:33 <ehird> (L = literal)
21:02:49 <ehird> ais523: the idea is that the right-hand-side is told to 'do itself'
21:02:54 <ehird> for rooms, that means going there
21:02:59 <ehird> for strings, it means outputting them
21:03:02 <ais523> can it do unto others, as well?
21:03:05 <ehird> ais523: heh
21:04:09 <ehird> ais523: also, i wonder how to do rich-text strings
21:04:12 <ehird> just special things in the string?
21:04:13 <ehird> s
21:04:14 <ehird> like
21:04:21 <ehird> "abc%B{def}ghi"
21:04:26 <ehird> ais523: there's an advantage to that --
21:04:33 <ehird> translations can put the bold etc in the right place
21:04:35 <ais523> rich text in strings is good
21:04:37 <ehird> hmm
21:04:38 <ehird> i'll abuse \ for that
21:04:41 <ehird> "abc\B{def}ghi"
21:04:42 <ais523> and I was about to point out the same advantage
21:04:48 <Deewiant> it appears my original pasted solution for the stairs started from the main hall, actually
21:04:59 <ehird> @{die} -> "That would be \B{suicidal!}".
21:05:04 <Deewiant> so there was one extra u and the correct is u|uuuduuduuddduuuuuuu|u
21:05:40 <ehird> ais523: also, it won't be a literal \B{def}
21:05:44 <ehird> that's just syntactical sugar
21:05:54 <ehird> 'strings' will actually be more like 'RTF' than 'TXT' ;)
21:05:59 <ehird> R"..." for a raw string i guess
21:06:11 <ais523> and r"..." for a regex?
21:06:38 <ehird> ais523: heh, maybe
21:06:42 <ehird> i'll probably have real regex syntax
21:06:44 <ehird> /.../
21:06:45 <ehird> like ruby
21:07:12 <ehird> ais523: by the way, I don't know why I chose @{term} -> result.
21:07:14 <Deewiant> ais523: ugh, 80 is a big number, even though I can add 1 in two steps this'll take a while :-P
21:07:15 <ehird> it just looks nice to me
21:07:26 <Deewiant> ais523: and the page takes longer to load each time >_<
21:07:54 <ehird> ais523: any other neat ideas for it?
21:08:01 <ais523> Deewiant: may as well not bother, then
21:08:15 <Deewiant> ais523: I might be a third of the way there already :-)
21:08:22 <ais523> ehird: well, I think there'll be some sort of room based on BackFlip or Black
21:08:28 <ais523> where you skid along the floor
21:08:32 <ais523> but get to move around obstacles
21:08:38 <ais523> Black would probably work best for that
21:08:40 <ehird> ais523: that'll just be done with events
21:08:52 <ehird> ais523: you just add an event for every 'tick' (every user input, even a blank line or a syntax error)
21:08:58 <ehird> to slide further
21:09:03 <ehird> ais523: also, right now variables have to be uppercase
21:09:09 <ehird> because @{put a in b}
21:09:13 <ehird> is literally 'put a in b'
21:09:25 <ehird> (or 'in b, put a' or whatever else the parser recognizes for it)
21:09:29 <ais523> I don't mind that either, it's a nice Prologism
21:10:18 <ehird> ais523: also, there'll be a kind of weird dissonance
21:10:25 <ehird> in that you can define @{put ? in ?} in a room
21:10:29 <ehird> but also in the items themselves
21:10:31 <ehird> and also game-wide
21:10:39 <ais523> that's fine, until/unless they conflict
21:10:43 <ehird> ais523: this is because it sometimes makes sense to override on all levels
21:10:45 <ais523> they should have user-specifiable properties
21:10:52 <ehird> and, the most specific one overrides
21:10:56 <ehird> so room > item > global
21:10:57 <ais523> s/properties/priorities/
21:11:01 <ehird> ais523: yeah, probably
21:11:09 <ais523> surely room/item combination > both of those?
21:11:21 <ehird> ais523: well, how could you combine them?
21:11:22 <ais523> I can imagine a xyzzy that does nothing except in one special location
21:11:24 <ehird> they define completely seperate ones
21:11:27 <ehird> oh
21:11:31 <ehird> ais523: then you define it on the room
21:11:39 <ehird> and in the item, say a 'can't do that'
21:12:28 <ais523> oh, so you can define put for a specific item in a room?
21:12:37 <ehird> ais523: yes
21:12:43 <ehird> @{put xyzzy in plugh}, in the room definition
21:13:22 <ehird> ais523: also, in items
21:13:25 <ehird> it'll look something like this
21:13:31 <ais523> You can't block a round plugh with a square xyzzy
21:13:32 <ehird> @{put $ in plugh}
21:13:36 <ehird> (in the xyzzy item type)
21:13:44 <ehird> ais523: $ is just an arbitary symbol meaning 'me'
21:13:49 <ehird> it's just 'self'
21:14:25 <ehird> @{put $ in X%plugh} -> $:yellAt(X).
21:14:48 <ehird> ais523: that is: 'on {put <me> in <X, which is a plugh>}, call our yellAt method with X'
21:14:56 <ehird> ais523: decent syntax?
21:15:00 <Deewiant> You step towards the next tile, but fall through several
21:15:00 <Deewiant> dimensions, eventually landing in a lagoon.
21:15:00 <Deewiant> You are swimming in a lagoon. The water is completely black, and the area
21:15:00 <Deewiant> is surrounded by leafless trees. You see hills in the distance.
21:15:00 <Deewiant> -- no actions yet programmed --
21:15:02 <ehird> also, note that 'plugh' would only match the thing called plugh
21:15:05 <ehird> or its aliases
21:15:08 <Deewiant> yays
21:15:10 <ais523> decent syntax
21:15:12 <ehird> whereas X%plugh would match any one plugh
21:15:19 <ehird> ais523: and note that a plugh is probably a singleton
21:15:20 <ais523> Deewiant: well done
21:15:26 <ehird> so X%plugh could become just plugh, for that one, probably
21:15:29 <Deewiant> The NEXT stack ruptures. All die. Oh, the embarrasment!
21:15:29 <Deewiant> You have died, and cannot take any actions. Use Quit to exit.
21:15:30 <Deewiant> yay
21:15:32 <ais523> ehird: plugh is the name for a plughole
21:15:38 <Deewiant> I guess I've seen everything now :-)
21:15:43 <ais523> it's just that the original parser didn't support more than 5 letter names
21:15:44 <ehird> ais523: heh
21:15:45 <ehird> anyway
21:15:48 <ehird> <ais523> You can't block a round plugh with a square xyzzy
21:15:51 <Deewiant> ais523: btw, s/embarrasment/embarrassment/
21:15:57 <ehird> shall i specify that?
21:15:59 <ais523> what, I typoed it?
21:16:02 <ehird> like, only let it be done on round/square
21:16:04 <Deewiant> ais523: evidently so.
21:16:25 <ais523> ehird: capability to specify object properties might be a bit advanced, ideally it should be possible in the language but not part of it
21:16:39 <ehird> ais523: ah, no, that'll definately be part of it
21:16:42 <ais523> let me check that INTERCAL itself doesn't have the same typo, there's a policy of not fixing typos in error messages
21:16:44 <ehird> ais523: because that's very useful
21:17:35 <ais523> ICL632ITHE NEXT STACK RUPTURES. ALL DIE. OH, THE EMBARRASSMENT!
21:17:35 <ais523> ON THE WAY TO 2
21:17:35 <ais523> CORRECT SOURCE AND RESUBNIT
21:17:55 <ais523> it's correct in the error message, I'll fix it in the game
21:18:38 <ehird> ais523: also, !x supports '' too
21:18:43 <ehird> !'Illegal frobdob'
21:18:47 <EgoBot> Huh?
21:18:51 <ehird> makes the error named 'Illegal frobdob' trgger
21:18:52 <ehird> *trigger
21:19:06 <ehird> ais523: also, this will have backtracking and continuations, because the languages you embed will probably require those at one point
21:19:11 <ehird> also, this will be a pain in the butt to write :D
21:19:35 <ais523> ehird: first-class functions?
21:19:38 <ais523> as well?
21:19:41 <ais523> please?
21:19:54 <ehird> ais523: of course
21:19:55 <ehird> and lambdas
21:20:03 <ehird> it's got a solid programming language underneath!
21:20:10 <ehird> just loads of interactive fiction related stuff on top
21:22:29 -!- Tritonio has joined.
21:28:17 <ehird> damn you oerjan -- that wiki really is addictive
21:28:23 <ais523> ehird: which one?
21:28:40 <ehird> ais523: tv tropes
21:28:46 <ais523> oh
21:33:34 <ehird> ais523: choose a comment character for my language
21:33:39 <ehird> i'm thinking % but that's already used in patterns
21:33:44 <ehird> but then X%plugh is ugly anyway
21:33:46 <ehird> X(plugh) would be nicer
21:33:48 <ehird> so %?
21:34:20 <ais523> maybe -- like in VHDL and SQL?
21:34:32 <ais523> I know it's really old-fashioned, but it looks good on the page
21:34:56 <ais523> (the comment syntax is space dash dash space, four characters, and it goes to end of line)
21:35:19 <ehird> ais523:
21:35:24 <ehird> @{die} -> "That would be \B{suicidal!}".
21:35:24 <ehird> @{really die}
21:35:24 <ehird> : die <- "You're quick to the punch ... played before?"
21:35:24 <ehird> -> "\B{Ouch!!!}", gameOver.
21:35:36 <ehird> ais523: the : means 'depends on', and the <- .. -> means 'succeeded/failed'
21:35:38 <ehird> So:
21:35:40 <ehird> > really die
21:35:43 <ehird> You're quick to the punch ... played before?
21:35:45 <ehird> > die
21:35:50 <ehird> That would be *suicidal!*
21:35:56 <ehird> [... more gameplay ...]
21:35:58 <ehird> > really die
21:36:00 <ehird> *Ouch!!!*
21:36:04 <ehird> Game over, 34234234 points, etc.
21:36:07 <ais523> depends on the last time you tried that action?
21:36:14 <ehird> ais523: no, just if you've done it at all
21:36:17 <ehird> you can specify constaints
21:36:25 <ehird> like in this room
21:36:28 <ehird> or in this visit to this room
21:36:31 <ehird> or in the past X
21:37:24 <ais523> why is the mouse cursor in the Epiphany logo different from the mouse cursor that I use?
21:37:35 <ais523> also, it's left-handed for some unknown reason
21:38:19 <ehird> ais523: it's part of the logo itself
21:38:26 <ehird> ais523:
21:38:26 <ehird> @{die}
21:38:26 <ehird> -> prompt("That doesn't sound very healthy ... are you sure?", [yes,no])
21:38:26 <ehird> <- "Okay. You had me worried there for a second."
21:38:26 <ehird> -> "\b{Ouch!!!}", gameOver.
21:38:30 <ehird> that's good except for one thing
21:38:32 <ehird> it's ambigious
21:38:38 <ehird> the gameOver could be after the prompt conditional
21:38:44 <ais523> make whitespace significant?
21:38:47 <ais523> like in Python?
21:38:52 <ehird> (also, yes and no are matchers which match 'y', 'n', 'yes', 'no' etc)
21:38:59 <ehird> ais523: nah, doesn't seem like an elegant solution
21:39:00 <ais523> or introduce some other block structure?
21:39:14 <ehird> ais523: i can't think of an elegant one
21:39:33 <ais523> I think whitespace is an elegant way to do blocks, as long as 1) you only have one sort of block and 2) there's some alternative syntax for when you want to write inline
21:40:22 <ehird> ais523: i don't think it fits with my current syntax
21:40:26 <ais523> OK
21:40:40 <ais523> OIL uses < and > for blocks
21:40:49 <ais523> because they had no other meaning in the language
21:40:56 <ais523> at least, not at the start of a line
21:41:08 <ais523> they mean less-than and greater-than too
21:41:49 <ehird> ais523: ambigious for this
21:41:58 <ais523> yep, that's a pity
21:42:07 <ais523> would { and } be ambiguous?
21:42:54 <ehird> ais523: no, but ugly
21:45:34 <ais523> why ugly?
21:45:42 <ais523> you'd have to use multichar grouping otherwise
21:45:49 <ais523> or whitespace, which you don't want
21:46:35 <ehird> ais523: dunno it's just not very nice
21:46:44 <ehird> what i really want is a way to do my conditional stuff wihout grouping
21:47:03 <ais523> ehird: well, Perligata gets away without grouping for lots of things
21:47:06 <ais523> but sometimes it's needed
21:47:23 <ais523> but Perligata can only manage that due to the ability to rearrange commands to a large extent
21:47:57 <ehird> @{really die}
21:47:57 <ehird> -> : die <- {"You're quick to the punch ... played before?"}
21:47:57 <ehird> -> {"\B{Ouch!!!}", gameOver}.
21:48:00 <ehird> i guess that isn't too bad...
21:48:10 <ehird> @{really die}
21:48:10 <ehird> -> : die <- "You're quick to the punch ... played before?"
21:48:10 <ehird> -> {"\B{Ouch!!!}", gameOver}.
21:48:11 <ehird> hmm no
21:48:14 <ehird> that's not consistent enough
21:48:14 <ehird> OK
21:48:16 <ehird> the first is alright
21:48:20 <ais523> you would only need braces if it would be ambiguous otherwise
21:48:24 <ais523> but can put them in anyway
21:48:32 <ehird> ais523: yes, but i will make them required
21:48:34 <ehird> for consistency
21:48:36 <ais523> and maybe you can have precedences so they aren't often needed
21:48:40 <ehird> ais523: do you like my indentation style by the way?
21:48:56 <ais523> ehird: variable-width font, so not sure, but if it's what I think it is then yes
21:48:59 <ais523> it's pretty Haskelly
21:49:27 <ehird> ais523: yes
21:49:30 <ehird> @{really die}
21:49:38 <ehird> __-> : die <- {"You're quick to the punch ... played before?"}
21:49:57 <ehird> ais523: err wait
21:49:59 <ehird> let me try that again
21:50:04 <ehird> @{really die}
21:50:04 <ehird> __-> : die <- {"You're quick to the punch ... played before?"}
21:50:04 <ehird> ___________-> {"\B{Ouch!!!}", gameOver}.
21:50:19 <ehird> ais523: ha - I actually have the else/if condition reversed
21:50:24 <ehird> unintentionally, that's how it evolved
21:50:31 <ehird> because the dependency bit was a clause on the definition
21:50:37 <ehird> so it was a 'failure condition' before the body
21:50:41 <ais523> nothing wrong with doing it that way round
21:50:45 <ehird> ais523: i'll keep it this way, who knows? maybe it's better
21:50:49 <ais523> it's the unless combinator
21:50:53 <ehird> yes
21:51:04 <ais523> as long as you don't implement the but_first combinator, everything should be fine
21:51:13 <ais523> (there's actually code for it in CPAN...)
21:51:26 <ehird> ais523:
21:51:27 <ehird> @{die}
21:51:27 <ehird> -> yesno("That doesn't sound too healthy ... are you sure?")
21:51:27 <ehird> <- {"Oh, good. I was worried there for a second."}
21:51:27 <ehird> -> {"\B{Ouch!!!}", gameOver}.
21:51:37 <ehird> yesno is just a convenience function built on top of the prompting stuff
21:51:43 <ais523> ehird: doesn't it need braces?
21:51:49 <ais523> or are they optional now?
21:52:00 <ehird> ais523: um ... read my 'really die' snippit
21:52:01 <ehird> and compare
21:52:08 <ehird> i don't see how there's no braces where there were...
21:52:16 <ehird> ais523: oh you mean in the yesno call?
21:52:22 <ehird> yesno("abc") is just passing a string to the yesno function
21:52:23 <ais523> OK, but that bracing will take a bit of getting used to
21:52:25 <ehird> standard stuff ;)
21:52:47 <ehird> ais523: basically, in the extra <- -> clauses which require blocks, you need to brace
21:52:48 <ehird> that's it
21:52:53 <ehird> ooh, i just realised
21:52:56 <ehird> you can actually do if/else in this situation
21:53:00 <ehird> just swap -> and <-
21:53:09 <ais523> maybe {} can be anonymous lambda?
21:53:14 <ais523> that's consistent with your syntax so far
21:53:19 <ais523> and with your semantics
21:53:36 <ais523> that way, you're passing functions in as arguments to -> and <- rather than blocks in a control statement
21:53:52 <ehird> ais523: well, -> and <- aren't really functions
21:53:55 <ehird> they can't be, really
21:54:00 <ais523> no, just syntax
21:54:02 <ehird> without loads of dancery in the language
21:54:05 <ais523> but syntax can still take arguments
21:54:10 <ehird> ais523: but .. I'm not sure about {} being an anonymous function
21:54:12 <ehird> I was thinking
21:54:14 <ais523> at least, that's how I describe it
21:54:15 <ehird> (\a -> ...)
21:54:16 <ehird> like haskell
21:54:28 <ais523> ehird: what if it takes no args?
21:54:30 <ehird> ais523: my way leads to e.g.
21:54:35 <ehird> list:each(\a -> ...)
21:54:37 <ehird> which is nicer than
21:54:43 <ehird> list:each({|a| ...})
21:54:47 <ehird> no args
21:54:47 <ehird> \ ->
21:54:50 <ais523> OK
21:55:16 <ehird> list:foldl(0, (\a, b -> a+b))
21:55:21 <ehird> list:foldl(0, {|a, b| a+b})
21:55:24 <ehird> that one is a stretch
21:55:27 <ehird> but i currently prefer the former
21:55:46 <ais523> that's going to be ugly both ways round in ehird-aesthetics
21:55:55 <ehird> ais523: heh, why?
21:56:14 <ais523> those nested parens where there shouldn't really have to be any
21:56:22 <ehird> ais523: well, true, but
21:56:22 <ais523> or have I misjudged your tastes yet again?
21:56:26 <ehird> list:foldl(0, \a, b -> a+b)
21:56:28 <ehird> is hard to read
21:56:30 <ehird> it blends in
21:56:32 <ehird> i read it as
21:56:36 <ais523> yes, that's even worse
21:56:39 <ehird> (0, \a, b -> a+b)
21:56:45 <ehird> and i am still bemused that you don't understand my sense of aesthetics... i don't think there's anything particularly odd about them :)
21:57:03 <ais523> Haskell would have list::foldl 0 (\a\b.a+b)
21:57:08 <ais523> if I remember the syntax correctly
21:57:18 <ais523> and ehird, nobody thinks their own aesthetics are unusual
21:58:13 <ehird> ais523: list::foldl?
21:58:15 <ehird> list is a list object in mine
21:58:18 <ehird> like
21:58:19 <ais523> oh
21:58:24 <ehird> [1,2,3]:foldl(0, {|a, b| a+b})
21:58:24 <ais523> I thought you were namespacing
21:58:28 <ehird> nah
21:58:31 <ehird> objectspacing
21:58:36 <ais523> if it's an object, why isn't it an argument to foldl?
21:59:23 <ehird> ais523: 'cause foldl is a method on the list
21:59:36 <ehird> what to put in a function vs a method is a hard question
21:59:40 <ehird> i'm erring on the side of 'method'
21:59:45 <ais523> I never really understood the zeal of people to do lots of things in methods
21:59:46 <ehird> and having ruby-style 'you can open up classes and add methods'
21:59:51 <ais523> functions generally work just as well
21:59:52 <ehird> ais523: it's just for consistency
21:59:59 <ehird> if some things are methods, then a:b() vs b(a)
22:00:05 <ais523> well, in C everything's a function, and it seems to survive fine
22:00:16 <ais523> I rarely think "I wish there was a method version of this"
22:00:35 <ehird> ais523: well, object orientation is a good model for IF
22:00:40 <ehird> and functions are less useful in it
22:00:43 <ehird> most of the time
22:00:45 <ais523> OK
22:01:02 <ais523> if you can override methods per-object, that's one useful example
22:01:08 <ehird> ais523: yes
22:01:11 <ehird> you can even do that in ruby
22:01:17 <ehird> class << obj; ...; end
22:01:19 <ais523> but polymorphism, while useful for lots of things, is overkill for foldl in an IF game
22:01:36 <ehird> ais523: OK, but since you have list:length and list:append(list2),
22:01:43 <ehird> foldl(list,...) seems needlessly deviant
22:01:59 <ais523> why not make both legal?
22:02:35 <ehird> ais523: 'cause then it's not object-oriented any more
22:02:49 <ehird> object orientation is about encapsulation, hiding and passing
22:02:50 <ais523> please have a saner OO model than Perl
22:02:55 <ehird> ais523: i will, don't worry
22:03:01 <ehird> objects and classes will be very lightweight, simple things
22:03:12 <ehird> so that having a lot of them doesn't make anything feel like an 'OO overdose'
22:03:15 <ehird> it'll just be the natural way of working
22:03:28 <ais523> well, in that case have a saner OO model than Java, too
22:03:45 <ais523> oh, and make multiple inheritance possible, although it should be something that people are unlikely to come up against in practice
22:04:12 <ehird> ais523: multiple inheritance sucks in the face of mixins, IMO
22:04:19 <ehird> e.g. in Ruby, there's a mixin called Enumerable
22:04:32 <ehird> if you have one method on your class - each, which calls a block for each element in whatever your class is -
22:04:34 <ais523> I often use multiple inheritance to implement mixins
22:04:37 <ehird> then it gives you filtering, mapping, etc
22:04:43 <ais523> I'd never heard of them being implemented separately, though
22:04:48 <ehird> ais523: ruby doesn't have MI
22:04:50 <ehird> it just has mixins
22:04:53 <ehird> and it seems to work well
22:04:54 <ais523> as in, not part of a multiple inheritance model
22:05:03 <ehird> it's also a lot simpler, ais523, because super-calls are just 'go to the parent'
22:05:04 <ais523> that's certainly saner than Java's "interfaces"
22:05:11 <ehird> instead of 'go to this parent, then that one, then the next method on the delegatedsflksdfjsldf'
22:05:31 <ehird> and yeah, interfaces are just mixins that error out with 'not implemented' on anything ;)
22:05:34 <ais523> interfaces are a good idea, but so underpowered it's unbelievable
22:05:53 <ais523> whereas if mixins are just multiple inheritance with one parent taking precedence, that's fine
22:07:54 <ehird> ais523: done some syntax thinking:
22:07:58 <ehird> class xyzzy
22:07:59 <ehird> -> {init(n) -> ^name = n.
22:07:59 <ehird> say(x) -> "${^name} says: ${x}"}.
22:08:02 <ehird> and no, mixins aren't that, really
22:08:08 <ehird> mixins are a collection of methods which are added to a class
22:08:12 <ehird> that's, essentially, it
22:08:30 <ais523> you like using angle-worms a lot, it seems
22:08:55 <ehird> ais523: yes
22:08:57 <ehird> oh, another example:
22:08:59 <ehird> class xyzzy
22:08:59 <ehird> -> {init(n) -> ^name = n.
22:08:59 <ehird> say(x) -> "${^name} says: ${x}".
22:08:59 <ehird> @{put $ in X(plugh)} -> "Pah, plughy!"}.
22:09:00 <ais523> and ^ is a sigil for a property, that you don't have to declare?
22:09:02 <ehird> ais523: that shows commands
22:09:07 <ehird> and yeah, that's a sigil for a property
22:09:14 <ehird> I would use @, which is what ruby uses ... but I use @ elsewhere :-)
22:09:31 <ehird> ais523: technically
22:09:34 <ehird> I could just make it
22:09:35 <ehird> $:name = n
22:09:38 <ehird> but that's TWO CHARACTERS!
22:09:59 <ehird> and ${$:name} looks odd
22:10:11 <ais523> ehird: is that a symbolic reference?
22:10:19 <ehird> ais523: no, that's string interpolation ;)
22:10:34 <ais523> I suppose it could be either depending on context
22:10:50 <ais523> are you going to use Perl-style references, or not use references at all, or do them some other way?
22:10:53 <ehird> ais523: i don't think symrefs really fit in with this language
22:11:00 <ais523> no, not symrefs
22:11:01 <ehird> and ... i'm going to do them in the sane way: everything is a reference :)
22:11:05 <ais523> what about non-symbolic references?
22:11:19 <ais523> I rather like the Perl concatenate-sigils method of dereferencing
22:11:19 <ehird> ais523: don't need 'em
22:11:24 <ehird> a variable points to an object
22:11:30 <ehird> multiple variables can point to the same object
22:11:31 <ais523> yes, I didn't think you would need them
22:11:37 <ehird> and [1,2,3] is an object
22:11:39 <ais523> how do you point multiple variables to the same object?
22:11:40 <ehird> so is [[1,2,3],[4,5,6]]
22:11:45 <ehird> ais523: a = obj; b = a
22:11:56 <ehird> if you add an element to b, then a gets it as well
22:11:57 <ais523> so = just copies references
22:11:59 <ehird> don't want that, copy
22:12:01 <ehird> ais523: yes
22:12:04 <ais523> that confuses some people
22:12:26 <ehird> ais523: most languages i've used do it
22:12:30 <ehird> & it's perfectly intuitive to me
22:12:34 <ehird> needed no explanation
22:12:38 <ehird> it just seemed natural
22:12:49 <ais523> to me, it's unnatural but I can deal with it easily
22:13:05 <ais523> I expect = to copy; probably because I started off on C++, where an object and a reference to it are different things
22:13:19 <ehird> ais523: it not copying can shorten a lot of code
22:13:21 <ais523> presumably, == (or equivalent) compares values rather than references?
22:13:22 <ehird> perl suffers for this
22:13:33 <ehird> and yeah, it compares values, a class can define how it's compared
22:13:56 <ais523> someone on thedailywtf.com was talking about a strange consquence of Java's boxing model
22:14:07 <ais523> suppose you define 127 and 128 as boxed integers
22:14:16 <ais523> s/integer/Integer/
22:14:25 <ehird> ais523: the idea of boxed integers is retarded
22:14:34 <ehird> the integers i'll have will be objects, but they'll be values
22:14:37 <ais523> then comparing the 127s with == always returns true, comparing the 128s with == won't always
22:14:41 <ehird> so a = 2; b = a; b += 1; a == 2
22:14:48 <ais523> and comparing boxed Integers with < will always give the correct value
22:15:21 <ais523> because == compares pointers whenever possible, and boxed Integers from -128 to 127 have to be cached according to the spec...
22:15:32 <ais523> so you get the same boxed Integer each time
22:15:35 <ehird> ais523: mine is the python/ruby model
22:15:45 <ehird> play about with the python console for a few minutes, and it'll become intuitive
22:15:55 <ehird> or at least familiar
22:16:12 <ais523> so in that model, a not a reference at all? or = does something different when applied to an int reference?
22:16:24 <ais523> or, for that matter, += generates a new reference?
22:16:29 <ehird> ais523: ints are immediate values on a pointer
22:16:35 <ehird> the lowest bit is 0 for a regular object pointer
22:16:37 <ehird> 1 for an integer
22:16:41 <ehird> if it's 1, the rest of the pointer is the value
22:16:47 <ehird> ais523: there, explained as a c programmer ;)
22:16:51 <ais523> ehird: then you end up with silly things like 20-bit integers and other Lisp-isms
22:16:52 <ehird> and assigning just assigns the var slot to the same pointer
22:16:57 <ehird> and yes, you do, but ruby has this
22:16:58 <ais523> oh, and 65-bit pointers
22:17:02 <ehird> python does something but i don't know what
22:17:06 <ehird> ruby has a kind of clever way
22:17:08 <ehird> that alternates
22:17:10 <ehird> but .. yeah.
22:17:16 <ehird> ais523: i will let the HLL i implement this in handle it for me
22:17:18 <ehird> but that's how it'll be done
22:18:10 <ais523> are you planning to compile into Ruby?
22:18:15 <ais523> it almost sounds like you are
22:19:02 <ehird> ais523: who said anything about compiling :-)))
22:19:20 <ais523> nobody, but I'm wondering if it'll be easier than interpreting for this
22:19:56 <ehird> ais523: probably
22:20:01 <ehird> anyway, compiling to ruby would be a good idea
22:20:11 <ehird> it's a very portable interpreter, and is about to get much faster
22:20:14 -!- Iskr has quit ("Leaving").
22:20:16 <ehird> and has the useful semantics to make a compiler easier
22:20:21 <ehird> and it's not like IF needs to be fast anyway
22:20:22 <ais523> it seems to make the most sense as a target language out of the languages I know of
22:20:29 <ais523> see, I'm not a Ruby-hater, honest
22:20:36 <ais523> just because I don't know a lang doesn't mean I hate it
22:20:46 <ais523> I have a lot of respect for vi even though I hardly know it
22:20:58 <ehird> I never said you were a ruby hater
22:21:03 <ehird> Just that you were a perl lover :-)
22:21:09 <ais523> well, you implied it on a few occasions
22:21:13 <ehird> gosh my writing style has changed so much thanks to this place
22:21:17 <ehird> i never used to put a nose in :-)
22:21:22 <ehird> or do oko-style :)))))))))))))))))))))))
22:21:22 <ais523> is that a good thing or a bad thing?
22:21:27 <ehird> i have no idea
22:21:33 <ehird> but i have never said :-)))))) before coming in here
22:21:39 <ais523> even I've been known to smiley occasionally
22:21:39 <ehird> thanks a bunch, oklopol + others ;)
22:21:41 <ais523> I never used to
22:21:53 <ehird> ais523: you won't believe how I used to write onlin
22:21:53 <ehird> e
22:21:59 <ehird> it was peppered with 'lol'
22:22:05 -!- Tritonio has quit (Remote closed the connection).
22:22:07 <ais523> I rarely write lol
22:22:09 <ehird> i even used to slip in the occasional 'u', oh god
22:22:13 <ais523> nobody believes it nowadays
22:22:25 <ais523> I often do LOL in real life, but when that happens I spell it out in the channel
22:22:41 <ais523> because people just assume a lol is a typed thing
22:22:45 <ehird> i write lol when i find something really funny, but not enough to laugh
22:22:53 <ehird> I use 'AHAIHAUHHAHDASJASDKJADHKAJKAJAHAHAHAHHAHAA' when I actually go into seizures
22:23:17 <ais523> OK, that was a real-life laugh-out-loud for me, only a short one though, not the sort of thing that's left me laughing for several minutes
22:24:14 <ehird> ais523: yesterday I was playing a silly bot-run game on my private network
22:24:18 <ehird> at one point, it picked chanserv
22:24:21 <ais523> to do what?
22:24:28 <ehird> ais523: as the person for the next turn
22:24:36 <ehird> i laughed more than i probably should've
22:24:37 <ais523> and did you quickly hotpatch the interpreter so chanserv played out the turn?
22:24:47 <ais523> s/interpreter/ircd/
22:24:49 <ais523> how did I manage that?
22:24:56 <ehird> ais523: no, but that would have been very hardcore
22:25:05 <ehird> unfortunately, i just told it to skip the turn
22:25:07 <ehird> because i'm boring
22:25:09 <ehird> actually
22:25:13 <ehird> ais523: someone else skipped it before me
22:25:17 <ehird> and it picked chanserv
22:25:18 <ais523> what was the game?
22:25:18 <ehird> *again*
22:25:29 <ehird> a silly one that's hard to explain
22:25:39 <ais523> it wasn't TURKEY BOMB, was it?
22:25:45 <ehird> haha
22:25:48 <ais523> I can't play that, I don't drink alcohol
22:26:00 <ehird> ais523: actually, at one point I told it my turn was over
22:26:06 <ehird> and it told me that i had been selected for the next turn
22:26:15 <ehird> it seems to pick improbable combinations on purpose
22:26:18 <ais523> is that a nop in your game?
22:26:27 <ais523> or is having two turns in a row useful?
22:26:41 <ehird> ais523: it's not 'useful', just 'possible'
22:26:59 <ais523> I mean, is it an advantage to the player to have two turns in a row?
22:27:03 <ais523> or a disadvantage?
22:27:04 <ehird> not really
22:27:07 <ehird> it's not a nop
22:27:15 <ehird> but it doesn't really affect your either way
22:27:28 <ehird> i mean, you get to go twice. But that doesn't neccessarily mean it's a good turn-out
22:27:58 <ehird> ais523: I am going to work on functions in my language
22:28:55 <ehird> ais523: hmm
22:29:02 <ehird> ruby has %w(a b c) -> ["a","b","c"]
22:29:08 <ehird> well, %w{} and %w[] too
22:29:11 <ehird> but that's not the point
22:29:16 <ehird> ais523: what should i make it for mine?
22:29:47 <ais523> Perl uses qw for that
22:29:55 <ais523> I reckon you should use a string prefix
22:29:58 <ais523> like w"a b c"
22:29:59 <ehird> hmm
22:30:00 <ehird> good one
22:30:01 <ehird> yes
22:30:27 <ehird> hmm
22:30:45 <ehird> [a,b,c]:func(f) -> [a,f(a),b,f(b),c,f(c)]
22:30:50 <ehird> ais523: is that an already-named function?
22:31:24 <ehird> well, method
22:31:24 <ehird> :P
22:31:29 <ais523> the only existing language I can think of with anything remotely similar to that is Mathematica
22:31:40 <ais523> and even there it's a small lambda with a few built in functions
22:31:40 <ehird> ais523: what does it call it?
22:31:49 <ehird> i think i'll call it zoop
22:32:03 <ehird> because it's similar to a generic zip
22:32:10 <ais523> Riffle[#1,Map[#2,#1]] &
22:32:22 <ehird> [a,b,c]:genZip([d,e,f],f) -> [f(a,d),f(b,e),f(c,f)]
22:32:26 <ehird> so it's kinda similar
22:32:28 <ais523> oh, Mathematica syntax is painful to read, almost as bad as INTERCAL
22:32:58 <ais523> the problem being that you end up with more closing brackets than LISP
22:34:42 <ehird> yesses = w"yes y":zoop({|x| x:lower})
22:34:42 <ehird> nos = w"no n":zoop({|x| x:lower})
22:34:42 <ehird> yesno(Prompt)
22:34:43 <ehird> -> yesses:contains(prompt(Prompt, yesses ++ nos))
22:34:45 <ehird> <- {false}
22:34:47 <ehird> -> {true}.
22:35:00 <ehird> ais523: good?
22:35:16 -!- Tritonio has joined.
22:35:17 <ehird> yesses/nos would be translatable of course
22:35:19 <ais523> reasonable, but the use of zoop here is just ridiculous
22:35:35 <ehird> ais523: w"yes y YES Y" is kinda ugly
22:35:37 <ais523> and aren't you mapping lowercase strings into lowercase?
22:35:38 <ehird> I guess I can make a prompti
22:35:42 <ehird> (prompt insensitive)
22:35:50 <ehird> ais523: i guess this kinda thing is tied to the parser
22:35:55 <ehird> so writing a generic function to do it kinda sucks
22:35:58 <ais523> why don't you concatenate the lowercase to uppercase, rather than zooping?
22:36:17 <ehird> ais523: huh?
22:36:22 <ehird> w"yes y" -> ["yes","y"]
22:36:23 <ehird> so
22:36:28 <ehird> zooping:
22:36:34 <ehird> ["yes","yes":lower,"y","y":lower]
22:36:34 <ehird> so
22:36:40 <ehird> ["yes","YES","y","Y"]
22:36:51 <ais523> err... the "lower" function puts things into uppercase?
22:36:58 <ehird> ais523: err, yes, it does
22:37:00 <ehird> err..
22:37:01 <ehird> oh wait..
22:37:02 <ehird> hmm
22:37:05 <ehird> ais523: hahahahaha
22:37:09 <ais523> and why not come up with ["yes","y","YES","Y"]?
22:37:16 <ehird> and because that's not what zoop does
22:37:21 <ais523> it wouldn't require a riffle, just standard list operator
22:37:25 <ais523> s/$/s/
22:37:41 <ehird> ais523: i guess so, but still
22:37:43 <ehird> this seems more elegant
22:38:15 <ais523> well, the Mathematica implementation would have calculated both lists, and then done an expensive riffle rather than a hopefully-cheap concat
22:38:32 <ais523> I'm not sure about the cheapness, though, I get the impression that it copies objects around everywhere even when it doesn't need to
22:38:42 <ais523> it certainly seems to be an order of n slower than my Perl programs
22:38:56 <ehird> ais523: i'll define zoop
22:39:06 <ehird> (as a method)
22:39:10 <ehird> hmm
22:39:11 <ehird> good point
22:39:15 <ais523> so I can overload it? what fun!
22:39:20 <ehird> ais523: of course you can
22:39:21 <ehird> it's a method
22:42:13 <ehird> ais523: really the yes/no thing would be parser-specific
22:42:24 <ehird> it would accept things tagged as 'yes' or 'no' in the parser
22:42:38 <ais523> the right way to do it is to pass the yes and no into the question thing
22:42:46 <ais523> and for yes and no to be defined elsewhere
22:42:53 <ais523> so I can answer in Latin if I want to
22:43:03 <ehird> ais523: well, yes
22:43:08 <ehird> that's a low-level version of what i'm saying
22:43:39 <ehird> prompt(Prompt, {|x| x:isTagged("bool")})
22:43:52 <ehird> ais523: where tags are things parsers give to terms
22:44:08 <ehird> by the way
22:44:08 <ehird> http://reddit.com/r/programming/info/6i72j/comments/
22:44:13 <ehird> catseye.tc on proggit
22:45:17 <ehird> ais523: My language is gonna be hell to implement it's so featureful :-)
22:45:18 <ehird> Not complex.
22:45:21 <ehird> Just featureful.
22:45:35 -!- helios24 has quit ("Leaving").
22:45:52 <ais523> they were talking about Shelta, apparently
22:46:02 <ehird> yes
22:46:14 <ehird> The esoteric use of the word "esoteric" aside <-- a possible convert
22:46:33 <ehird> my reddit name has been splurged a lot over that page..
22:47:51 <ehird> ais523: also, a lot of special-purpose languages let you e.g. write to stdout/stdin 'anyway'
22:47:53 <ehird> for 'completeness'
22:47:54 <ehird> i won't
22:48:01 <ehird> a real 'hello world' in my language will be impossible
22:48:04 <ehird> because it leads to hacks and abuse
22:48:05 <ais523> not even for debug purposes?
22:48:12 <ehird> ais523: there'll be a debugging system
22:48:20 <ais523> anyway, writing to stdin is kind-of strange
22:48:20 <ehird> as well as something similar to a 'just print out this object'
22:48:25 <ais523> although reading from stderr is almost standard
22:48:27 <ehird> ais523: err, i meant read/write
22:48:31 <ehird> but, you know what i mean
22:48:42 <ehird> mine will only contain things for adventure games and the things you calculate within them
22:48:51 <ehird> no scripting support or anything of the sort
22:49:06 <ehird> because it's a special-purpose language
22:49:10 <ais523> ehird: maybe you could write it in Perl and sandbox it properly, and then add it to PerlNomic
22:49:15 <ais523> I wouldn't advise that, though
22:49:25 <ehird> ais523: I'd go mad writing it in Perl..
22:49:26 <ais523> Perl isn't a good lang for this sort of thing
22:49:29 <ehird> It's so different from Perl's model
22:49:54 <ehird> ais523: My current idea is to compile the program into a high-level bytecode
22:49:57 <ehird> like Prolog does
22:50:01 <ehird> so that it's expressive like ruby
22:50:02 <ehird> but portable
22:50:09 <ehird> and then you could write a bytecode interp for perl
22:50:14 <ehird> ais523: incidentally, that harks back to the z machine
22:50:42 <ehird> ais523: oh, and here's some fun ruby trickas
22:50:44 <ehird> *tricks
22:50:51 <ehird> print if /Ruby/ while gets # lots and lots of $_!
22:50:59 <ehird> print STDIN.grep /Ruby/ # yes ... you can grep stdin
22:51:09 <ehird> $ ruby -pe '$_ = "" unless /Ruby/' # okay jeez this is just silly now
22:51:45 <ais523> most of those tricks work in Perl too, I think
22:51:48 <ais523> but with different syntax
22:52:01 <ais523> not the grep one, though, I don't think, because <> is insufficiently lazy
22:54:32 <ehird> ais523: so any suggestions for the language?
22:54:44 <ais523> not right now, actually I'd better go home now
22:54:46 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1"").
22:56:13 <ehird> anyone else care about my lang? ;)
22:57:21 <Slereah> As much as I care about the starving children in Somalia.
22:57:28 <ehird> Slereah: So, a lot.
22:57:40 <Slereah> But not enough to actually do something.
22:57:52 <ehird> :(
22:58:39 <Slereah> You know me and computers.
23:12:58 -!- slereah_ has joined.
23:14:01 <ehird> GregorR: You?
23:14:16 -!- Slereah has quit (Read error: 104 (Connection reset by peer)).
23:19:49 <ehird> So 'm writing a joy compiler
23:19:51 <ehird> Anyone interested?
23:29:59 <ehird> http://rafb.net/p/0RDI6r92.html
23:30:04 <ehird> 'rest', C version
23:35:56 -!- timotiis has quit ("leaving").
23:50:17 -!- slereah__ has joined.
23:54:06 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)).
23:58:44 -!- slereah__ has quit (Read error: 104 (Connection reset by peer)).
←2008-05-05 2008-05-06 2008-05-07→ ↑2008 ↑all