00:00:21 <ehird> Slereah: Aww come on
00:07:18 -!- timotiis has quit (Read error: 110 (Connection timed out)).
00:13:29 -!- Corun has joined.
00:40:33 -!- Slereah has changed nick to Amiral_Ackbar.
00:40:40 -!- Amiral_Ackbar has changed nick to Slereah.
00:41:17 <Slereah> ehird : You don't know what you want!
00:54:34 -!- ehird has quit (Remote closed the connection).
00:54:43 -!- Corun has quit ("This computer has gone to sleep").
01:37:01 -!- sebbu has quit ("@+").
01:45:25 -!- lifthrasiir has quit (Read error: 104 (Connection reset by peer)).
01:45:49 -!- lifthrasiir has joined.
04:57:43 -!- pikhq has quit (Read error: 110 (Connection timed out)).
05:21:16 -!- Judofyr has quit (Read error: 110 (Connection timed out)).
05:36:59 -!- Sgeo has quit ("Ex-Chat").
06:33:27 -!- olsner has joined.
07:34:30 -!- olsner has quit ("Leaving").
07:39:20 <oklopol> off to database normalization demonstration situation menstruation ->
07:39:22 -!- oklopol has quit ("( www.nnscript.com :: NoNameScript 4.2 :: www.regroup-esports.com )").
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:00:53 -!- Deformati has quit (SendQ exceeded).
08:30:46 -!- Slereah has quit (Read error: 110 (Connection timed out)).
08:30:55 -!- oklopol has joined.
08:45:35 -!- Iskr has joined.
09:43:58 -!- oklofok has joined.
09:47:30 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
09:47:54 -!- oklopol has joined.
09:48:25 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
09:50:32 -!- oklofok has joined.
09:51:03 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
10:54:05 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
10:54:23 -!- oklopol has joined.
11:17:43 -!- oklopol has quit (Connection timed out).
11:35:55 -!- oklopol has joined.
11:48:42 -!- Corun has joined.
12:48:26 -!- Corun has quit ("This computer has gone to sleep").
12:49:11 -!- Corun has joined.
13:37:08 -!- pikhq has joined.
13:55:29 -!- Corun has quit ("This computer has gone to sleep").
14:29:27 -!- oklopol has quit (Read error: 110 (Connection timed out)).
14:53:31 -!- ehird has joined.
14:58:18 -!- Corun has joined.
15:09:44 -!- Judofyr has joined.
15:13:30 -!- timotiis has joined.
15:17:15 -!- Epic_Fail_Guy has joined.
15:17:16 -!- Epic_Fail_Guy has changed nick to Slereah.
15:19:12 <ehird> Slereah: I think you just caused a paradox
15:54:45 -!- ais523 has joined.
15:55:57 * ais523 is busy upgrading Ubuntu
15:56:25 <ais523> it worked fine last time
15:56:29 <ais523> the problem is it takes about 4 hours
15:57:09 <ehird> ais523: http://gitorious.org/projects/cyclexa/repos/mainline there's something distinctly arty about that "No Data"
15:57:21 <ais523> and stops every now and then to ask questions
15:57:33 <ehird> ais523: 'do you still love me?'
15:57:40 <ehird> 'okay, continuing installation'
15:58:01 <ais523> ehird: it's more 'these are all the changes that will be made, are you sure about them'
15:58:23 <ehird> ais523: that's so pointless. what if you're far enough in the upgrade that there's no other option anyway??
15:58:27 <ais523> I suspect Firefox and Konversation will randomly stop working at some point, as bits of them are uninstalled and they weren't open
15:58:33 <ais523> and those questions happen before there's no option
15:58:49 <ais523> once you've said yes, like I just did, it restricts itself to asking about configuration clashes
15:59:03 <ais523> i.e. when you've customised something, and they've customised the same thing a different way
15:59:06 <ehird> ais523: i have an idea -- what would levenshtein distance look like in cyclexa?
15:59:11 <ehird> i assume cyclexa has multiple inputs.
15:59:11 <ehird> if not, that sucks
15:59:32 <ais523> ehird: I haven't implemented multiple inputs
15:59:44 <ehird> ais523: you haven't implemented any of it, as far as i know
15:59:44 <ais523> but I have syntax for multiple outputs, and a multiple input syntax would work the same way
15:59:52 <ais523> ehird: I mean I haven't specced them
15:59:55 <ehird> also, i assume the output and input are lazy?
16:00:01 <ehird> that is, if you run a cyclexa program output=stdout and input=stdin
16:00:07 <ehird> you can use it like e.g. an interactive BF program
16:00:20 <ehird> ais523: but input isn't? that is a shame
16:00:29 <ais523> input of the original program isn't lazy, but could be
16:00:29 <ehird> ais523: that means you can't e.g. do a proper brainfuck in cyclexa
16:00:38 <ais523> there's a lazy input command
16:00:41 <ehird> we can always fix this later, anyway
16:00:53 <ais523> that is, Cyclexa inputs from an input string nonlazily
16:00:58 <ais523> and also optionally from the user lazily
16:01:11 <ais523> in a Cyclexa program, as opposed to Cyclexa used as a regex engine, the input string is the null string
16:01:21 <ehird> ais523: also, I am so going to use cyclexa in any perl program i make from now on :-)
16:01:47 <ais523> ehird: half the time I was using the lexer I was wishing I could use Cyclexa, because it would have been easier
16:02:03 <ehird> my $c = Cyclexa->new("..."); my $out = ""; $c->run("hello", \$out)
16:02:06 <ehird> \$out passes a reference to $out right?
16:02:11 <ehird> well, whatever it is :-)
16:02:26 <ehird> though there'll probaly be a Cyclexa->run("...", "hello") -> out
16:02:56 <ais523> \$out passes a reference to $out
16:03:04 <ehird> sub run { my ($cls, $expr, $in) = @_; my $self = $cls->new($expr); my $out = ""; $self->run($in, \$out); $out; } # I believe
16:03:07 <ais523> &$out passes a procedure whose name is given by $out
16:03:18 <ais523> symbolic references, you have to love them
16:03:32 <ais523> alternatively, if $out happens to be a reference to a procedure, then &$out is that procedure
16:03:54 <ais523> of course, with prototypes, you can avoid the need for the \
16:03:59 <ais523> but that just confuses the user
16:04:10 <ehird> ais523: perl's variable sins are odd, but php's odder
16:04:17 <ehird> variable variables
16:04:25 <ehird> $foo = "hello"; $bar = "foo"; $$bar -> "hello"
16:04:31 <ais523> ehird: you can do that in Perl too
16:04:33 <ehird> they can nest to an infinite depth
16:04:38 <ehird> ais523: but can perl do this:
16:04:51 <ehird> $obj = ...; $foo = "obj"; $bar = "meth"; $$foo->$bar(...);
16:04:58 <ehird> that's $obj->meth(...)
16:05:11 <ais523> you may need braces in there somewhere for disambiguation
16:05:26 <ais523> I think nowadays you're meant to write ${$foo} if you really want $foo to be the name of the variable
16:05:28 <ehird> ais523: okay, then, perl is just crazy
16:05:40 <ehird> ais523: but php's use of $ is just ridiculous
16:05:46 <ehird> it's .... just ... i mean..
16:05:49 <ehird> it doesn't mark anything.
16:05:54 <ehird> for no damn reason.
16:06:05 <ais523> ehird: in Perl, a symbol table entry is a data tyep
16:06:19 <ais523> and I think you can assign to them to do operand overloading INTERCAL-style
16:06:22 -!- timotiis has quit (Read error: 110 (Connection timed out)).
16:06:23 <ehird> ais523: you can get to perl's call stack, can't you?
16:06:31 <ais523> ehird: yes, but I don't know how
16:06:43 <ais523> that's how Carp works, for instance, I think
16:06:43 <ehird> ais523: i guess you can't do real continuations though
16:07:56 <ais523> ah, I've looked up how symbol table overloading works
16:08:07 <ais523> causes $foo to actually refer to $bar
16:08:16 <ais523> and likewise @foo to actually refer to @bar
16:08:34 <ais523> nowadays there are saner alternatives
16:08:35 <fizzie> I've written one piece of perl in continuation-passing-style, which gives you real-enough continuations.
16:08:51 <ehird> fizzie: Continuation-passing style is awkward. Why would I want to code liek that?
16:09:03 <ehird> Plus, since EVERYONE ELSE's code isn't in CPS, your continuations only span a little bit
16:09:34 <ais523> the main benefit of CPS is that you don't need to maintain a call stack
16:09:38 <fizzie> It was a very stand-alone piece of code; but I'm not saying anyone would _want_ to write like that.
16:11:05 <fizzie> Tragicomically Perl doesn't realize it's CPS, and even throws a "deep recursion in foo" error at one point.
16:11:45 <ehird> fizzie: NEWSFLASH! Perl does not do TCO!
16:11:52 <ehird> Also, Perl cannot magically realise how your program is written!
16:12:04 <ehird> (was that assish enough)
16:12:12 <fizzie> I think it was quite assy, yes.
16:13:23 <ehird> but seriously, how is that tragicomical?
16:13:32 <ehird> perl can't see what you're program is about
16:14:03 <ehird> ais523: hm, don't you need to fix a lexer bug before writing hte cyclexa parser?
16:14:18 <ais523> that particular bit confuses me
16:14:24 <ais523> and it can be fixed at any time later
16:14:35 <ais523> because the output the lexer produces is still valid
16:14:42 <ais523> just doesn't correspond to the input
16:14:51 <ais523> it's not like \ca is a major language feature anyway
16:15:18 <ehird> ais523: but ... what is the actual bug and how do we fix it :)
16:15:36 <ais523> the bug is that \ca is escaped incorrectly by {}
16:15:45 <ais523> I think because preceding backslashes aren't being detected properly
16:15:55 <ehird> (can you tell i don't understand your lexer?)
16:16:22 <ais523> ehird: the problem is that Cyclexa has lots of escaping mechanisms
16:16:39 <ais523> \+ means a literal +, and the same with any punctuation mark
16:17:18 <fizzie> Maybe it's only tragic; but at least that's what it is. Think of the poor interpreter, ceaselessly toiling on the call stack, all in vain.
16:19:54 <ais523> {stuff containing no braces and with a non-digit non-comma character} escapes everything between the braces
16:19:54 <ais523> and {{identifier{stuff}identifier}} escapes stuff
16:19:54 -!- ais523 has quit (Remote closed the connection).
16:20:09 -!- ais523 has joined.
16:20:09 -!- ais523 has quit (Remote closed the connection).
16:20:25 -!- ais523 has joined.
16:20:38 <ehird> upgraded, mr ais523?
16:20:56 <ais523> what's the last thing I said you saw
16:21:15 <ais523> and I'll have to start the upgrade again now because it happened during the download
16:21:36 <ais523> near the start, luckily
16:22:39 <ais523> they should have a proper download manager...
16:23:01 <ais523> once the download phase is done (which happens first and is cancelable), then it does all the installation
16:24:38 <ehird> ais523: so is the lexer trivially fixable, or.
16:24:56 <ais523> ehird: not trivially, in fact I found another bug
16:25:04 <ais523> \\\ wasn't tokenised correctly as \\@\
16:25:24 <ais523> it's good enough to start work on the rest of the compiler, though
16:25:41 <ais523> maybe we should rewrite the lexer from scratch to give a token list rather than a flat-string
16:26:03 <ehird> ais523: maybe even make token tags OBJECTS!!2121 ... Nah, I'm not THAT evil.
16:26:10 <ehird> But a rewrite seems nice. The current one is just crazy.
16:26:22 <ais523> ehird: if you make them objects, pick a language that isn't Perl
16:26:30 <ais523> Perl's OO model is awful
16:26:44 <ehird> ais523: I agree. But for a *parse tree*, I expect that objects will be the best way.
16:27:01 <ehird> However, Perl is tempting because it has turing-complete regexps already
16:27:11 <ais523> ehird: not really, you have to embed inline Perl in them
16:27:30 <ehird> ais523: But I can't think of any language that would really be good at this.
16:28:47 <ehird> ais523: Ruby would work but in this case I think it'd just function as a Perl with less powerful regexps and nice OOP.
16:28:49 <ais523> ah, this connection's a lot better, I'm 1/3 of the way through the download already. (I just went round the corner to a different part of the library.)
16:28:51 <ehird> Also it'd be dog-slow.
16:29:05 <ehird> Well, Perl is dog-slow already. But ruby is one of the slowest languages out there.
16:29:06 <ais523> ehird: no, not Ruby for something like this that's likely to be inefficient anyway
16:29:19 <ehird> ais523: Well, if we're compiling that isn't a problem
16:29:28 <ais523> ehird: we're still going to need a hefty runtime
16:29:40 <ais523> besides, if we're compiling, what are we compiling into?
16:29:45 <ehird> ais523: True -- but we don't have to compile *to Ruby* if we use Ruby.
16:29:50 <ehird> I'm not convinced, though.
16:30:03 <ehird> I mean, the classes rock, but I can't see many advantages on the others.
16:30:14 <ehird> I mean, it is golfable so it's better than many other languages, but even so
16:30:23 <ehird> And I have no idea regarding what to compile into.
16:30:31 <ais523> Perl's about as golfable as Ruby
16:30:32 <ehird> A lot of regexp engines compile to a DFA.
16:30:36 <ehird> But we'd need a Turing machine.
16:30:38 <ais523> and if we're compiling into something, I'd like it to have an eval()
16:30:39 <ehird> That's pretty pointless.
16:30:59 <ehird> ais523: yes, it is more golfable -- but Ruby's OOP is not horrific, is what i'm saying
16:31:02 <ais523> compiling into something with backtracking capabilities built-in may be a good idea
16:31:03 <ehird> still not convinced though
16:31:14 <ais523> but that limits the field to Prolog and INTERCAL
16:31:17 <ais523> neither of which has an eval
16:32:05 <ehird> ais523: why is eval so important
16:32:16 <ais523> it's not all that important
16:32:27 <ais523> but it would be nice to be able to call Cyclexa regexps at runtime
16:32:41 <ais523> i.e. just write cyclexa("regex","input") in a program, and call it
16:32:54 <ais523> that either requires an interpreter or a compiler into something interpretable/evalable
16:33:52 <ehird> ais523: oh, yes, i want that too
16:33:52 <ais523> anyway, here's a plan for an improved lexer:
16:34:11 <ehird> hmm ... it really seems like Perl is the best route for this
16:34:14 <ais523> start with a data structure containing the entire program marked as unlexed
16:34:19 <ais523> and change bits into token lists marked as lexed
16:34:23 <ehird> the parser will either have to be very ugly for Perl's OOP
16:34:26 <ehird> or unpleasant to work with
16:34:41 <ehird> ais523: wouldn't a regular lex-esque approach work?
16:34:51 <ais523> ehird: lex can't handle Cyclexa lexing
16:35:11 <ehird> ais523: why not? Is it TC?
16:35:14 <ais523> operator tokenisation preferences are something only Cyclexa has AFAIK
16:35:23 <ais523> and also the escaping methods require infinite lookahead
16:35:36 <ehird> ais523: do they? yiieeeeks
16:35:56 <ais523> {123456123456123456,123456123456123457} is a repetition count
16:36:09 <ais523> {123456123456123456,12345612345612345a} is an escaped string
16:36:24 <ais523> the rule is it's a repetition count if there's nothing but commas and digits inside the bracse
16:36:28 <ais523> and an escaped string otherwise
16:36:41 <ais523> {} escaping is really convenient, though
16:37:08 <ehird> ais523: can't you pick another character
16:37:13 <ais523> {string} is more readable than \s\t\r\i\n\g (assuming the string's actually made of punctuation marks)
16:37:22 <ais523> ehird: most punctuation characters are strongly overloaded already
16:37:34 <ais523> and I wanted to leave a few for use by the user
16:37:44 <ais523> the language isn't designed to be easy to lex, but to be easy to use
16:37:55 <ais523> the lexing isn't ambiguous and doesn't require TCness
16:37:57 <ehird> ais523: that isn't easy to use though, really
16:38:00 <ais523> it just needs to be done in several stages
16:38:29 <ais523> although, I suppose that using <> for quoting would make quotations nestable
16:38:36 <ais523> like they are in Underload
16:38:45 <ais523> not sure how useful that is in Cyclexa, but there's probably some use for it
16:38:58 <ais523> I'm a bit dubious about {{a{}a}} quoting too
16:39:04 <ehird> ais523: it seems kinda hacky
16:39:19 <ais523> the idea was that you can pick appropriate identifiers so you can put anything there without worrying about injection attacks
16:39:19 <ehird> you could always leave ascii behind
16:39:37 <ais523> but quotemeta does that just as well
16:40:47 <ais523> so, we're settled on <quote> and \q\u\o\t\e for the time being?
16:41:01 <ehird> ais523: seems good
16:41:01 <ehird> what would you want < and > for anyway?
16:41:05 <ehird> a lot of normal regexp engines utilize < and > iirc
16:41:37 <ais523> ehird: I was imagining using them as nestable chars for working in a sort of Thutu/Cyclexa mix
16:41:49 <ais523> but \CAPITALLLETTER works just as well
16:41:54 <ais523> they all become nonexistent characters that can't be in the input string
16:41:56 <ehird> nesting quotes doesn't sound too good
16:42:00 <ehird> <<<<> might be useful
16:42:18 <ais523> ehird: actually, nesting quotes would mix strangely with backslashes
16:42:23 <ais523> because <\a> should be \\\a
16:42:29 <ais523> but what should <\>> be?
16:42:39 <ais523> that's a problem even without nesting quotes
16:42:46 <ais523> for the {} I banned {} inside a {}
16:42:58 <ehird> ais523: <\>> should be \>
16:43:23 <ehird> because then that's ambigious
16:43:36 <ehird> you need to special case \> so that <...> quoets can contain any string
16:43:38 <ais523> what should it mean? Is it a syntax error due to the unmatched >?
16:43:41 <ehird> <\>> is 'literal >'
16:43:49 <ehird> <\\>> is a syntax error, unmatched >
16:43:54 <ais523> so \ escapes < and > even inside <>, but nothing else?
16:44:00 <ehird> <\\\>> is 'literal \', 'literal >'
16:44:02 <ais523> well, < > and \, but nothing else
16:44:52 <ais523> if we do that, \ should be taken literally if followed by any character not in \ < >
16:45:19 <ehird> ais523: no, that's ambigious..
16:45:41 <ehird> is 'literal \', 'literal a', 'literal \', 'literal >'
16:46:15 <ais523> oh, I remember what I was planning to use <> for, but this is a crazy idea that should probably never be done
16:46:28 <ais523> the idea was you could match against <font color='red'>a</font> and it would match a red a in your document
16:46:52 <ehird> ais523: err, i think not
16:47:00 <ais523> yes, that's probably best avoided
16:47:16 <ais523> [ and ] aren't being used at the moment except for backwards compatibility with ordinary regexps
16:47:24 <ais523> they're depreciated in favour of '
16:47:44 <ais523> so if rich-text matching is really a requested feature, we can use bbcode rather than HTML
16:48:00 <ais523> but let's stick to plaintext for now
16:48:18 <ehird> ais523: backwards compatibility? bah
16:48:42 * ais523 thinks about what a Levenstein difference function would be
16:49:03 <ais523> that's +1 for each insertion, deletion, or change, isn't it?
16:49:24 <ehird> ais523: http://en.wikipedia.org/wiki/Levenshtein_distance yes
16:49:48 <ehird> ais523: beware the algorithm on that page
16:49:53 <ehird> it mixes 0..X and 1..X arrays
16:52:09 <ehird> ais523: so should we nuke Lexer.pm?
16:52:14 <ehird> or move it out of impl/ i guess
16:52:20 <ais523> ehird: yes, move it to some old/ directory
16:52:33 <ehird> mkdir ../../scraps; mv Lexer.pm ../../scraps
16:52:36 <ehird> ais523: so, in impl/ but not src/
16:52:48 <ehird> scraps isn't a good name but i have never foudn a better name for it
16:52:52 <ehird> i often have it in projects
16:53:09 <ehird> ais523: hokay, let's see how git likes moves
16:53:23 <ehird> 'git mv' is what i need i believe
16:54:12 <ehird> ais523: pushing now
16:54:14 <ehird> that was very easy
16:54:42 <ehird> compare with CVS, which doesn't like files moving :-)
16:54:44 <ehird> (in case you've never tried to use CVS: it has no renaming/moving operation)
16:54:47 <ehird> (you have to either lose all your revision history, or manually hack the RCS files to point to the new name)
16:54:54 <ehird> ais523: 'git pull'
16:55:46 <ehird> okay, i will now start on a new lexer
16:56:01 <ais523> (x*)^+(.|(+??.)|(+??.)|)\D(.|(+??.)||(+??.)):2(|x|x|x)^:2(?0\1)$
16:56:02 <ehird> ais523: as far as your data structure idea goes: Cyclexa::Lexer can be a class
16:56:11 <ehird> that's not that ugl
16:56:28 <ehird> Lexer->new("my cyclexa program")->lex;
16:56:31 <ais523> that's Levenshtein distance in unary
16:56:49 <ehird> actually, you know what bothers me about languages
16:56:57 <ehird> there's no way in most of them to unify strings & files & stuff
16:57:03 <ehird> that is, a generic 'Sink'
16:57:10 <ehird> or rather... Tap, I guess.
16:57:22 <ehird> but, a lexer could make use of it, so you could pass it just about anything
16:57:27 <ais523> ehird: that's very inefficient, though, the way I wrote it
16:57:36 <ehird> Levenshtein is inefficient, period
16:57:39 <ais523> I think it could be made more efficient, but it wouldn't be as simple
16:57:50 <ais523> ehird: what I wrote isn't even P-time
16:58:09 <ais523> oh, there was an error
16:58:09 <ehird> ais523: you know what's funny?
16:58:11 <ais523> (x*?)^+(.|(+??.)|(+??.)|)\D(.|(+??.)||(+??.)):2(|x|x|x)^:2(?0\1)$
16:58:12 <ehird> a CMS site that doesn't run on that cms
16:58:24 <ais523> ehird: do you have one in mind?
16:58:44 <ehird> ais523: Yes. I just found one randomly:
16:58:44 <ehird> http://www.hippocms.org/
16:59:41 <ais523> some version control systems are designed for some purposes
16:59:57 <ais523> in such cases using a different version control system for the system's source itself could be beneficial
17:00:18 <ehird> ais523: I just like bootstrapping. :)
17:02:01 <ehird> ais523: Cyclexa should be written in Cyclxea
17:02:10 <ais523> ehird: I thought that too
17:02:17 <ais523> but we need to get the cycle started somehow
17:02:32 <ehird> ais523: No we don't. Ninjacode was going to be written in ninjacode.
17:02:42 <ais523> ehird: but you still need something to bootstrap it
17:02:50 <ehird> To git@gitorious.org:cyclexa/mainline.git
17:02:50 <ehird> ! [rejected] master -> master (non-fast forward)
17:02:50 <ehird> error: failed to push some refs to 'git@gitorious.org:cyclexa/mainline.git'
17:02:53 <ais523> even if it's a minimal Ninjacode interp in C, for instance
17:03:01 <ehird> i think that means i forgot to pull your changes
17:03:27 <ehird> git pull, git merge, git push.
17:03:43 <ais523> I still have the newest commit according to gitorious.org
17:03:47 <ais523> and why is git merge needed?
17:03:48 <ehird> ais523: yes, my push failed
17:03:58 <ehird> and because you changed lex.pl and i changed without updating
17:04:03 <ehird> it just needs to sync them
17:08:35 <ehird> ais523: oh, that was easy
17:08:53 <ais523> you still haven't committed...
17:08:54 <ehird> it was actually me not understanding git that made me take so long
17:09:10 <ehird> ais523: ah, i have *committed*
17:09:41 <ehird> ais523: http://gitorious.org/projects/cyclexa/repos/mainline
17:09:49 <ehird> also note that it generated another revision to merge
17:09:52 <ehird> really it looks like this
17:10:06 <ehird> ditch old lexer add a newline
17:10:12 <ehird> but the display there is linear
17:10:14 <ehird> so it looks odd :)
17:10:28 <ehird> ais523: Try 'gitk' once you pull.
17:10:28 <ais523> merging is the thing that git's really good at
17:10:34 <ehird> It shows a graphy thingy on the side of the revision list
17:10:52 <ehird> You can see how the same revision splits for our two changes, and then it gets unified again.
17:11:20 <ehird> ais523: P.S. you need to set your email in git
17:11:24 <ehird> http://gitorious.org/projects/cyclexa/repos/mainline
17:11:27 <ehird> <ais523@dell.linuxdev.us.dell.com>
17:11:30 <ehird> is the current one
17:11:33 <ehird> ehird@debian.(none)
17:11:40 <ehird> ais523: man git-config
17:12:05 -!- olsner has joined.
17:12:12 <ehird> 'git config user.email foo'
17:13:07 <ehird> ais523: it occurs to me that that merge was pointless
17:13:09 <ehird> lex.pl is now uselses
17:13:32 <ehird> i'll just remove it, because it's trivial and not useful for having around reall
17:13:46 <ais523> it wasn't quite pointless, it let me learn how to push
17:13:53 -!- Sgeo[College] has joined.
17:13:58 <ehird> ais523: no, my merge was
17:14:04 <ehird> my merging of your lex.pl change and my Lexer.pm move
17:14:14 <ehird> whereas, lex.pl is now useless, so it can be just deleted
17:14:17 <ehird> which i'm doing now
17:14:19 <ehird> Sgeo[College]: hello!
17:15:00 <ehird> ais523: pushed the removal
17:15:55 <ais523> did it mark one for each line in the file, or something?
17:16:12 <ehird> Also, my name is now showing as ehird, instead of elliott hird.
17:16:15 <ehird> And is linked. Wtffff
17:16:24 <ehird> ais523: Okay, set your email to whatever it was in your gitorious profile
17:16:30 <ehird> that's how gitorious knows you're the user ais523
17:16:32 <ehird> see: http://gitorious.org/projects/cyclexa/repos/mainline
17:16:37 <ehird> it only just now got that i'm ehird
17:16:57 <ehird> ais523: because, if you clone a git repository onto gitorious
17:17:02 <ehird> it'll show users as their name, unlinked
17:17:06 <ehird> if it doesn't recognize them by email
17:17:10 <ehird> it thought i was some random person
17:17:16 <ehird> but now my email is correct it knows i'm the user ehird
17:17:32 <ehird> hmm, I wonder if cia.vc supports git. I've always wanted to test that
17:17:54 <ehird> ais523: it is a project stats tracker
17:17:56 <ehird> but most commonly,
17:17:59 <ehird> it's a bot on freenode
17:18:06 <ehird> that sends out messages to a channel on commits and similar
17:18:59 <ehird> http://cia.vc/doc/
17:19:11 <ehird> ais523: it makes us show up in a central channel too
17:19:38 <ais523> ehird: are you testing it now?
17:19:46 <ehird> ais523: might as well
17:19:53 <ehird> #cyclexa, because anywhere else would be out-of-place
17:19:57 <ehird> don't want to flood #esoteric obviously
17:29:55 <ehird> ais523: fun fact -- git used to pollute the global namespace
17:30:02 <ehird> 'merge-base', 'write-tree', 'commit-tree'
17:31:14 <ais523> ehird: you mean /usr/bin namespace?
17:31:23 <ais523> it installs a command called perror
17:31:32 <ehird> ais523: yeah, /usr/bin
17:31:47 <ehird> ais523: okay, so let's get this new lexer started
17:31:56 <ehird> Cyclexa::Lexer is a class which stores the neccessary data
17:32:00 <ehird> that seems like an elegant base to me
17:32:08 <ais523> the class stores data?
17:32:09 <ehird> also, the lex tree is a list of tokens of some sort... Cyclexa::Token?
17:32:12 <ais523> or an object based on the clas?
17:32:12 <ehird> ais523: err, the instance
17:32:14 <ais523> or an object based on the class?
17:32:30 <ehird> the object based on, yeah
17:32:43 <ehird> ais523: I mean, two classes won't be too bad will they?
17:32:47 <ehird> just having a generic Token type
17:32:52 <ais523> ehird: this is Perl's OO model we're talking about
17:32:58 <ais523> I don't understand it at all, really
17:33:02 <ehird> ais523: i kind of understand it.
17:33:06 <ehird> It's not too hard:
17:33:22 <ehird> a->b(...) is classofa::b(a, ...)
17:33:34 <ehird> bless X, classname is magic
17:33:40 <ehird> basically, you give it a hash (most likely)
17:33:44 <ehird> and it turns it into an object
17:33:48 <ehird> blass a, classname
17:33:50 <ais523> I sort of get that much
17:33:51 <ehird> means that in the above
17:33:53 <ehird> classofa is classname
17:34:02 <ehird> ais523: now, classes are kind of their own class
17:34:04 <ais523> but you need to give lots of stuff telling it how to bless
17:34:07 <ehird> X->new is X::new(X, ...)
17:34:31 <ehird> ais523: and no, you don't really
17:34:52 <ehird> ais523: however, 'new' isn't a special name
17:35:12 <ehird> is worth mentioning
17:35:12 <ehird> http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlobj.pod seems to make sense
17:35:17 <ais523> I can just type perldoc perlobj over here to get that
17:35:30 <ais523> just like perldoc spec.pod gives me the Cyclexa spec when I'm in the right directory
17:35:46 <ehird> ais523: i like the web
17:36:09 <ais523> ehird: you're normally connected to it :)
17:36:45 <ehird> http://rafb.net/p/qqYkbQ67.html
17:36:51 <ehird> basic perl class skeleton as i see it
17:37:00 <ehird> kinda ugly, but not too complex
17:37:12 <ehird> ais523: maybe we should use Moose
17:37:21 <ehird> http://search.cpan.org/~stevan/Moose-0.40/lib/Moose.pm
17:37:39 <ehird> ais523: it's a perl object system thingy, but has aspects and stuffs.
17:37:42 <ais523> ehird: I want to avoid using modules as much as possible, or you end up with dependency hell
17:37:55 <ehird> ais523: Perl, with its CPAN, having depdenency hell is so hilarious
17:37:56 <ais523> I prefer to stick with the ones which come with Perl, like Carp
17:38:00 <ehird> i hate CPAN so much, it's horrible to use
17:38:07 <ehird> sure it has a lot of packages
17:38:09 <ehird> but good luck using them
17:38:12 <ais523> ehird: I can't open links to CPAN in Konqueror for some reason
17:38:25 <ais523> but Konqueror can't resolve the DNS
17:38:29 <ais523> yes, I know that's a contradiction
17:38:34 <ais523> maybe it has a bad cached value, or something
17:38:49 <ehird> has 'src' => (is => 'r', isa => 'Str') # this is nice though, admit it
17:38:56 <ehird> as well as "extends 'Foo';"
17:39:16 <ehird> also, a sane 'super'
17:39:27 <ais523> does it support multiple inheritance?
17:39:33 <ehird> ais523: i think so
17:39:44 <ehird> however i rarely see the need for MI
17:41:20 <ehird> ais523: also, use Moose; means use warnings; use strict;
17:41:36 <ais523> ehird: wow, that's bad practice
17:41:39 <ais523> I like warnings and strict
17:41:45 <ais523> but I should specify them myself
17:41:51 <ehird> ais523: in #perl Moose is *very* highly regarded
17:41:51 <ais523> they shouldn't be specified in another module
17:42:10 <ais523> #perl seems dedicated to preventing new users cutting themselves
17:42:16 <ais523> that's a worthy goal, but I'm used to C...
17:42:42 <ehird> #perl has always been quite unfriendly to me as a newbie
17:44:02 <ais523> anyway, our token class...
17:44:21 <ehird> ais523: yes, that hting
17:44:24 <ais523> there's the default command, which needs a token for every character in existence and a few extra
17:44:44 <ehird> $tok->type = Token::LITERAL; $tok->char = 'a';
17:44:47 <ais523> then there are other commands, which have tokens of their own
17:44:53 <ehird> although, really, we should have Literal subclassing Token
17:44:58 <ehird> and we run into perl's object system again... /sigh
17:45:02 <ehird> maybe we SHOULD use moose. :-)
17:45:04 <ais523> ehird: no, don't do it like that
17:45:13 <ais523> because you have to create a new file for each class you create
17:45:20 <ehird> ais523: I know! That's what sucks.
17:45:41 <ais523> I think type and data is a better way to do it
17:45:47 <ehird> ais523: But also totally silly.
17:45:58 <ais523> ehird: maybe if you're an extreme OO programmer
17:46:04 <ais523> but there's extreme ORK/Java OO
17:46:09 <ais523> and there's sane C++/Python OO...
17:46:16 <ehird> oh heck no, i'm not an extreme OO programmer
17:46:19 <ehird> but a Literal is-a Token
17:46:22 <ehird> and it makes sense
17:46:26 <ehird> just not to perl :-)
17:46:55 * ais523 is capable of extreme OO
17:46:58 <ais523> but doesn't like doing it
17:47:06 <ais523> except in university OO projects
17:47:14 <ais523> to show the ridiculousness of the whole thing
17:47:20 <ais523> (that is, the project)
17:47:35 <ais523> the problem with object-orientation is that it's useful up to a point, and then you get diminishing returns
17:47:49 <ais523> once you get down to the very low details OOness become more of a pain then an aid
17:48:04 <ais523> "There is a scribe called Writer."
17:48:49 <ehird> it's funny how i keep running into Perl trying to express my thoughts into code here, though
17:48:55 -!- timotiis has joined.
17:51:00 <ais523> ehird: how are we going to handle literal \D and other special characters?
17:51:10 <ehird> i'm still yelling at perl
17:51:13 <ehird> but it's a good point
17:51:30 <ais523> we need to keep a flag on characters in the input string anyway
17:51:43 <ais523> to allow for some being positive text, some being antitext, and some being antitext-in-progress
17:54:30 <ehird> i think i'll just push a basic skeleton of Lexer
17:54:35 <ehird> and let you start it off, because i'm not sure what structure you want
17:55:10 <ais523> ATM I'm wondering how to tokenise group options
17:55:13 <ehird> if I have 'use Cyclexa::Token' in Lexer.pm,
17:55:20 <ais523> like the ?? that says a group shouldn't be numbered
17:55:21 <ehird> how can I make it imported as just 'Token'?
17:55:32 <ehird> ais523: maybe a seperate class for those
17:55:37 <ehird> we should do that!
17:55:42 <ehird> we could even use plain strings
17:55:45 <ehird> because getContents etc
17:56:01 <ais523> Haskell may be a better lang than Perl for this
17:56:06 <ais523> especially if we want complex data structures
17:56:54 <ehird> ais523: indeed, but since we are doing significant text wrangling in the interp itself..
17:57:04 <ehird> haskell no likely regexps
17:57:17 <ehird> ais523: I think we should use C. Then we can just interface it to whatever language we want. ;)
17:57:29 <ais523> I was thinking about C too
17:57:38 <ais523> although if you're doing it OO you'll want C++ for its OO features
17:57:46 <ais523> you can write the rest of it C-style
17:57:57 <ais523> (/me is used to writing C/C++ mixes)
17:58:26 <ehird> ais523: C++ would buy us std::string & a load of hell.
17:58:39 <ais523> ehird: std::string may be useful
17:58:45 <ehird> Sgeo[College]: SYNTAX ERROR: unmatched parentheses at line 1. Abort.
17:58:48 -!- oklopol has joined.
17:58:51 <ais523> the thing that people don't get about C++ is: you don't have to use all its features!
17:58:51 <ehird> ais523: of course, you can;t interface C++ to many languages
17:59:02 <ais523> ehird: you can, you just interface via C
17:59:07 <ais523> C can be linked to C++
17:59:18 <ehird> ais523: Yes, but now I want to decapitate myself ;)
17:59:18 <ais523> if you have appropriate wrappers in the C++
18:00:12 <ehird> ais523: Let's write it in Ninjacode.
18:00:22 <ehird> Then we can just make ninjacode whatever we need to code cyclexa.
18:00:27 <ais523> ehird: only if it compiles into INTERCAL
18:01:24 <lament> ais523: you do have to learn the features
18:01:41 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)).
18:01:42 <ais523> but you don't have to use them
18:01:49 <ais523> and you don't pay the runtime cost if you don't
18:02:01 <lament> learning stuff is hard :)
18:02:02 -!- Judofyr has joined.
18:02:27 <ehird> ais523: you know, maybe we should prototype it in 50 languages at once
18:03:42 <ehird> Sgeo[College]: you suck at regexp
18:03:45 <ais523> Sgeo[College]: they are two completely different languages
18:03:47 <ais523> learn both of them separately
18:03:53 <ais523> and then you'll realise you can program in either of them
18:03:54 <ehird> how CAN you shorten that..
18:03:57 <ais523> or any intermediate mix
18:04:03 <ehird> ais523: actually, don't learn both
18:04:07 <ehird> because you will fail at one of them.
18:04:19 <ais523> ehird: learn both in case the one that you fail at is the one you learn
18:04:45 <ais523> just don't think of them as being the same language
18:04:57 <ehird> ais523: well, no -- once you've learned one the other is about five million times harder to learn :)
18:05:13 <ehird> and as for the 50 languages..
18:05:16 <ais523> ehird: not if you have a well-adjusted mind
18:05:20 <ehird> let's list the ones we've suggested in chronological order
18:05:29 <ehird> ruby, c, c++ i think so far
18:05:35 <ehird> we can ignore the joke ones :p
18:05:39 <ais523> we mentioned Perl and Haskell
18:05:56 <ehird> ais523: we're already doing perl
18:06:00 <ehird> ruby, haskell, c, c++ then
18:06:16 <ehird> ais523: maybe we should do smalltalk, classes would be totally lightweight :P
18:06:50 <ais523> Sgeo[College]: ehird assumed that the regex could be shorter, but there isn't an obvious shorter way to write it
18:06:52 <Sgeo[College]> ehird: so if I can only learn one, which should I learn?
18:07:26 <ais523> C is reasonably unique among languages, in that it's one of the only truly portable languages that runs on absolutely anything and can even be used for embedded systems
18:07:32 <ehird> C++ is basicallly an awful language
18:07:36 <ais523> whereas C++ is nice, but there are other languages that do the same thing
18:07:44 <ais523> and about 50% of programmers hate it
18:08:16 <ehird> ais523: just a warning - never, ever try and read just one everything2 article
18:08:19 <ehird> it *does not work*
18:08:33 <ais523> ehird: you end up reading other articles as well?
18:12:32 <ehird> ais523: hmm, Sam Hughes just added a comment system
18:12:40 <ehird> with all this dynamic moo-harkey
18:15:45 -!- pikhq has quit (Remote closed the connection).
18:15:59 -!- pikhq has joined.
18:16:09 <ais523> ehird: what we really need is a metalanguage
18:16:18 <ais523> which is clear and easy to use
18:16:37 <ais523> and compiles into all commonly-used languages which support the same paradigms you use
18:16:49 <ais523> so we just start off by writing the objects and some of the code
18:16:53 <ehird> ais523: ehis523talk
18:17:03 <ais523> then we can compile into Perl's OO model, or Haskell's, or C++'s, at will
18:17:37 <ehird> haskell doesn't have objects
18:17:38 <ais523> although I do kind of like your idea of using Smalltalk, I'd have to learn it first
18:17:44 <ais523> ehird: not in the OO sense
18:17:48 <ais523> it has data structures
18:17:51 <ais523> and first-class functions
18:17:54 <ais523> therefore you can write OO in it
18:18:01 <ehird> ais523: doesn't help with inheritance
18:18:08 -!- sebbu has joined.
18:18:16 <Corun> duck duck duck duck duck duck duck...
18:18:17 <ais523> ehird: you can do inheritance by assignment
18:18:32 <ais523> duck typing is harder but can be done using hashes
18:19:28 <ais523> in fact I was planning to use that method to do OO in Overload
18:19:33 <ehird> ais523: We are ridiculous
18:19:36 -!- jix has quit ("This computer has gone to sleep").
18:19:46 <ais523> ehird: we're in #esoteric, what do you expect?
18:21:28 <ehird> ais523: Writing it in C would be fun.
18:21:45 <ais523> ehird: how do you want to store the parse tree?
18:21:47 <ehird> *this->mrx_stkp[-7] = ++x.ptrr;
18:21:55 <ais523> structs, like C-INTERCAL does?
18:22:20 <ais523> ehird: negative array indexes are always fun in C
18:22:32 <ehird> ais523: holy crap, ubuntu 8.04 looks nice
18:22:45 <ais523> ehird: I'm downloading it at the moment
18:22:54 <ais523> I may create a new user afterwards just to see what it looks like by default
18:23:04 <ais523> because it keeps all settings across a distribution upgrade
18:23:22 <ais523> only 300 or so downloads out of about 2000 to go
18:23:32 <ehird> ais523: i've always hated that about upgrade
18:23:48 <ehird> i wish i could say 'I want to see this in shiny newness! I totally fscked up this system! Revert EVERYTHING!'
18:23:52 <ehird> 'But please keep my precious data.'
18:24:00 <ais523> ehird: then you delete the dot files in your home directory
18:24:17 <ehird> ais523: but that's Dangerous
18:24:26 <ais523> ehird: yes, you probably don't want to revert all your settings
18:24:31 <ais523> so decide which ones you do want to revert
18:24:43 <ais523> I was just telling you how to do a revert EVERYTHING like you said
18:25:09 <ais523> and OFC, you can always just create a new username and have all those settings restored
18:25:29 <ais523> if you messed up the system settings, you just keep /home and reinstall everything else
18:26:32 <ehird> ais523: So... on the subject of X)80f.sroiuoI|.
18:26:48 <ais523> ehird: I can't acctually make sense of that
18:26:57 -!- Corun has quit ("This computer has gone to sleep").
18:34:34 <ehird> ais523: So hmm. I don't think Cyclexa WANTS to be implemented.
18:34:45 <ais523> better Cyclexa than Magenta
18:35:17 <ais523> http://esolangs.org/wiki/Magenta
18:35:27 <ais523> it's cursed, never try to implement it, you'll fail
18:36:19 <ehird> ais523: has anyone attempted?
18:36:50 <ais523> the value 2 is at the back of my mind, but probably for a different reason
18:36:51 <ehird> 'I got to be in charge of something without bollixing it up or giving it up too early' <-- Well, it'd be nice to be able to do this ;)
18:36:58 <ehird> ais523: anyone recently?
18:37:09 <ais523> I think 1999 was the last try
18:38:31 <ais523> ehird: no, it's cursed
18:38:42 <ehird> Sgeo[College]: bye
18:40:04 -!- Sgeo[College] has quit ("http://www.mibbit.com ajax IRC Client").
18:40:36 <ehird> ais523: it doesn't look hard..
18:41:59 <ais523> ehird: ever tried to implement INTERCAL?
18:42:07 <ais523> Implementing Magenta reminds me of that a bit
18:42:11 <ehird> ais523: no, i haven't
18:42:13 <ehird> but i want to, sometime
18:42:32 <ais523> ehird: the problem is that interactions between flow control statements can get out of hand
18:42:36 <ais523> and Magenta has loads of them
18:42:45 <ais523> although it really needs the but-first statement too
18:43:27 <ehird> ais523: I'm trying to come up with a unique idea for an esolang
18:43:48 <ais523> ehird: we don't have enough declarative esolangs at the moment
18:44:08 <ehird> ais523: i was just thinking of a prolog-alike
18:44:12 <ehird> without the truthnese
18:44:19 <ehird> that is, there's no actual 'return value'
18:44:24 <ehird> prolog has a pseudoreturn of true/false
18:44:35 <ehird> true(X) would result in true being put in X though
18:44:37 <ehird> ais523: well, yeah
18:45:34 <ais523> OK, downloading Ubuntu H has finished
18:45:44 <ais523> so all sorts of breakage may happen at my end from now onwards
18:46:04 <ais523> due to mixes between old and new bits of programs
18:46:18 <ais523> I'll just have to be careful to not close anything open, so the old FDs stay in existence
18:46:55 <ehird> ais523: any other esolang ideas?
18:47:10 <ais523> there was my graph-rewrite idea I mentioned a while ago
18:47:15 -!- Hiato has joined.
18:47:18 <ais523> I didn't tell anyone the spec, though, just that I had the idea
18:47:26 <ais523> I can explain the spec reasonably simply over IRC
18:47:34 <ais523> if people here are interested
18:48:00 <ais523> implementing it will be hard, though, I can't think of a marginally efficient way to do it, but am sure that one exists
18:49:02 <ehird> ais523: any others? :-P
18:49:17 <ais523> probably, but I'll have to think harder
18:49:22 <ais523> I want to do an update to BackFlip
18:49:31 <ais523> which is TC despite still keeping the BackFlip style
18:49:42 <ais523> it's a very simple change:
18:49:52 <ais523> the program is wrapped into a cylinder
18:50:06 <ais523> the left and right sides are identified, so if you go off the right you end up back at the left, like in Befunge
18:50:25 <ais523> the program is copied upwards and downwards, so if you go off the top or bottom you end up in a different copy of the original program
18:50:28 <ais523> that's enough for TCness
18:50:33 <ais523> (I also have some I/O ideas)
18:50:44 -!- Corun has joined.
18:50:45 <ais523> oh, and you only need flipping mirrors for that, the arrows are unnecessary
18:51:39 <ais523> ehird: oh, also my hyper-Prolog, but it's uncomputable and so can't be implemented
18:52:53 <ais523> ehird: you seem really picky at the moment
18:53:11 <ais523> kyevan seems to have a decent idea for a new lang in #ircnomic, though...
18:54:59 <ehird> ais523: i am always picky
19:00:08 -!- Hiato has quit ("Leaving.").
20:09:50 -!- 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"").
20:26:22 -!- oklofok has joined.
20:27:39 -!- oklopol has quit (Connection timed out).
20:35:20 <oklofok> heh, right now, i had to use IE because firefox just couldn't open webpages :)
20:35:36 <oklofok> and everything works again <3
20:37:26 -!- oklofok has changed nick to oklopol.
20:38:07 <ehird> oklopol: came up with any AWESOME ESOLANG IDEAS yet????
20:39:02 <Slereah> Because everyone is tired of Brainfuck!
20:40:57 <oklopol> nopol was my esoest idea in a while
20:41:13 <oklopol> i keep coming up with *usable* languages :<
20:41:26 <ehird> oklopol: usable languages .. cool!
20:41:35 <oklopol> i mean, the fixed point idea, plus my best-effort prolog were quite nice, but neither is all that eso
20:42:21 <Slereah> Like replace all logical operator with | in your prolog thingy or something
20:42:30 <oklopol> Ef i'm actually gonna implement, best-effort prolog is my impossible extension to prolog, perhaps i should integrate it with ais's
20:43:34 <oklopol> what i'd like to invent after Ef is a whole new model of computation
20:43:42 <oklopol> i just have to come up with one
20:43:58 <oklopol> not in the paradigm sense, the CA sense
20:44:32 <ehird> oklopol: i want to implement ef
20:44:52 <oklopol> perhaps, once i specify it a bit more
20:45:05 <oklopol> atm, i just have a vague idea about the evaluation model, and the two examples
20:46:29 <oklopol> the idea is, function calls are executed infinite times
20:46:41 <oklopol> yet the language is mostly imperative
20:47:15 <ehird> oklopol: examples plz
20:47:35 <oklopol> sort = {x:_;y:_;?x<?y&x>y=>(x,y)=(y,x)};
20:47:35 <oklopol> pical = (.acc denom sign):{(acc + sign/denom) (denom + 2) (-sign)};
20:47:56 <oklopol> pi is calculated in the last to lines
20:48:03 <oklopol> the first one is a slow sort function
20:48:22 <oklopol> kinda like an imperative selection sort
20:48:26 <ehird> oklopol: show factorial
20:50:05 <oklopol> fac = (n .acc):{n > 0 => n-1 acc*n}
20:50:14 <oklopol> implicit recursion, and i'm using the whitespace separation thing
20:50:33 <ehird> oklopol: whut's acc
20:50:52 <oklopol> fac = (.n acc):{n > 0 => n-1 acc*n}
20:51:01 <oklopol> we are finding the fixed point of n
20:51:14 <oklopol> this is an imperative factorial
20:51:30 <oklopol> it's a *bit* different from what you see usually
20:51:58 <oklopol> fac = (...):{...} <<< just make the function, (...) is for args, {...} is the body
20:52:07 <oklopol> (.n acc) means we take two arrgs
20:52:21 <oklopol> . means we are taking the fixed point of n
20:52:27 <oklopol> meaning we continue until n doesn't change anymore
20:52:51 <oklopol> {a => b} means if a, then do b
20:53:06 <oklopol> a is n>0, so we do b until not a
20:53:15 <oklopol> because there's implicit recursion when we return
20:53:15 <ehird> oklopol: this handles infinite recursion doesn't it
20:53:38 <ehird> func = (.n):{n+func(n/2)}
20:53:40 <ehird> using explicit recursion
20:53:43 <oklopol> well yeah you pretty much have to shortcut infinite recursion because you cannot escape it from within the language.
20:54:40 <oklopol> it should be able to do something that simple perfectly, but usually you just get an abstraction
20:54:48 <oklopol> it's actually designed to be pretty *fast*
20:55:15 <oklopol> my confusion was cuz i though that tried to be factorial
20:55:19 <oklopol> but indeed, you aren't a retard
20:56:12 <oklopol> ehird: it's not correct though
20:56:36 <oklopol> it's used a bit differently, you have to do it tail-recursively
20:56:47 <oklopol> but that part of the language isn't done yet
20:56:57 <oklopol> and it's not supposed to be used that way
20:58:40 <oklopol> double = (n add):{n+add add/2}
20:58:45 <oklopol> this is how you should do it atm
20:59:14 <oklopol> don't worry, it will get better, it's just i want to keep it pure until i have the basics.
20:59:37 <ehird> 't get why two params
21:00:43 <oklopol> (7 3.5) => (7+3.5 3.5/2) => (7+7/2+7/4 7/4) etc
21:00:53 <oklopol> double = (n .add):{n+add add/2}
21:00:58 <oklopol> so we get the fixed point of add
21:01:08 <oklopol> wait for it to reach zero, that is
21:02:05 <oklopol> i'll try to explain why yours would recurse infinitely
21:02:53 <oklopol> it's not that trivial to explain, it seems, but let's expand it
21:03:39 <oklopol> f(n) means f(f(f(...f(n)...))) in Ef
21:04:06 <oklopol> f(f(f(...f(n + f(f(...f(n/2)...)))...)))
21:04:33 <oklopol> f(f(f(...f(n + f(f(...f(n/2 + f(f(...f(n/4)...)))...)))...)))
21:05:18 <oklopol> you are thinking functional, you should be thinking fixed-point :)
21:06:12 <oklopol> recursion should not be used just like that, unless you're using "boring functions", which i'll prolly call functions that don't take fixed point automaticall :)
21:06:45 <oklopol> but, you can do non-deterministic stuff, which pays up a bit for the fact you cannot easily do recursive stuff
21:07:52 -!- olsner has quit ("Leaving").
21:08:08 -!- Iskr has quit ("Leaving").
21:08:33 -!- oerjan has joined.
21:08:53 <oklopol> ehird: couldn't handle the fact you made an error and died?
21:09:53 <oerjan> typical darwin award candidate?
21:10:04 <oklopol> i guess boring functions aren't needed actually, it will just be a bit harder to do non tail-recursive stuff
21:10:31 <oklopol> it doesn't have to be a good paradigm, i just want it to be different!
21:11:40 <ehird> oklopol: invent a language based on oko.
21:11:44 <ehird> not the 3 characters
21:11:47 <ehird> but the zen of oko
21:12:26 -!- ais523 has joined.
21:12:31 <ehird> ais523: upgrade works?
21:12:54 <ais523> there was a file in /usr/local interfering with things
21:12:56 <ais523> after the upgrade, I could only boot to command-line
21:13:01 <ais523> and that file caused loads of things to fail
21:13:21 <ais523> and then everything started working
21:13:35 <ais523> and it was just a case of using synaptic to fix dependencies
21:13:35 <ehird> ais523: /usr/local/iwillkillyou?
21:13:44 <ais523> I stuck xx at the start of the filename
21:13:46 <oklopol> atm, i'm thinking for my next language i'll make something so complicated it can only be understood after 20 years of meditation in tibet, yet so beautiful after understanding it there is no need to continue living, the gist has been seen.
21:14:51 <oklopol> that's all i've decided sofar
21:15:00 <ehird> oklopol: is that the oko language
21:15:30 <ais523> yes! It finally managed to update Linux itself
21:15:36 <ais523> that's failed twice before
21:16:00 <ehird> oklopol: i submit this as a code snippit
21:16:14 <ehird> understanding what it does is one of the core tenents of oko
21:16:24 <oklopol> i was thinking programs would sound like poems in an alien language
21:17:06 <oklopol> put _ for space in case there were others than the one between < and >
21:17:33 <oklopol> i wanna get that right, because fulfilling random wishes is important to me.
21:17:54 -!- ais523 has quit ("rebooting, will hopefully be back soon").
21:22:13 <ehird> the art of where to put spaces is part of oko
21:22:19 <ehird> but isn't that code beautiful
21:23:04 <oklopol> grcalc = (a b .ratio):{a+b a a/b}
21:23:04 <oklopol> goldenratio = grcalc 1 1 ! ratio
21:23:44 <oklopol> calculating golden ratio from the fact it's the limit of the ratio of two adjacent fibs
21:23:55 <ehird> oklopol: isnt this oko lovely
21:23:55 <oklopol> ehird: it is pretty pretty
21:24:01 <ehird> even my latest symbol?
21:24:07 <ehird> but in a very pretty way
21:24:14 <ehird> the spaces give deep meaning to the code
21:24:21 <oklopol> use _ for them, i can't see them.
21:24:24 -!- ais523 has joined.
21:24:30 <oklopol> if there are two adjacent ones
21:24:31 <ehird> oklopol: not more than one in a row
21:24:52 <ehird> oklopol: looks nicer with just spaces though
21:24:57 <ais523> ehird: I think the system's still OK, but it's running a scheduled fsck
21:25:16 <ais523> so I'm on IRC via telnet, from a UNIX box
21:25:18 <oklopol> i really cannot see spaces
21:25:40 <oklopol> are these the deep, meaningful examples?
21:25:56 <ais523> presumably they have no obvious meaning
21:26:03 <ais523> that can easily be explained over IRC
21:26:54 <oklopol> these examples don't actually do anything meaningful
21:26:59 <oklopol> but they are crucial to understand
21:27:08 <oklopol> because they capture some of the key ideas of oko.
21:27:31 <ais523> and they key ideas can't easily be explained either, presumably
21:27:53 <oklopol> well, they haven't yet been invented
21:28:00 <oklopol> but no, they couldn't be explained easily.
21:28:06 <ehird> oklopol: between the `-`s and the middle bit is 2 spaces
21:28:37 <ehird> but .. you've got to admit that these are mirrors ontowhich the oko may be viewed; nay, merely reflected - as such a viewing must be realised via contemplation of oko.
21:29:03 <ehird> a true oko would be foolish, or even impossible - as it is such that it must be realised independently and not given;
21:29:09 <oklopol> okay. now do you want any of this to mean what one might expect from normal languages? i'm thinking it isn't really parsed, or just executed from source like brainfuck... but something weird in-between
21:29:16 <ehird> understanding oko code may be part of a path to which realisation may be achived.
21:29:29 <ehird> oklopol: it's .. hard to explain. like the rest of oko!
21:29:54 <oklopol> we don't have enough mystery in the esolang world.
21:30:09 <ehird> oklopol: some more oko
21:30:12 <oklopol> ehird: comment @ golden ratio!
21:30:39 <oklopol> in oko, there are *entities*
21:30:49 <oklopol> entities are *aware* of everything happening around them
21:31:07 <oklopol> everything depends on everything, somehow... in deep, meaningful ways
21:31:11 <ehird> some more oko, but that's BAD OKO
21:31:13 <ehird> you shouldn't use it
21:31:20 <ehird> it does not have the pseudo-symmetrical oko nature
21:31:30 <oklopol> i'll put that on the BAD list
21:31:34 <ehird> you can just look at it and feel the hard crash it makes upon the oko psyche
21:31:48 <ehird> it does not blend and fold like most oko; nay, it fights against them, to remove the enlightenment
21:32:00 <ehird> a major part of oko is learning to ward off such anti-oko with real, pure oko.
21:32:05 <oerjan> the oko that can be realized is not the true oko
21:32:30 <ehird> oerjan: but you can realise it in seperate peices, and you must combine them only as the oko nature within describes;
21:32:47 <ehird> therefore you can utilize the true oko but not all at once, if realised all at once, it is not powerful, nay it is harmful
21:32:53 <ehird> and this is why true oko cannot be given
21:33:36 <oerjan> also, how do you know when a programmer is lying about oko? his fingers are typing.
21:34:25 <oklopol> hmm... about the language, it must be the opposite of languages trying to hide details and allow programmers to create new abstract levels on which to code...
21:34:35 <ais523> oerjan: we're discussing Agora over in #ircnomic at the moment
21:34:36 <oklopol> you have to understand the program as a whole
21:34:51 <ehird> oklopol: it's kind of...
21:34:55 <ehird> you can understand the peices of oko contained within
21:34:58 <ehird> and the program reveals itself
21:36:37 <oklopol> the spec begins with 50 pages of meta-explanation about the true nature of oko
21:36:57 <oklopol> and it ends with the realization the language cannot actually be conceived via a spec.
21:37:56 <ehird> oklopol: you can conceive the language via a spec. it can be fully and totally formally defined and implemented.
21:38:04 <ehird> think about that. then, you will know oko more.
21:38:27 <oklopol> it can be defined and implemented, yes
21:38:31 <oklopol> but not actually understood.
21:39:34 <oklopol> perhaps the spec need not say that
21:39:38 <ehird> it can be understood.
21:40:48 <ehird> oklopol: STOP THINKING IMMEDIATELY
21:40:54 <ehird> Now you understand oko more.
21:44:30 <ehird> oklopol: that is 'mediaanre oko'
21:44:35 <ehird> it controls the flow of bad and good oko
21:44:41 <ehird> it is itself bad oko, but controlled
21:45:16 <ehird> lament: Read logs.
21:45:52 <ehird> oklopol: oko also has the concept of 'recursive metaphors'
21:46:28 -!- ais523_ has joined.
21:46:35 <oklopol> can you elaborate on them?
21:46:51 <oklopol> perhaps show me an example of that concept syntactified
21:46:53 -!- ais523 has quit ("my laptop is up again, yay!").
21:46:59 -!- Slereah_ has joined.
21:47:06 -!- ais523_ has changed nick to ais523.
21:48:07 -!- Slereah has quit (Read error: 110 (Connection timed out)).
21:50:42 <oklopol> i'm thinking oko needs a parse *graph*
21:55:45 <oerjan> clearly its grammar is not context-free. i think it is not even context-sensitive, and possibly not even general recursive, but proving so would probably violate Godel's incompleteness theorem.
21:56:28 <ehird> oklopol: recursive parse graph
21:56:55 <ehird> oklopol: self-containing parse trees
21:57:23 <oklopol> a graph can "contain itself" by having internal links
22:00:43 <oklopol> recursive metaphor example?
22:01:58 <oklopol> hmm, a syntax with a separate letter part (with somewhat sensible CV-structure) and character part might be nice
22:02:16 <ehird> oklopol: rec metaphor:
22:04:48 <oklopol> http://www.vjn.fi/pb/p415442436.txt <<< what do you think?
22:06:40 <ehird> no, that's bad oko - it has no pseudosymmetrical nature
22:07:14 <oklopol> i was more referring to the letter - character separation :)
22:07:39 <ehird> it needs more blend
22:08:58 <oklopol> i'm not entirely sure what that means... should i... think about it?
22:09:06 <oklopol> the answer is already within me?
22:09:25 <oklopol> or do you mean actual syntacic blending? :)
22:13:11 <oklopol> oko needs to be a very high-level language with the same "awkwardness" of adding stuff that something like thue has
22:13:23 <oklopol> both lack of modularity and high-levelness
22:14:22 <oklopol> i love the idea of every program being something of a work of art that's basically impossible to comprehend, and even the slightest attempt to modify renders it useless
22:14:48 <oklopol> but, with complex high-level concepts
22:16:30 <oklopol> something like intercal, but more insane.
22:16:45 <oklopol> much much more, i hear people can actually use it without going insane
22:19:30 <oerjan> they can? *cackle* *cough* *chirp*
22:21:29 <oklopol> well, people can't keep entirely sane using it, but they can usually fake a fairly good sane person afterwards. i'm talking poo out your mouth walk on your nose crazy
22:28:50 -!- Corun has quit ("This computer has gone to sleep").
22:29:07 <oerjan> poo out your mouth, walk on your nose? can insanity make you able to do that?
22:29:17 <oerjan> i must have got a defect version.
22:30:12 <Slereah_> Only rhinogrades can walk on their noses!
22:33:09 <oerjan> "Thus perished all traces of the snouters, their unique ecosystem, and all the world's specialists on that intriguing subject . who happened to be holding their congress there at the time" :D
22:34:15 <Slereah_> I wonder, was there ever a gigantic hoax in computer science?
22:37:49 <ais523> lament: Haskell is lazy, not sure about Python
22:37:50 <lament> print foo(), bar(), baz()
22:37:53 * oerjan assumes the Museum of Hoaxes link in that wikipedia article could lead you to something compsci
22:38:05 <lament> if baz() raises an exception, foo() and bar() are still printed
22:39:49 <ehird> lament: seriously?
22:39:52 <ehird> well, fixed in py2k
22:39:56 <ehird> print will be a function
22:40:32 * oerjan hypothesises a genus of snouters that had returned to the sea, and remain to be rediscovered
22:53:52 -!- 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:59:55 <lament> woohoo, esperanto dictionary lookup
23:00:02 <lament> lament@zayin ~/eo $ eo surtere
23:00:21 <lament> (python is SO much easier to write this in than haskell would be :( )
23:05:35 <lament> http://z3.ca/~lament/eo.py
23:06:13 <lament> it's really simple, but in haskell it would take me probably... five times longer to write?
23:06:32 <lament> with the same number of lines of code in the result...
23:10:16 -!- timotiis has quit (Read error: 104 (Connection reset by peer)).
23:18:21 <ehird> lament: am i allowed to make stylistic suggestions?
23:18:32 <ehird> ok, first, 'file' is deprecated and going away in py3k. use 'open'
23:18:36 <ehird> secondly, you never close that file
23:18:44 <ehird> if you are on 2.5 use this:
23:18:50 <ehird> with open(DICT_FILE) as dict:
23:18:53 <ehird> for line in dict: ...
23:18:59 <ehird> if you're not, heres your ugly solution:
23:19:05 <ehird> dict = open(DICT_FILE)
23:19:17 <ehird> lament: because that closes the file
23:19:18 <lament> why should i close it?
23:19:30 <ehird> um, you should always close files you open.
23:19:46 <lament> the program itself closes immediately
23:19:57 <ehird> lament: the os keeps hold of file references
23:19:59 <ehird> even after program exist
23:20:05 <ehird> linux refcounts files and everything -- it can get sticky
23:20:07 <ehird> best to close them all
23:20:35 <lament> next you'll be telling me i should free() all memory before exiting
23:20:55 <oklopol> well the truth is that's pretty fun too.
23:20:57 <lament> are you saying the python runtime does not do this for me?
23:21:02 <ehird> lament: no, it does not
23:30:33 <lament> i didn't realize both python and linux sucked so badly
23:30:45 <lament> i still don't believe it, though :)
23:30:57 <lament> what can happen if i open a file and don't close it?
23:31:20 <lament> why would linux fail to notice that a program that opened the file died?
23:31:58 <ehird> lament: don't ask me
23:32:06 <ehird> but linux does refcount files and files aren't magically closed
23:32:31 <lament> it's rather hard to believe
23:33:19 <ehird> lament: i guess linux does it for speed
23:33:22 <lament> besides, suppose my program crashes
23:33:36 <lament> for example i shut down the computer
23:33:42 <lament> the file clearly doesn't get closed
23:33:49 <lament> obviously linux should be able to deal with situations like that
23:34:09 -!- oerjan has quit ("To crash, perchance").
23:35:50 <lament> nice, added an irssi alias
23:37:19 -!- kwertii has joined.
23:39:11 <sekhmet> ehird: Do you have a reference for that, btw? Or example code?
23:39:25 <sekhmet> I'm quite surprised by that too, and my simple tests haven't been able to reproduce what you were saying yet
23:40:18 <ehird> sekhmet: i don't know, but just about every programming language i've used has had the majority strongly advocate it, and i'm sure i read something about it somewhere
23:40:32 <ehird> i'd love to know if it's cargo cult programming -- doing it is really annoying
23:40:51 <sekhmet> Well right, it's Good Practice to close things you open in code
23:41:09 <sekhmet> I just find it really hard to believe that Linux would keep filehandles open after the owning process has died
23:41:35 <ehird> lament: if it is then it's cargo cult programming that ~90% of intelligent programmers reccomend
23:41:37 <ehird> which would seem odd.
23:41:38 <lament> (closing files before exiting)
23:41:49 <lament> ehird: oddly i have never seen that recommendation.
23:43:01 <sekhmet> I've seen the recommendation quite often, and it certainly makes sense if you're writing long-running processes (daemons, other things that run in servers, etc)
23:43:08 <ehird> lament: maybe you should write your program in like every single language
23:43:24 <ehird> you should do erlang next. parallel dictionary crunching!
23:43:37 <lament> sekhmet: there's a big difference between releasing resources in general, and releasing resources before exiting
23:44:17 <lament> ehird: i just wanted an esperanto dictionary lookup program. I don't need to write it again. :)
23:45:06 <ehird> lament: but you can decide the best language that you will love and never whine to #haskell about it again ;)
23:45:07 <lament> on the plus side, i can write "/eo foje" or something and find out what the hell foje is
23:50:37 <ehird> lament: what is /eo eo
23:52:31 <lament> "eo" is not an esperanto word, so /eo eo is "eo : Not found"
23:52:38 -!- Corun has joined.