←2008-11-10 2008-11-11 2008-11-12→ ↑2008 ↑all
00:41:28 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | cool.
01:18:10 -!- oklopol has joined.
01:42:25 -!- oklopol has quit (Read error: 131 (Connection reset by peer)).
01:59:50 -!- Sgeo has joined.
02:29:22 -!- puzzlet_ has quit (Read error: 60 (Operation timed out)).
02:30:37 -!- puzzlet has joined.
02:53:47 -!- Slereah_ has joined.
03:09:30 -!- oerjan has quit ("Good night").
03:20:46 -!- CakeProphet has joined.
03:21:04 <CakeProphet> alright.... so... I'm learning Haskell
03:21:06 <CakeProphet> and
03:21:19 <CakeProphet> would anyone like to explain monads for me?
03:22:25 <Slereah_> AAAAAAAAAAAAAAAAAH
03:24:53 <warrie> Of course.
03:25:14 <warrie> Do you understand type constructors?
03:25:25 <CakeProphet> ...possibly.
03:25:40 <warrie> See if you can explain them to me.
03:27:35 <CakeProphet> well...
03:27:46 <CakeProphet> I understand the syntax
03:29:25 <warrie> It's likely you'll want to understand them better than that.
03:29:31 <CakeProphet> data Animal = Animal genus species
03:29:53 <CakeProphet> *Genus *Species
03:29:55 <CakeProphet> ...
03:30:08 <warrie> A good example, but unfortunately, it contains no type constructors.
03:31:02 <CakeProphet> ...oh
03:34:29 <CakeProphet> then what, pray tell, is a type constructor?
03:35:13 <jayCampbell> hardly knew'er
03:35:54 -!- oklopol has joined.
03:36:31 -!- puzzlet has quit (Remote closed the connection).
03:36:35 -!- puzzlet has joined.
03:38:34 -!- oklopol has quit (Read error: 54 (Connection reset by peer)).
03:38:50 -!- oklopol has joined.
03:43:12 <warrie> Consider this: data Maybe a = Just a | Nothing
03:43:20 <warrie> CakeProphet, do you know what all that does?
03:45:10 <warrie> Hmm, I think my idiom failed.
03:45:15 <warrie> CakeProphet, do you know what-all that does?
03:46:50 -!- oklopol has quit (Read error: 60 (Operation timed out)).
03:47:31 -!- ab5tract has joined.
03:47:47 -!- oklopol has joined.
03:49:10 <warrie> If not, find out, I guess. In there, "Maybe" is a type constructor. A monad is a certain sort of type constructor.
03:52:39 -!- Slereah_ has quit (Read error: 113 (No route to host)).
03:54:25 -!- oklopol has quit (Read error: 54 (Connection reset by peer)).
03:58:55 <warrie> And I'll be going to bed now. Good night, everyone.
04:01:38 -!- CakeProphet has quit (Read error: 110 (Connection timed out)).
04:24:22 -!- Slereah_ has joined.
04:24:29 <Slereah_> AAAAAAAAAAAAAAAAAH
04:24:31 <Slereah_> Was I saying
04:24:39 <Slereah_> Owait, Cakeprophet is gone
04:37:02 -!- Slereah has joined.
04:52:17 -!- oklopol has joined.
04:53:35 -!- Slereah_ has quit (Read error: 110 (Connection timed out)).
04:59:37 -!- oklopol has quit (Read error: 60 (Operation timed out)).
05:12:40 -!- Slereah_ has joined.
05:13:12 -!- puzzlet has quit (Read error: 60 (Operation timed out)).
05:14:19 -!- Slereah has quit (Read error: 113 (No route to host)).
05:15:05 -!- puzzlet has joined.
05:16:45 -!- ab5tract has quit.
05:16:51 -!- GreaseMonkey has joined.
05:56:11 -!- Slereah has joined.
06:04:41 -!- warrie_ has joined.
06:10:37 -!- warrie has quit (Read error: 60 (Operation timed out)).
06:12:20 -!- sebbu2 has joined.
06:15:01 -!- GreaseMonkey has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- Slereah_ has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- Sgeo has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- sebbu has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- envbot has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- rodgort has quit (kornbluth.freenode.net irc.freenode.net).
06:15:01 -!- sebbu2 has changed nick to sebbu.
06:19:23 -!- rodgort has joined.
06:29:33 -!- GreaseMonkey has joined.
06:32:27 <Doitle2> looks like Freenode is having some netsplit problems
06:41:28 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | only --help and --version.
07:15:32 -!- jix has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:25:44 -!- olsner has quit ("Leaving").
08:27:08 -!- jix has quit ("CommandQ").
08:50:42 -!- GreaseMonkey has quit (Read error: 104 (Connection reset by peer)).
08:50:56 -!- Hiato has joined.
08:58:11 -!- oklopol has joined.
09:10:07 <fizzie> oklopol: How goes your running?
09:11:43 <oklopol> tbh i actually just spelt during the night :|
09:11:47 <oklopol> *slept
09:11:50 <oklopol> :D
09:12:03 <ais523> is spelling or sleeping a better way to spend your time overnight, I wonder?
09:12:03 <fizzie> Sleep-spelling.
09:12:23 <oklopol> spelling is trivial, so i'd say better just rest.
09:13:21 <fizzie> "*snore* e-s-o-t-e-r-i-c, esoteric *snore*"
09:14:03 <ais523> anyway, good morning oklopol, fizzie
09:14:59 <oklopol> 21.4 meters is my record for today now
09:15:03 <oklopol> and morning.
09:15:25 <fizzie> Mornung.
09:15:40 <oklopol> i've already attended a lecture and come home, though, so i consider this afternoon.
09:16:23 <fizzie> Personally I'd classify this as fi:aamupäivä (fi:aamu = en:morning, fi:päivä = en:day), which is something between morning and midday; is there a proper word for it?
09:16:39 <fizzie> It's not afternoon if it's not after noon.
09:16:50 <ais523> not in English, I don't think, but there should be a word for that
09:20:02 <fizzie> Curious omission; Wikipedia's "parts of a day" template has dawn/dusk, sunrise/sunset, morning/evening pairs and noon + afternoon; there really should be a "prenoon" or something.
09:21:13 <Hiato> vabot, the tribe as spoken, die
09:21:13 <Hiato> vabot die
09:21:14 <Hiato> bugger
09:21:16 <Hiato> vabotdi
09:21:20 <Hiato> vabotdie
09:23:42 <fizzie> How many-sided is a vabot die?
09:26:25 <ais523> fizzie: it's the quit command, I think, not a randomizer
09:27:06 <fizzie> Aw.
09:37:39 <Dewi> fizzie: morning and evening are opposites?
09:38:00 <Dewi> fizzie: people treat morning as lasting 10+ hours and evening as 1.5 if you're lucky
09:38:45 <fizzie> Around here morning is not very long, definitely not longer than evening.
09:39:28 <fizzie> Maybe that's because we actually have a pre-noon, post-morning word.
09:39:57 <lament> "day"?
09:40:09 <lament> it's "day" in English
09:40:25 <ais523> day covers the afternoon more than the morning in English, or just both
09:40:27 <ais523> or indeed an entire 24-hour period
09:40:29 <Dewi> nah, day and night just divide a 24 hour span into halves
09:40:42 <ais523> day is ambiguous in English, it has lots of meanings
09:40:58 -!- vabot has quit (Read error: 110 (Connection timed out)).
09:41:06 <Dewi> you can't fit "day" in between the spans we're talking about at any rate
09:41:29 <ais523> "late morning" would probably work
09:41:45 <Dewi> late describes my mornings well
09:49:32 -!- fungot has quit (Read error: 131 (Connection reset by peer)).
09:49:43 <fizzie> Meh, I should test things before trying them out with the live fungot.
09:49:54 <ais523> what are you trying to do?
09:50:07 <fizzie> I'll let you know when I get it done. :p
09:50:38 * oklopol likes it when people debug their bots here :D
09:51:22 -!- fungot has joined.
09:51:35 <fizzie> (There's nothing new yet, I just restarted it.)
10:01:57 -!- Mony has joined.
10:03:12 <Mony> plop
10:03:20 -!- Hiato has quit (Read error: 145 (Connection timed out)).
10:04:22 <ais523> hi Mony
10:04:42 <Mony> hi ais523
10:06:22 -!- Hiato has joined.
10:24:03 <fizzie> ^reload
10:24:04 <fungot> Reloaded.
10:24:05 <fizzie> ^style
10:24:05 <fungot> Available: agora alice darwin discworld europarl ff7 fisher ic irc lovecraft pa speeches ss wp
10:24:09 <fizzie> ^style europarl
10:24:09 <fungot> Selected style: europarl
10:24:12 <fizzie> fungot: How do you feel?
10:24:15 <fungot> fizzie: mr president, i must say firstly that we must draw our own conclusions without being aware of or not mentioning our weaknesses. i will propose, on the other hand, think it regrettable that not more time is devoted to the participation of non-governmental organisations providing humanitarian aid and we take this debate to establish compensatory measures to address the weaknesses in the fifth environmental action programm
10:24:50 <fizzie> There, that's better.
10:25:05 <ais523> let me test it too
10:25:07 <ais523> ^style ic
10:25:07 <fungot> Selected style: ic
10:25:10 <ais523> hi fungot!
10:25:10 <fungot> ais523: e275 don't byte off more than 2 from the `while' and `write in' or `next from' thread will not be an infinite loop; so don't allow that to happen); at present, the input. there is also specified in the same variable twice in the expression needs to be evaluated in order for the full details of the intercal program).
10:25:29 <ais523> seems to work
10:25:56 <fizzie> Yep. Although I'm not sure what that one style is.
10:25:58 <fizzie> ^style ss
10:25:58 <fungot> Selected style: ss
10:26:02 <fizzie> fungot: how do you speak now?
10:26:04 <fungot> fizzie: leon. how many women saw this child of his? aron. what, will not conclude their plotted tragedie. beaufords red sparkling eyes blab his heart's malice, and do your best to make his entrance more sweet, and sowre, as husbands have. what is your graces pleasure? buck. euen that ( i hope) which pleaseth god aboue, and the poore state esteeme him as a carkasse fit for hounds: and let mee feele your pulse
10:26:11 <ais523> shakespeare, presumably
10:26:14 <fizzie> Ah, right.
10:26:26 <ais523> ^help
10:26:26 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style; ^bool
10:26:49 <fizzie> ^def help ul (^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool)S
10:26:49 <fungot> Defined.
10:26:54 <fizzie> Maybe that's closer.
10:27:06 <ais523> ah, I never realise that the help wasn't hardcoded...
10:27:10 <ais523> *realised
10:27:17 <ais523> ^show help
10:27:18 <fungot> (^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool)S
10:27:19 <fizzie> It used to be, but I changed it like that for easier modification.
10:27:21 <fizzie> ^save
10:27:22 <fungot> OK.
10:27:39 -!- Hiato has quit ("Leaving.").
10:28:23 <fizzie> ^show
10:28:23 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help
10:28:25 <fizzie> ^show ul
10:28:25 <fungot> This command is now a built-in thing.
10:28:42 <ais523> strange reply...
10:28:48 <ais523> ^show show
10:28:53 <ais523> ^show source
10:28:54 <fungot> (http://zem.fi/~fis/fungot.b98.txt)S
10:29:08 <ais523> ^show wc
10:29:08 <fungot> []
10:29:19 <fizzie> That 'ul' string is just defined "as an underload program" (since those are stored and displayed as simple strings).
10:29:29 <fizzie> It's not actually executable because the ^ul builtin is handled first.
10:29:32 <ais523> ah, and ok
10:29:58 <fizzie> I'm not sure what has happened to wc; it used to be the brainfuck word-count program.
10:30:10 <oklopol> ^source
10:30:10 <fungot> http://zem.fi/~fis/fungot.b98.txt
10:30:19 <fizzie> Oh, should update that one.
10:31:56 <ais523> fizzie: why do you load TOYS?
10:32:34 <fizzie> The 'S' command from TOYS is used to clear the funge-space on ^reload.
10:32:44 <ais523> ah, ok
10:32:56 <fizzie> Since the spaces are transparent in 'i' when it loads the changed copy.
10:33:03 -!- Hiato has joined.
10:33:13 <ais523> I know why the clearing was needed, just didn't realise TOYS did that
10:33:28 <fizzie> There's a "fill area with value" command in there.
10:34:12 <ais523> by the way, do you load fingerprints one at a time as you need them
10:35:05 <fizzie> I keep FING, STRN, SOCK and SCKE loaded all the times, but the others I load when I need them.
10:35:18 <ais523> or do you do out of order ) ( trickery to get lots of commands you use at the top of fingerprint stacks simultaneously?
10:35:37 <ais523> oh, and you use FING in order to manipulate the fingerprint stacks
10:35:52 <fizzie> I mostly just use FING to do some permanent renames so that the commands I use often are always available.
10:36:08 <ais523> yes, that's what I guessed you'd have done with it
10:36:24 <fizzie> And I tend to rename G/P from STRN to K/B whenever I need to use FILE; that one is loaded by the state-file loading, random babbling, and maybe something else too.
10:36:42 <fizzie> Well, ^save.
10:37:26 <fizzie> I also keep REXP (if it is supported; it's optional) loaded all the time for the ignore function.
10:38:08 <ais523> does REXP allow recursive regexen?
10:38:39 <fizzie> I don't think so. Although it's not exactly well-specified what dialog of regexps it uses.
10:38:48 <ais523> *dialect?
10:38:53 <fizzie> Yes. Heh.
10:39:22 <fizzie> The "API" (flags and such) is pretty much taken from the POSIX regcomp, so that's what cfunge at least uses.
10:40:54 <ais523> is there a PCRE fingerprint?
10:40:57 <fizzie> It also supports only a single compiled regex (per-IP in RC/Funge-98, globally in cfunge, I think); thankfully I only use one (the ignore expression), otherwise I'd have to be compiling it all the time.
10:41:12 <fizzie> There's just PERL.
10:41:19 <ais523> Funge needs a better regex fingerprint, really
10:41:33 <fizzie> PCRE would be quite suitable since it already has a fingerprint-friendly name.
10:41:46 <ais523> yes, and it's better regexen too
10:44:12 <fizzie> ^style some_non_existent_thing
10:44:12 <fungot> Not found.
10:44:17 <fizzie> Yay, that thing also worked.
10:44:38 <ais523> ^source
10:44:39 <fungot> http://zem.fi/~fis/fungot.b98.txt
10:44:50 <ais523> ^style ../fungot.b98.txt
10:44:50 <fungot> Not found.
10:45:00 <ais523> ok, worth a try I suppose...
10:45:09 <ais523> ^style ../../fungot.b98.txt
10:45:10 <fungot> Not found.
10:45:14 <ais523> ^style
10:45:14 <fungot> Available: agora alice darwin discworld europarl ff7 fisher ic irc lovecraft pa speeches ss wp
10:45:14 <fizzie> Heh. Actually it just matches against that explicit list I gave it.
10:45:22 <ais523> I guessed
10:45:35 <fizzie> The actual files are model.bin.<style> and tokens.bin.<style>, anyway.
10:46:59 -!- Hiato has quit ("Leaving.").
10:48:38 -!- Hiato has joined.
11:25:57 <AnMaster> eh?
11:26:06 <ais523> hi AnMaster
11:26:07 <AnMaster> fizzie, what is wrong with POSIX extended regex?
11:26:12 <AnMaster> hi ais523
11:28:05 <ais523> AnMaster: it's REXP I'm complaining about: it only supports one compiled regex at a time
11:28:33 <AnMaster> ais523, yes either globally or per ip
11:28:37 <AnMaster> depending on which interpreter
11:28:46 <AnMaster> since it was underspecced as usual
11:28:53 <AnMaster> you know how Mike Riley is
11:29:00 <ais523> but what's wrong with POSIX extended is that they can't be recursive
11:29:05 -!- Hiato has quit ("Leaving.").
11:29:14 <AnMaster> ais523, hm how does a recursive regex look?
11:29:30 <AnMaster> I can't remember ever using, nor seeing, that
11:30:06 <fizzie> PCRE has a custom syntax for it; I think Perl does it yet differently.
11:30:20 <AnMaster> ok, got an example in PCRE?
11:30:45 <ais523> I think it's (?R) as the custom syntax
11:30:49 <fizzie> You can use (?R) to match the regex recursively, yes.
11:30:54 <AnMaster> well example of how it is used
11:30:59 <fizzie> \( ( (?>[^()]+) | (?R) )* \)
11:31:02 <fizzie> For nested parentheses.
11:31:03 <AnMaster> since I can't really picture what a recursive regex does
11:31:11 <fizzie> Straight from the manual.
11:31:19 <ais523> and Perl has that too but only very recent versions, it had a different syntax earlier
11:31:23 <AnMaster> fizzie, does that mean "one or more same as the parathesis this is in"?
11:31:40 <AnMaster> or what?
11:31:51 * ais523 tries to remember what ?> does
11:32:04 <ais523> AnMaster: (?R) is a copy of the entire regex it's in
11:32:18 <fizzie> It matches anything with valid ()s.
11:32:30 <AnMaster> hm
11:32:37 <AnMaster> ais523, the entire regex hm
11:32:45 <AnMaster> well that is an issue kind of
11:32:48 <ais523> there are also syntaxes to match bits of it
11:33:00 <ais523> or recurse bits of it, anyway
11:33:12 <ais523> not as elegant as Cyclexa's recursion syntax IMO, but they have to start somewhere I guess...
11:33:18 <oklopol> :P
11:33:27 <AnMaster> also PERL is truly slow and probably buggy
11:33:30 <fizzie> That example works by matching the opening (, then an arbitrary amount of subsequences that either contain no ()s or a correctly ()ied string, and finally the closing ).
11:33:39 <AnMaster> at least the way it is implemented for stuff not running in perl
11:33:46 <AnMaster> such as in ccbi or cfunge
11:33:59 <AnMaster> lot of messy forking and messing with file descriptors
11:34:21 <oklopol> what are the syntaxes to match parts of it?
11:34:33 <fizzie> oklopol: (?N) recurses to the Nth parenthesized submatch.
11:34:44 <oklopol> oh, well that's just ugly
11:34:44 <oklopol> :P
11:34:52 <ais523> oklopol: it's $N in Cyclexa
11:34:53 <fizzie> oklopol: And (?P>name) recurses to (?P<name> ... ) group.
11:34:58 <ais523> with $0 to match the whole thing
11:35:02 <AnMaster> the only "?" bits in PCRE I tend to use are
11:35:35 <AnMaster> grr lag...
11:35:39 <oklopol> i would've done more like "wef.*{rec:(a+[csa](?rec)rgeeaa)}gerhr", and rec would be the recursion
11:35:45 <AnMaster> wonder if I'm disconnected or just lagging
11:35:48 <oklopol> and recurse up to {rec:...}
11:35:55 <oklopol> or something similarr.
11:35:59 <oklopol> oh
11:36:03 <AnMaster> ah better now
11:36:12 <oklopol> fizzie seems to have described something liek that.
11:36:23 <oklopol> yess
11:36:24 <ais523> oklopol: that's possible in PCRE but even uglier, wef.*(?P<rec>(a+[csa](?P>rec)rgeeaa))gerhr
11:36:24 <fizzie> All the regex extensions tend to start with "(?" since that makes no sense in a traditional regex.
11:36:29 <AnMaster> anyway: (?!) (?=) (?<=) (?<!)
11:36:38 <AnMaster> that is lookahead/behing
11:36:42 <AnMaster> behind*
11:36:51 <AnMaster> oh and I managed to crash PCRE with that a few times
11:37:02 <AnMaster> don't remember the regex I used
11:37:05 <AnMaster> was fairly complex
11:37:12 <oklopol> i don't like keywords, and "P" seems like a keyword to me.
11:37:12 <AnMaster> with both lookbehind and lookahead
11:37:15 <oklopol> because it's a letter.
11:38:14 <oklopol> but otherwise, i like that
11:38:27 <AnMaster> due to these issues with pcre I'm unlikely to actually implement any PCRE fingerprint, unless someone convince me that PCRE actually isn't buggy any more
11:38:27 <oklopol> conceptually; perhaps only because that's what i would've done.
11:38:34 <ais523> oklopol: would you consider a to be a keyword in Underload?
11:39:24 <oklopol> ais523: not really
11:39:32 <oklopol> don't ask me why, i don't even know why i dislike keywords.
11:39:54 <ais523> Underlambda is going to have most of the printable characters in ASCII as keywords
11:39:54 <ais523> well, commands
11:40:26 <AnMaster> ais523, have you had similar issues with PCRE too?
11:40:37 <ais523> I haven't actually tried to use it
11:40:39 <fizzie> The (?P<name>...) naming is reasonably common; you can use them in Python regexps, and then refer to them as .group('name') after matching. Perl supports it too for compatibility reasons, although it also supports (?<name>...) and (?'name'...).
11:40:40 <ais523> but I've read the docs
11:40:45 <AnMaster> it was pcregrep
11:40:47 <AnMaster> segfault
11:40:53 <ais523> and I've used pcregrep
11:41:03 <ais523> maybe the segfault's a bug in the grep program not PCRE though?
11:41:17 <AnMaster> ais523, maybe, but changing a few letters in the regex made it work
11:41:28 <AnMaster> ie removing some part of a lookbehind iirc
11:41:37 <AnMaster> it must have been about a year ago at least
11:41:42 <AnMaster> wonder if I still got it around
11:41:50 <AnMaster> well I would on archived irc logs on cd
11:41:56 <AnMaster> since I talked about it on irc I remember
11:41:59 <AnMaster> in some channel
11:48:40 <AnMaster> /mnt/cdrom/2007-01-24/FreeNode-#freenode-social.log.gz:Dec 07 19:22:37 <AnMaster> pcregrep '(?<!raw)output\("(`?\\\$|`.|%s|[^a-zA-Z\\])*"' *.php <-- I wonder why that regexp crash pcregrep? it isn't that complicated really
11:48:42 <AnMaster> found it
11:48:44 <AnMaster> ais523, ^
11:49:10 <ais523> I wonder if it still does? Does it matter what you pipe into the expression?
11:49:26 <AnMaster> ais523, well I didn't pipe anything see the *.php
11:49:33 <AnMaster> and that php program: no longer have it
11:49:35 <ais523> ah, I missed that
11:49:36 <AnMaster> no idea what program even
11:49:37 <ais523> and ok
11:49:40 <AnMaster> only a faint memory
11:49:48 <AnMaster> some php based web game I was testing
11:50:18 <AnMaster> ais523, also iirc it only crashed on 64-bit
11:50:20 <AnMaster> not 32-bit
11:56:22 <AnMaster> ais523, doesn't crash on an empty input file now, could depend on input as you said
11:56:23 <AnMaster> no idea
11:56:37 <ais523> anyway, I'm going for a while
11:56:52 <AnMaster> cya
11:59:50 -!- Slereah_ has joined.
12:11:00 -!- CakeProphet has joined.
12:19:41 -!- Slereah has quit (Read error: 110 (Connection timed out)).
12:38:58 -!- AquaLoqua has joined.
12:41:28 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | might work without installing SDL?.
12:51:09 -!- AquaLoqua has quit ("Dana").
12:52:34 -!- KingOfKarlsruhe has joined.
12:54:24 <AnMaster> hm
12:54:33 <AnMaster> I just got an idea for a different way to represent Lisp
12:54:45 <AnMaster> it is truly awful and yet quite cool
12:54:56 <AnMaster> if anyone is interested?
12:55:24 <Slereah_> Do tell
12:55:34 <AnMaster> As a directory structure on the file system
12:55:46 <AnMaster> after all Lisp is just a tree written using S-Expressions
12:55:52 <AnMaster> you could use xml or whatever *shudder*
12:56:04 <AnMaster> but using the file system should be quite interesting
12:57:09 <AnMaster> for example consider:
12:57:10 <AnMaster> /define
12:57:10 <AnMaster> x
12:57:10 <AnMaster> lambda/
12:57:10 <AnMaster> +/
12:57:10 <AnMaster> 1
12:57:12 <AnMaster> 2
12:57:17 <AnMaster> where x 1 and 2 are empty files
12:57:22 <AnMaster> and the other ones are directories
12:57:32 -!- AquaLoqua has joined.
12:57:45 <fizzie> Ordering of files in a directory is a bit uncertain, though.
12:57:48 <AnMaster> ah wait would need some way to represent the first empty () of lambda
12:57:53 <AnMaster> fizzie, oh true :/
12:58:10 <AnMaster> why I got this idea: editing qmail configs
12:58:40 <AnMaster> ok empty list could be a file called NIL
12:58:44 <AnMaster> but ordering hm...
12:58:55 <fizzie> ^ul (!)(o)(t)(o)(p)(b)(t)~**~*~**~*S
12:58:55 <fungot> optbot!
12:58:56 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | but.
12:58:56 <Slereah_> Use the set theory thing.
12:59:02 <AnMaster> Slereah_, hm?
12:59:21 <Slereah_> <x,y> = { x, {y} }
12:59:40 <fizzie> Or <x,y> = { {x}, {x, y} }; I think that's even more common maybe.
12:59:45 <Slereah_> Or something equivalent
12:59:48 <AnMaster> um
12:59:53 <Slereah_> Well, there's a lot of ways to do it
12:59:59 <AnMaster> I lack that knowledge I fear
13:00:09 <Slereah_> All that matters is that the first and second can be differentied
13:00:16 <AnMaster> Slereah_, yep
13:00:19 -!- AquaLoqua has quit (Client Quit).
13:00:20 <AnMaster> ah I got an idea
13:00:29 <AnMaster> all parameters are named parameters
13:00:38 <AnMaster> use extended file attributes for those names
13:00:48 <fizzie> An engineer's solution would've been to prefix an index number there.
13:01:06 <AnMaster> fizzie, yes but that is so, um, boring
13:01:29 <Slereah_> Engineers use real languages, too
13:01:46 <AnMaster> Slereah_, yeah they don't use the file system for a language indeed
13:02:08 <AnMaster> hm it should be easy to make a python-style LISP
13:02:11 <AnMaster> I mean no ()
13:02:14 <AnMaster> just use indention
13:02:25 <Slereah_> Plus, engineers are evil, according to my professors
13:02:32 <AnMaster> define
13:02:32 <AnMaster> x
13:02:32 <AnMaster> lambda
13:02:32 <AnMaster> NIL
13:02:32 <AnMaster> +
13:02:35 <AnMaster> 1
13:02:37 <AnMaster> 2
13:02:39 <AnMaster> like that
13:02:41 <fizzie> There's at least one SRFI for an indentation-sensitive Scheme syntax.
13:02:42 <AnMaster> what a horrible idea
13:02:47 <Slereah_> Python doesn't use that much indentation
13:02:48 <AnMaster> fizzie, ew
13:02:52 <AnMaster> Slereah_, true
13:03:00 <fizzie> http://srfi.schemers.org/srfi-49/srfi-49.html
13:03:02 <AnMaster> also I hate indention sensitive languages
13:03:10 <Slereah_> I'm okay with it
13:03:15 <Slereah_> Python is pretty cool
13:03:29 <Slereah_> I find it better than curly brackers and ; everywhere
13:04:20 <oklopol> wow that looks nice
13:04:30 <AnMaster> oklopol, what one?
13:04:36 <oklopol> what fizzie linked.
13:04:51 <ehird> oklopol: the problem is
13:04:58 <ehird> even simple structures get huge
13:04:59 <fizzie> Eh, it's just syntax; after some small period of adjustation it's not like you really have to pay any attention to {};s -- or in Scheme's case, the ()s.
13:05:12 <oklopol> ehird: i'm not saying it's a good thing. it just looks nice.
13:05:15 <AnMaster> I prefer the third way
13:05:17 <ehird> i.e. a 3 line scheme thing becomes 10 lines
13:05:18 <AnMaster> ,;.
13:05:19 <ehird> oklopol: heh :)
13:05:20 <ehird> agreed
13:05:24 <oklopol> i also think nopol looks nice.
13:05:27 <oklopol> :P
13:05:42 <ehird> oklopol: it did until you added : and
13:05:42 <ehird> .
13:05:47 <ehird> i preferred the >< fuckery
13:06:00 -!- KingOfKarlsruhe has quit (Remote closed the connection).
13:06:19 <oklopol> i find even the factorial a bit hard to read. and that's a trivial func
13:06:21 <ehird> http://www.fucknorrisfacts.com/
13:06:26 <oklopol> ehird: . and : are awesome.
13:06:34 <ehird> oklopol: < and > are awesomer
13:06:49 <fizzie> What does nopol look like? There's a spec?
13:06:56 <ehird> fizzie: Like this:
13:07:04 <ehird> <:.>:.:::<.:>
13:07:08 <ehird> it has <regular lists>
13:07:10 <ehird> and >neglists<
13:07:18 <ehird> neglists are nested to a negative depth
13:07:28 <ehird> and . and :... I don't know what they do but i twas awesomer when it was just > and <
13:07:33 <ehird> and there is no spec, its an oklopol language
13:07:47 <fizzie> So oklopol is implemented with it?
13:07:56 <oklopol> there's a reference implementation
13:08:04 <ehird> fizzie: yeah
13:08:07 <oklopol> which compiles me, yes.
13:08:12 <ehird> the oklo OS has the low level language as nopol
13:08:15 <ehird> and oklotalk is built on it
13:08:22 <oklopol> http://www.vjn.fi/oklopol/nopol.txt this is pretty much all there is online.
13:08:24 <oklopol> :)
13:08:44 <oklopol> that maps a function over a list.
13:09:03 <AnMaster> oklopol, where is the function?
13:09:09 <ehird> oklopol: seriously, replace the : and . with <>s
13:09:11 <ehird> omg
13:09:13 <ehird> brilliant idea:
13:09:17 <ehird> you have <nested> and >nested<
13:09:19 <ehird> so make : and . the badly nested ones
13:09:20 <oklopol> it's basically list rewriting with lambdas and negative lists, which means you can map a lambda to the elements of a list
13:09:21 <ehird> >> and << or something
13:09:24 <ehird> do it oklopol
13:09:26 <ehird> it will be amazing
13:09:34 <AnMaster> oklopol, so what exactly does : and . do?
13:09:40 <oklopol> AnMaster: they are for naming.
13:09:48 <AnMaster> oklopol, well how do they work?
13:09:49 <oklopol> and wait a sec.
13:09:50 <ehird> i love seeing AnMaster randomly pinged.
13:09:52 <ehird> it's zen.
13:10:15 <oklopol> naming plus err... <. and <: are special
13:10:34 <ehird> do it oklopol
13:10:39 <AnMaster> oklopol, well that doesn't make it possible to understand what exactly do they?
13:10:44 <oklopol> "<.." means "don't evaluate once", i guess it's kinda like `d in unlambda
13:10:46 <oklopol> *d
13:10:49 <AnMaster> ah
13:11:01 <oklopol> <. is lambda i think, and <: calls it.
13:11:23 <AnMaster> oklopol, nice. and the "freestanding" : and .?
13:11:25 <oklopol> lambdas are basically tree rewriting plus adding delays so static scoping works.
13:11:34 <oklopol> i'm not sure how that works, but somehow it does.
13:11:39 <AnMaster> heh
13:11:59 <oklopol> you can try reading the implementation, but, well, you can't.
13:12:12 <ehird> oklopol:
13:12:16 <oklopol> it's is written in a very okloesque way.
13:12:20 <ehird> i rewrote your example with just < and >
13:12:21 <ehird> : = <<
13:12:23 <ehird> . = >>
13:12:23 <ehird> < << < >> < << << > << << << > < << << >>> > < << << > < << << > < << << << << ><>
13:12:33 <ehird> it'd be prettier with neglists ofc
13:12:35 <oklopol> AnMaster: there are no freestanding ones, they are always bundled with a <
13:12:41 <AnMaster> oklopol, ah ok
13:12:49 <fizzie> That looks like a C++ template right there.
13:12:51 <AnMaster> oklopol, so the <::> means?
13:12:52 <ehird> oklopol: isn't that wonderful
13:12:57 <AnMaster> fizzie, indeed
13:13:07 <oklopol> ehird: but... "." and ":" are my favorite characters in the whole ascii :|
13:13:16 <oklopol> they are zen.
13:13:20 <AnMaster> oklopol, I think your : and . are nicer
13:13:34 <oklopol> AnMaster: <::> is just a name
13:13:40 <AnMaster> oklopol, ah ok
13:13:45 <oklopol> the object "::"
13:13:55 <AnMaster> right
13:14:30 <AnMaster> oklopol, this language sounds rather close to unlambda?
13:14:32 <oklopol> just by adding characters it would become pretty much just basic LC assuming you don't have <.. in the actual source but let the interpreter supply them as lambdas get evaluated.
13:14:39 <AnMaster> reminds me of underload too
13:14:46 <oklopol> no, it has pattern matching and all that
13:14:49 <oklopol> it's closer to scheme
13:14:53 <AnMaster> ah
13:14:59 <AnMaster> oklopol, is it TC?
13:15:04 <oklopol> yes.
13:15:09 <oklopol> i've implemented ski in it
13:15:12 <AnMaster> ok
13:15:12 <oklopol> "implemented"
13:15:26 <AnMaster> oklopol, any IO?
13:15:28 <oklopol> it's not exactly a feat in a functional language.
13:15:30 <oklopol> no, none
13:15:42 <oklopol> it's based on the nopular paradigm
13:15:45 <oklopol> a program does nothing.
13:16:02 <AnMaster> oklopol, that "ski"? can't find it on the esolang wiki
13:16:12 <fizzie> S, K and I combinators, I guess.
13:16:17 <AnMaster> ah right
13:16:19 <fizzie> And at least it does nothing in an interesting way.
13:16:37 <oklopol> yes, that's the point
13:19:33 <Slereah_> functional doesn't mean it's easy to do SKI :o
13:20:04 <oklopol> doesn't?
13:20:13 <oklopol> assuming you just make the combinators
13:20:15 <oklopol> no parsing.
13:21:50 <Slereah_> How would you go about it with recursive functions?
13:23:39 <oklopol> you can't :||||
13:26:22 <AnMaster> eh?
13:26:37 <oklopol> ;)
13:26:54 <Slereah_> Shit's so TC dude
13:26:55 <AnMaster> hm
13:27:00 <AnMaster> wikipedia says "In fact, in computability theory it is shown that the μ-recursive functions are precisely the functions that can be computed by Turing machines."
13:27:04 <AnMaster> so
13:27:10 <Slereah_> It's like the orignal TCness
13:27:22 <AnMaster> if SKI is TC then it should be able to do those?
13:27:27 <Slereah_> Well, unless you count combinators and the analytical engine
13:27:32 <Slereah_> And... Sanskrit?
13:27:40 <Slereah_> AnMaster : Yeah, but easily?
13:27:54 <AnMaster> Slereah_, ok fair point
13:28:38 <Slereah_> recursive functions probably have the worst way of keeping track of the program
13:28:47 <AnMaster> oh?
13:29:09 <AnMaster> I haven't read more than the intro in the wikipedia article yet
13:29:10 <Slereah_> Well, you can do it with many ways, but there's one that works for arbitrarily large numbers
13:29:25 <Slereah_> Gdel used motherfucking Gdelisation :o
13:29:33 <AnMaster> eh?
13:30:09 <Slereah_> You turn the sequence of number <a,b,c,d,...> into 2^a * 3^b * 5^c * 7^d * ... * p^z
13:30:13 <Slereah_> Where p is a prime number
13:30:26 <AnMaster> hm ok
13:30:58 <Slereah_> A lot of Gdel's paper is a way to actually use that piece of shit with -recursive functions.
13:31:20 <AnMaster> Slereah_, does that encoding offer unique values for every sequence?
13:31:25 <Slereah_> They didn't have Lisp back then, to just say "fuck it, let's just use a pairing function"
13:31:27 <Slereah_> Yes.
13:31:35 <Slereah_> Because a number has just one prime decomposition
13:31:39 <AnMaster> ah true
13:31:46 <oklopol> Slereah_: "can" is such an ambiguous word.
13:31:57 <AnMaster> yes makes sense. but is kind of hard to use
13:32:14 <Slereah_> Yeah.
13:32:30 <Slereah_> Also my keyboard turned QWERTY for no reason
13:32:32 <oklopol> the question is not whether you have a pairing function in the language
13:32:42 <oklopol> it's whether you can implement it from withing the language, somehow.
13:32:53 <Slereah_> Well you can
13:32:59 <Slereah_> But how easily
13:33:06 <oklopol> i mean
13:33:20 <oklopol> can you create some kind of a syntactic aid for yourself from within the language.
13:33:25 <AnMaster> Slereah_, dvorak user?
13:33:35 <ais523> Slereah_: what's your keyboard normally, AVERTY?
13:33:36 <Slereah_> AZERTY AnMaster
13:33:38 <AnMaster> ah French
13:33:41 <oklopol> naturally you can encode and decode any pair in a tc language, esoness comes from whether that's verbose to do
13:33:44 <Slereah_> Yeah
13:33:51 <AnMaster> AVERTY?
13:34:05 <fizzie> There's a SICP example (I think) which does lists of integers by using 2^a * 3^b to represent the (a, b) pair.
13:34:05 <ais523> Slereah_: is AZERTY designed to be difficult to type with in French, like QWERTY is difficult to type with in English?
13:34:08 <ais523> AnMaster: typo
13:34:12 <AnMaster> ais523, does that mean "something that is likely to avert"? ;P
13:34:27 <ais523> I suppose it could do, but that wouldn't make a whole lot of sense
13:34:36 <Slereah_> I ll restart mIRC
13:34:48 -!- Slereah_ has quit.
13:35:25 -!- Slereah_ has joined.
13:35:27 <Slereah_> Thar
13:35:54 <Slereah_> But yeah, there's an easier way to do all those functions, though still not that easy.
13:36:01 <Slereah_> You have to define logical functions.
13:36:03 <oklopol> :o ö o: .o. .n. .
13:36:20 <Slereah_> and, or, not, and "there exist an x inferior to n such that"
13:36:20 <AnMaster> fizzie, hm I remember there is one using lambdas for it
13:36:33 <Slereah_> Also "the smallest x inferior to n such that"
13:36:42 <fizzie> The lambda one is a very common one.
13:36:58 <AnMaster> fizzie, don't remember one based on primes, but I could have forgot it
13:37:05 <fizzie> It might've been elsewhere.
13:37:24 <fizzie> It generates rather large numbers fast, though.
13:37:37 <Slereah_> A Godel number generator?
13:37:39 <Slereah_> I made one if you want :o
13:37:58 <fizzie> No, the (a, b) = 2^a*3^b representation for lists of integers.
13:38:01 <AnMaster> fizzie, also how would you get a and b back out of that?
13:38:20 <fizzie> Modulo 3 and logarithm base 2 for a.
13:38:21 <Slereah_> http://membres.lycos.fr/bewulf/Russell/godel.scm
13:38:26 <AnMaster> fizzie, ah right
13:38:29 <fizzie> Er, not modulo three. :p
13:38:30 <Slereah_> fizzie : That's what a godel number is
13:38:32 <fizzie> But anyway.
13:38:44 <Slereah_> Just more general
13:39:02 <Slereah_> You can input a list directly instead of pairs
13:39:22 <AnMaster> Slereah_, "server didn't respond"?
13:39:32 <fizzie> Yes, well, this was just in an example for nonstandard ways of doing cons cells.
13:39:33 <AnMaster> hm now it works
13:39:36 <Slereah_> Lies!
13:39:38 <Slereah_> It did!
13:39:43 <AnMaster> Slereah_, second time
13:40:51 <Slereah_> Now all I need to do is my language.
13:41:28 <Slereah_> Although the fixed number of arguments in Scheme is annoying to do it
13:41:39 <fizzie> Anyway, in that scheme (1 2 3) = (1 . (2 . (3 . 0))) = 2^1*3^(2^2*3^(2^3*1)), which is already 7.4*10^12521.
13:41:42 <ehird> scheme has variable arguments Slereah_
13:41:46 <ehird> (define (func . args)
13:41:59 <AnMaster> well those gödel numbers seems like an easy way to make any language with a finite number of bignums pass the "infinite storage" part of tc-ness
13:42:21 <Slereah_> ehird : Not what I mean
13:42:39 <Slereah_> I mean like a function where you could do (f a b c) or (f a b c d) or (f a)
13:42:48 <ehird> yes
13:42:51 <ehird> (define (func . args)
13:42:54 <ehird> args is a list of all arguments
13:42:58 <Slereah_> Oh.
13:42:58 <AnMaster> Slereah_, you can do that yes
13:43:03 <ehird> note fancy dot
13:43:12 <Slereah_> Why thank you sir.
13:43:16 <Slereah_> I'll do that.
13:43:31 <Slereah_> Is args actually args?
13:43:35 <Slereah_> Not a placeholder?
13:43:38 <ehird> Slereah_: yes
13:43:43 <ehird> (define (func first-arg . rest-of-args)
13:43:44 <ehird> also works
13:43:48 <ehird> if you want to mandate at least one arg
13:43:51 <ehird> Slereah_: Also
13:43:54 <ehird> if you have a list
13:43:59 <ehird> and want to call a func with those args
13:44:01 <ehird> (apply func args)
13:44:33 <fizzie> There's also (lambda x ...) if you want a lambda with variable arity; x will be the list of arguments.
13:44:48 <Slereah_> How do I call the arguments if they're not explicitely named though?
13:45:30 <Slereah_> Do they have a number or something?
13:45:34 <fizzie> It's a list.
13:45:39 <fizzie> You can use list-ref to it.
13:45:46 <fizzie> (Or car and cdr.)
13:45:47 <Slereah_> Oh.
13:46:05 <Slereah_> Let's try!
13:46:10 <fizzie> It would be prettier with a pattern-matching thing, but those are not (R5RS, anyway) standard. Still, everyone has at least one.
13:47:04 <AnMaster> I can never remember which is which if car and cdr
13:47:05 <Slereah_> > (godel-string "butt")
13:47:05 <Slereah_> 2729100455414265779826822625632063613442385101061005941186642454782817725061083467320450990529105718175359388890671487844122981707245012734797343852787385177612304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
13:47:14 <Slereah_> Well, still works. Let's add the 's!
13:47:15 <ehird> wb ais523
13:47:44 <AnMaster> Slereah_, more space efficient to use ascii encoding though ;)
13:48:34 <ais523> AnMaster: a in Underload is named after car, convolutedly, to be precise it's the opposite of car
13:48:39 <ais523> creates a list whose first element is its argument
13:48:50 <Slereah_> AnMaster : recursive functions cannot handle strings!
13:48:51 <AnMaster> sigh
13:48:57 <AnMaster> Slereah_, true
13:48:58 <Slereah_> Everything is number!
13:48:59 <ais523> this would make a lot more sense if A and D were in the lang too, but those are Underlambda/Overload, not Underload
13:49:07 <Slereah_> That's why I created Limp.
13:49:17 <Slereah_> To try the best of both world.
13:49:29 <Slereah_> Although I'm still not sure how I'm going to do the pi calculus part
13:49:38 <AnMaster> ais523, that doesn't really answer the question
13:49:54 <ais523> car gives you the first element
13:49:55 <fizzie> Also: the HtDP book, and I think some PLT dialect, uses and prefers the names "first" and "rest" for "car" and "cdr".
13:49:57 <ais523> cdr gives you the other elements
13:49:58 <AnMaster> right
13:50:10 <AnMaster> ais523, what does the words stand for now again?
13:50:19 <AnMaster> I mean head or tail would make more sense to me at least
13:50:20 <ais523> content of address register and content of decrement register
13:50:29 <ais523> it's implementation details of a decades-old Lisp implementation
13:50:32 <AnMaster> heh
13:50:41 <fizzie> Personally I like how they've kept that part.
13:50:42 <ais523> just everything copied the names from it for some unknown stupid historical reason
13:50:47 <ais523> and now we're stuck with them
13:51:00 <AnMaster> ais523, and the word cons?
13:51:06 <fizzie> It's stupid, but it's more funny-stupid than painful-stupid.
13:51:07 -!- Slereah has joined.
13:51:19 <Slereah> >:|
13:51:20 <fizzie> That CONStructs things; it's at least easy to remember.
13:51:31 <AnMaster> ah
13:51:48 <AnMaster> well ok car and cdr are in dictionary order
13:51:49 <AnMaster> afk
13:52:28 <Slereah> "adress" and "decrement"
13:52:30 <Slereah> How lame
13:53:46 <fizzie> And actually it seems to be "Contents of the Address/Decrement part of Register number #", not some specific address/decrement registers.
13:54:14 <fizzie> Since they refer to 15-bit parts of the 36-bit word.
13:54:50 <Slereah> I guess the rest is the adress of the pair!
13:56:11 <fizzie> The other 6 bits seem to have been a 3-bit "prefix part" and "tag part" and corresponding CPR/CTR instructions for those.
13:56:34 <ehird> ais523: what would you suggest
13:56:46 <ais523> for what? car and hdr?
13:56:47 <fizzie> But it seems that first/rest names were already in use in 1959 or so; they haven't really caught on.
13:56:51 <ais523> head and tail is what I'm used to
13:56:58 -!- Slereah_ has quit (Read error: 60 (Operation timed out)).
13:57:05 <Slereah> I use < and >
13:57:14 <Slereah> BROINFOCK POWOR
13:57:40 <fizzie> Wikipedia lists the c[ad]+r compositions as an "advantage" of those names. That's a bit... arguable.
13:59:03 <fizzie> Besides, you could easily create compositions out of first/rest, too. caddr = frrest, cdaar = rffirst, and so on. Very sensible.
13:59:53 <Slereah> Frrrrrrest!
13:59:59 <Slereah> It looks pretty ugly
14:00:10 <fizzie> (set-frrrrrest! x 'foo)
14:00:43 <Slereah> (define (p n . args)
14:00:43 <Slereah> (define (pint n2 . args)
14:00:43 <Slereah> (if (= 1 n2) (car args)
14:00:43 <Slereah> (pint (- n2 1) (cdr args))))
14:00:43 <Slereah> (pint n args)
14:00:43 <Slereah> )
14:00:51 <Slereah> What's wrong with this projection function?
14:01:29 <fizzie> You want something like (apply pint (cons n args)) if you want to just pass those arguments on.
14:01:44 <fizzie> Or (define (pint n2 args) ... )
14:01:58 <Slereah> Oh.
14:02:04 -!- oklopol has quit (Read error: 145 (Connection timed out)).
14:02:11 <fizzie> The way it's written, (pint n args) will cause 'pint' be called so that the arguments are wrapped twice into a list.
14:02:48 <Slereah> But it's written (pint n2 . args)
14:03:03 <Slereah> Owait
14:03:09 <fizzie> Yes, and when you call it like (pint n args), the 'args' in pint2 will be a single-value list containing args.
14:03:57 <Slereah> Yay, it works :D
14:04:06 <fizzie> I don't see why you need an inner function, though, if you just want to call it with the same arguments the outer one is called with.
14:04:17 <Slereah> Although the projection function is admitedly the most useless
14:04:40 <Slereah> Because I'm stupid and I don't want a loop :(
14:05:33 -!- Dewi has quit (Read error: 60 (Operation timed out)).
14:05:39 <Slereah> Let's try an essential function, although so hard to write!
14:05:56 <Slereah> (define (s x) (+ x 1))
14:05:57 <Slereah> :D
14:06:06 <fizzie> I mean, what's wrong with (define (p n . args) (if (= 1 n) (car args) (apply p (cons (- n 1) (cdr args))); of course if you do end up doing (define (pint n args) ...) instead, the inner function makes sense since you can then call it with (cdr args) without the apply.
14:06:49 <Slereah> Well, the function ended up as
14:06:50 <Slereah> (define (p n . args)
14:06:50 <Slereah> (define (pint n2 args)
14:06:50 <Slereah> (if (= 1 n2) (car args)
14:06:50 <Slereah> (pint (- n2 1) (cdr args))))
14:06:50 <Slereah> (pint n args)
14:06:52 <Slereah> )
14:07:35 <Slereah> http://membres.lycos.fr/bewulf/Divers6/math-explained.gif
14:07:37 <Slereah> Hm.
14:08:40 <fizzie> Although you could just (define (p n . args) (list-ref args (- n 1)) if I'm reading that function right.
14:09:04 <Slereah> Well, it's the projection function
14:09:17 <Slereah> (p n a b c d ...) returns the nth variable
14:09:36 <fizzie> Yes; (list-ref list n) returns the n'th element of the list, although it's zero-based.
14:09:52 <Slereah> Zero-based?
14:10:07 <fizzie> (list-ref '(a b c) 1) ==> 'b
14:10:22 <Slereah> Oh.
14:10:27 <Slereah> Well, I could just do +1.
14:10:34 <Slereah> Or -1, more accurately
14:11:12 <Slereah> Thank youz
14:12:01 <fizzie> Tried to compile jitfunge on OS X, but I get a "no return statement in function returning non-void" error (-Werror) from the C++ system header <tr1/hashtable>. Not nice.
14:12:30 <Slereah> Is there a way to do (f a b c d ...) from a function f and a list of functions a b c d... without doing recursion?
14:13:00 <ais523> Slereah: why would you want to avoid doing recursion?
14:13:08 <ais523> but yes, cons f to the start of the list
14:13:10 <ais523> then eval the result
14:13:31 <Slereah> Oh.
14:13:37 <Slereah> Well, to write a shorter program.
14:13:46 <fizzie> Er, I think what was wanted here is (apply f args).
14:13:55 <Slereah> Maybe, let's see!
14:13:59 <ais523> I didn't know that one, is it standard Lisp?
14:14:11 <Slereah> I use Scheme, ais523
14:14:12 <fizzie> If args is the list '(a b c), then (apply f args) will do (f a b c).
14:14:16 <fizzie> It's standard Scheme.
14:14:50 <ais523> ah, ok
14:14:58 <fizzie> Or more accurately, if args is really '(a b c), quoted like that, then (apply f args) will do (f 'a 'b 'c). But I hope the point was clear.
14:16:37 <Slereah> Fuck, the function now.
14:16:39 <Slereah> Hm.
14:19:56 <fizzie> Common lisp seems to have (apply #'foo list) too, except that you need the #' syntax to get a function object, thanks to it being a lisp-2.
14:21:54 <Slereah> Fuck.
14:22:15 -!- Dewi has joined.
14:22:36 <Slereah> It should be of the form (mu n f), but that means that f should have all its variables filled, except for one.
14:22:52 -!- oklopol has joined.
14:23:14 <Slereah> I guess I could use a lambda.
14:23:32 <Slereah> Like ^x.fabxde...
14:23:54 <Slereah> But it needs to be there at parsing, not in the function, I think.
14:29:11 <fizzie> Aren't you just going to have µ return a function that takes k arguments and then does whatever it should?
14:29:54 -!- CakeProphet_ has joined.
14:29:56 <Slereah> Well, returns a number.
14:30:34 <Slereah> ( n f) -> returns the smallest number such that (f a, b, c, ... nth argument, ...) is zero
14:30:58 <Slereah> Or zero otherwise, but since there's no general way of seeing if it won't stop, no worries
14:31:31 -!- CakeProphet has quit (Read error: 60 (Operation timed out)).
14:31:36 -!- CakeProphet_ has changed nick to CakeProphet.
14:33:02 <fizzie> I'm not quite sure how you're going to call (f a), (f a b), (f a b c), ... if you just have the call (µ n f).
14:33:31 <Slereah> Well, f is a unary function.
14:33:57 <Slereah> But it's because it's an n-ary function with n-1 values filled.
14:34:17 <Slereah> So it's not actually that will take care of that.
14:34:29 <Slereah> Which means I'll have to do at least some parsing.
14:34:32 <Slereah> Which makes me frown.
14:34:43 <Slereah> Never have I tried parsing in Scheme D:
14:38:07 <fizzie> From what I've read at the "µ-recursive functions" page, the µ operator takes a function and returns a function that takes f's parameters. I can do Scheme, but I'm not quite sure how µ works, so can't comment on that.
14:39:20 <Slereah> Well, as said, y applied to f (x, y, z, ...) returns the smallest y such that f = 0.
14:39:46 <Slereah> But for... decidability reasons, x, z, and all other arguments must have values.
14:40:04 <Slereah> It's just a looping function, really.
14:40:27 <Slereah> The only way for an infinite loop.
14:41:25 <fizzie> So why can't your µ operator return the function which accepts the values for those arguments, and then returns the smallest y? (And really, I'm still not seeing the sense in there; "µy returns the smallest y"; what's the y in µy?
14:41:52 <Slereah> So I'll turn y f(a, y, b, c, ..) into ( 2 (lambda x) (f a x b c ...))
14:42:23 <ais523> fizzie: I think the mu is like the lambda; basically it's a loop setting y to values one at a time until it finds the lowest y at which f evaluates to 0
14:42:30 <fizzie> Ah, so it's the name of the parameter which will be used for searching.
14:42:43 <Slereah> Yeah.
14:42:49 <Slereah> I'll use a number.
14:43:39 <Slereah> There's actually a way to do a with the rest of the functions, but it's a bounded functions.
14:43:51 <Slereah> It will only search numbers between 0 and n.
14:44:26 <fizzie> Well, you can use a macro to automatically turn an expression like (µ 2 (f a b c d)) into (do-µ 2 (lambda (x) (f a b x c d))) if you want it to be pretty-looking.
14:44:34 <Slereah> Which is why Gdel didn't really use it. He just said "let's just use an unbounded version of that to search, negro"
14:45:19 <Slereah> I'll worry about that when I get to the parsing.
14:49:30 <fizzie> If you do some parsing, you can obviously do whatever you want; I thought you were aiming for something that sort-of works in a Scheme repl.
14:51:40 <Slereah> Well, it's supposed to be its own language.
14:51:54 <Slereah> I mostly do it as an exercize for Limp later on.
14:52:12 <Slereah> Limp's going to be way uglier, for it's full of side effects D:
14:52:18 <Slereah> And pi calculus
15:00:25 <fizzie> The topic's still a bit silly.
15:00:27 <fizzie> ^ul (*S!)(!)(*~:^):(t)~:(o)~:(b)~:(t)~(p)(o)(a~a*~a*~*^):^
15:00:27 <fungot> optbot!
15:00:28 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | dunno about ultra efficient :).
15:00:42 <fizzie> That's more appropriate.
15:00:43 <Slereah> ULTRAEFFICIENT
15:00:48 <Slereah> RAAAARGH
15:00:55 <Slereah> Optbot, destroy fizzie!
15:00:55 <optbot> Slereah: It's compiled into Brainfuck.
15:01:05 <Slereah> Man, I bet that hurt!
15:01:08 <fizzie> Ha, ha! I can't be destroyed, I'm compiled into Brainfuck!
15:01:23 <ais523> fizzie: that's quite an Underload program, why did you write it like that?
15:01:31 <fizzie> ais523: For practice.
15:01:34 <Slereah> Heh/
15:01:40 <ais523> fizzie: ok
15:02:15 <ais523> is it a stack trick to print it one at a time?
15:02:16 <Slereah> (define (mu n f) (
15:02:16 <Slereah> define (mui ni)
15:02:16 <Slereah> (if (= 0 (f ni)) (ni)
15:02:16 <Slereah> (mui (s ni) f)))
15:02:16 <Slereah> (mui 0 f))
15:02:19 <Slereah> Am I doin it rite?
15:03:19 <fizzie> There's that concatenation program -- (*~:^) -- that's duplicated between each letter, and the loopy part -- (a~a*~a*~*^) -- just digs it up and executes; except that sneakily under the (!) there's a print-out thing instead of the regular concatenation.
15:04:50 <fizzie> You want "ni" instead of "(ni)" there maybe? If it's a number, anyway.
15:05:21 <ais523> the quoting is one of the things that always confuses me with lispalikes
15:05:39 <Slereah> 'kay
15:05:46 <Slereah> Now for the recursion function...
15:05:48 <fizzie> I'm also not quite sure what the "n" parameter is for, since it's not used anywhere; and the "mui" is called with two arguments, yet accepts only one.
15:06:07 <Slereah> ...
15:06:08 <Slereah> Wait
15:06:12 <Slereah> You're write
15:06:24 <Slereah> n should disappear at parsing.
15:06:49 <Slereah> (define (mu f) (
15:06:49 <Slereah> define (mui ni)
15:06:49 <Slereah> (if (= 0 (f ni)) ni
15:06:49 <Slereah> (mui (s ni) f)))
15:06:49 <Slereah> (mui 0))
15:06:50 <Slereah> There.
15:07:12 <fizzie> That looks like it'd loop.
15:07:24 <Slereah> That's the point.
15:07:28 <fizzie> Well, except that the (mui (s ni) f) call has the f still.
15:07:43 <Slereah> It loops until (f n) is zero
15:07:47 <Slereah> Which might never happen.
15:07:51 <Slereah> It's what make it TC :o
15:08:30 <Slereah> It is some sort of problem in halting.
15:09:13 <Slereah> Of course, I'll see about that when I test it.
15:09:24 <fizzie> I usually just use the named-let for that sort of functions: (define (mu f) (let loop ((n 0)) (if (= 0 (f n)) n (loop (s n))))) -- but that's of course a matter of style.
15:09:46 <Slereah> Yeah.
15:10:00 <Slereah> I figured the original functional language should just have function calls :D
15:11:15 <fizzie> Well, it *is* a function call; (let loop ((n 0)) ... ) is mostly syntactic sugar for (letrec ((loop (lambda (n) ... ))) (loop 0)).
15:11:40 <Slereah> Syntactic sugar gives me diabeetus.
15:11:43 <Slereah> Hm.
15:13:31 <Slereah> (rec f g n x y z ...) -> h(0,x,y,z,...) = f(x,y,z, ...), h(n+1,x,y,z,...) = g(n,h(n+1,x,y,z,...),x,y,z,...)
15:13:34 <fizzie> Or ((lambda (x n) (x x n)) (lambda (loop n) ...) 0), for that matter. Although there should be a less messy way of expanding letrec.
15:13:36 <Slereah> Let's try that
15:16:17 <Slereah> (With that, I should be able to do functions lambda style - without a single function definition
15:19:51 <Slereah> (define (rec f g n . args) (if (= 0 n) (apply f args)
15:19:51 <Slereah> (g (- n 1) (rec f g (- n 1) args) args)))
15:19:54 <Slereah> This okay?
15:20:21 <Slereah> Wait, I've got all functions
15:20:24 <Slereah> I can just test it.
15:23:41 <Slereah> (rec f g (- n 1) args) does not work
15:23:45 <Slereah> What has science done D:
15:23:45 <fizzie> Yes.
15:23:52 <fizzie> Well, it's the same problem as earlier.
15:24:05 <Slereah> Probably!
15:24:06 <fizzie> Inside rec, that causes args to become (args).
15:24:36 <Slereah> What is the solution?
15:25:04 <ehird> Slereah: apply
15:25:07 <fizzie> (apply rec (append (list f g (- n 1)) args)) is one solution.
15:25:15 <ehird> Yes.
15:25:15 <Slereah> kthx
15:25:18 <fizzie> There are others, of course.
15:26:00 <Slereah> Oh fuck
15:26:12 <Slereah> I need to do it for g too now.
15:27:45 <fizzie> I probably would've written the thing so that (rec f g) returns a (lambda (n . args) ...) doing the (if (= 0 n) ...) thing; for some reason it feels nicer for me if (rec f g) would just return a recursive function that could be separately called.
15:28:49 <fizzie> Oh, and (apply rec `(,f ,g ,(- n 1) ,@args)) is arguably prettier than the more explicit (apply rec (append (list f g (- n 1)) args).
15:29:12 <fizzie> It's also arguably uglier, thanks to the quasiquote notation.
15:47:34 -!- Slereah has quit (Read error: 113 (No route to host)).
15:48:15 -!- oklopol has quit (Remote closed the connection).
15:49:01 -!- oklopol has joined.
15:51:34 -!- KingOfKarlsruhe has joined.
16:14:04 -!- Slereah_ has joined.
16:14:26 <Slereah_> RAGE
16:15:07 -!- KingOfKarlsruhe has quit (Remote closed the connection).
16:16:35 -!- Slereah has joined.
16:19:26 <Slereah> D:<
16:20:46 -!- oklopol has quit (Connection timed out).
16:22:10 -!- Hiato has joined.
16:27:47 -!- AquaLoqua has joined.
16:30:10 -!- Hiato has quit (Read error: 104 (Connection reset by peer)).
16:35:37 -!- Slereah_ has quit (Read error: 110 (Connection timed out)).
16:36:20 -!- oklopol has joined.
16:48:40 -!- jix has joined.
16:54:28 <AquaLoqua> lets see, oklopol, don't suppose you could answer a quickie for me
16:54:33 <AquaLoqua> (ps: it's Hiato)
16:55:19 <oklopol> i can.
16:55:21 <ais523> hi AquaLoqua, like the nick
16:55:30 -!- jix has quit ("...").
16:55:36 <oklopol> lol i read that as "AnMaster" :)
16:55:49 -!- jix has joined.
16:56:13 <AquaLoqua> :P Well, picture this quickly. I have a language (SCPL), it's one instruction and it is A:B,C meaning
16:56:14 <fizzie> Heh, I also read that as "AnMaster".
16:56:53 <oklopol> i think i just read the capital A.
16:56:58 <AnMaster> ?
16:57:01 <AquaLoqua> if the variable at A>0 then B+=C, now the thing is, there is only 1 word worth of vars, is it possible to create code to dynamicalyl address cars
16:57:02 -!- ais523 has changed nick to Ais523.
16:57:04 <AquaLoqua> *vars
16:57:18 <AnMaster> damn oerjan isn't around
16:57:28 <AnMaster> oh well I have to use my own frying pan
16:57:33 <Ais523> AquaLoqua: are you accessing the variables literally? or via constants?
16:57:43 <oklopol> Ais523: damn you :P
16:57:55 * AnMaster hits Ais523 with a frying pan ====\____/
16:57:58 <Ais523> oklopol: please don't insult me like that, I take it personally
16:58:00 <oklopol> i'm not entirely sure i get that.
16:58:01 <Ais523> take that back
16:58:06 * oklopol takes
16:58:06 <AquaLoqua> via constants, so, for example 0x0000 0xFFFD 0x1234 is a command
16:58:46 <Ais523> AquaLoqua: if a variable's address is hard-coded in the command, like it seems to be, your only method of dynamic addressing is a huge switch statement, effectively
16:58:52 <AnMaster> AquaLoqua, are you new here?
16:58:57 <oklopol> are they *actual* constants, is there a separate data segment and a text segment?
16:58:59 <Ais523> AnMaster: AquaLoqua = Hiato
16:59:01 <AnMaster> ah
16:59:13 <Ais523> oklopol: ah, good point
16:59:39 <oklopol> and are they bignums?
16:59:41 <AquaLoqua> yeah, that's what I thought ais523, but considering you have only 65535 vars, you acn't possible write a huge else if block as that would take them all up
16:59:44 <Ais523> if the code's self-modifying you can do it that way; I have a computer book from before TTL was invented, people used core stores as memory, and pointers were done by selfmodifying code
16:59:45 <AnMaster> Ais523 -= 'A';
17:00:09 -!- Ais523 has changed nick to Ais458.
17:00:18 <AnMaster> damn you ;P
17:00:31 <Ais458> AnMaster: please, again? I don't like religious insults
17:00:33 <fizzie> ais seems to be ASCII-based.
17:00:37 <AnMaster> Ais458[0] = a;
17:00:47 -!- Ais458 has changed nick to ais458.
17:00:52 <AquaLoqua> oklopol: not sure what you mean, but probably actual data, the whole thing prog is stored in the mem (not the var mem though)
17:00:52 -!- comex has changed nick to biden.
17:00:54 <AnMaster> ais458 += 'A';
17:00:55 <oklopol> ais458: why don't you like them?
17:00:59 -!- ais458 has changed nick to ais523.
17:01:16 <AnMaster> ais458, hm ok... what about: "commercial you"?
17:01:20 <ais523> oklopol: it's just a line that I don't like people to cross, I'm not even religious but like to keep my options open
17:01:39 <Slereah> (define (rec f g n . args) (if (= 0 n) (apply f args)
17:01:41 <ais523> and I don't like random damning, because if it does work it's one of the worst things you can do to someone
17:01:42 <Slereah> (apply (g append(list( (- n 1) (apply (rec (append (list f g (- n 1))args)))) args)))))
17:01:45 <Slereah> Internet, what is wrong with this?
17:01:46 <AnMaster> ais523, in Sweden religious results are seen as less offensive than sexual ones. Maybe not the same in UK?
17:02:04 * AquaLoqua slaps ais523 around a bit with a large trout
17:02:05 <ais523> AnMaster: in general it is the same, my preferences are different though
17:02:17 <ehird> ais523: JESUS LOVES YOU
17:02:19 <fizzie> (apply (g append(...))) at least doesn't make sense; probably should be (apply g (append (list ...)))
17:02:21 <ais523> troutslapping is OK, although mild, although potentially painful in RL
17:02:30 <AnMaster> ais523 also um get some holy water to uncurse it
17:02:32 <AnMaster> ;P
17:02:45 <ais523> AnMaster: is that a Nethack reference?
17:02:49 <AnMaster> ais523, yes
17:02:59 -!- biden has changed nick to obama.
17:03:16 -!- AquaLoqua has changed nick to McCain.
17:03:33 <McCain> it was crying out for that
17:03:33 -!- obama has changed nick to Guest64551.
17:03:35 * AnMaster waits for Ron Paul
17:03:45 -!- McCain has changed nick to AquaLoqua.
17:03:56 -!- Guest64551 has changed nick to biden.
17:04:02 <oklopol> ais523: good thing i did take it back then. if it had been anyone else i'd just have assumed they were kidding.
17:04:18 <fizzie> Also "list( (- n 1) ..." has (- n 1) in the function-call position, so it will try to evaluate (- n 1) as a function; again, should be something like (list (- n 1) (apply ...)).
17:04:28 <AnMaster> ais523, well if you are happier I take it back
17:04:33 <ais523> ok, thanks
17:04:33 <AnMaster> though it is just words IMO
17:04:45 <AnMaster> you think something actually happened there?
17:04:46 <AnMaster> ;P
17:05:03 -!- ehird has changed nick to ronpaul.
17:05:09 <AnMaster> wow
17:05:11 <ais523> (put it this way, I'm the sort of person who doesn't believe in superstitions but follows a random superstition because I felt I wasn't superstitious enough, and know it's safe because I've verified by experiment that it's unlikely to make much of a difference)
17:05:13 <AnMaster> ehird did what I said
17:05:15 <Slereah> Oh lawd.
17:05:19 <AnMaster> ais523, tell him that! if he is ignoring me
17:05:26 <AnMaster> * AnMaster waits for Ron Paul
17:05:32 <Slereah> That args business confuses me :(((
17:05:34 <ronpaul> ais523: which superstition? XD
17:05:43 <ais523> ronpaul: AnMaster asks if you're ignoring him
17:05:48 <ais523> ronpaul: saluting magpies
17:05:54 <ronpaul> ais523: i am ignoring him
17:05:57 <AnMaster> well
17:05:57 <ronpaul> and lol :D
17:05:58 <ais523> it's a safe superstition because it clearly makes no difference whatsoever
17:06:02 <AnMaster> ais523, tell him then what happened
17:06:10 -!- jix has quit ("...").
17:06:13 <oklopol> pascal's wager
17:06:15 <oklopol> huh
17:06:16 <AnMaster> I guess it was subconscious I bet
17:06:19 <fizzie> I think it was more "AnMaster wants you to know that he predicted Ron Paul's imminent appearance."
17:06:20 <ronpaul> pascal's wager is pretty much invalid
17:06:23 <AnMaster> s/I bet/
17:06:29 <ronpaul> it fails to account for the fact that there are millions of religions.
17:06:29 -!- jix has joined.
17:06:34 -!- jix has quit (Client Quit).
17:06:35 <ais523> [17:03] * AnMaster waits for Ron Paul | [17:05] *** ehird is now known as ronpaul. | [17:05] <AnMaster> ehird did what I said | [17:05] <AnMaster> ais523, tell him that! if he is ignoring me
17:06:35 <ronpaul> and that each of them have an equal chance.
17:06:37 <AnMaster> fizzie, and I suspected that ehird would do it
17:06:53 <ronpaul> ais523: considering AnMaster had no idea who ron paul is until i mentioned him a few days ago...
17:06:55 <ronpaul> <NickServ> Nick RonPaul is already registered to RonPaul.
17:06:57 <ronpaul> damn you Ron Paul!
17:06:58 -!- jix has joined.
17:07:02 <Slereah> RON PAUL
17:07:02 <Slereah> PON RAUL
17:07:02 <Slereah> RON PLAU
17:07:02 <Slereah> PRO LUNA
17:07:02 <Slereah> LUNAR OP
17:07:04 <oklopol> :)
17:07:10 <ronpaul> Slereah: !
17:07:13 -!- ronpaul has changed nick to ehird.
17:07:14 <ais523> ronpaul: also for the possibility of an antireligion which does horrible things to people who believe in god, and an XKCD religion which does horrible things to people who make stupid mathematical bets
17:07:17 -!- biden has changed nick to comex.
17:07:19 <oklopol> lunar op lol :D
17:07:33 <fizzie> "polar NU".
17:07:38 <Slereah> Isn't there just an easy way to transform a lis into a bunch of individual arguments?
17:07:39 <fizzie> Also Oral Pun.
17:07:41 -!- kar8nga has joined.
17:07:48 <oklopol> well oral pun is clearly the best
17:08:37 <fizzie> A "Nu" is a creature in Chrono Trigger, I seem to remember.
17:08:40 <ehird> ais523: a god who rewards people who think logically and therefore are atheists is both awesome and useless.
17:08:48 <Slereah> It would be pretty awesome
17:08:51 <ehird> and awesome, useless things are the best class of things.
17:09:31 <oklopol> i'm fairly superstitious when it comes to luck.
17:09:32 <AquaLoqua> hrmm, ehird logical thinking==atheism?
17:10:05 <oklopol> logical thinking => atheism, i think.
17:10:20 <oklopol> is what he meant.
17:10:29 <ais523> logical thinking >= atheism?
17:10:30 <ehird> oklopol: that was what i said, yeah
17:10:55 <ehird> Note that I'm not promoting logical thinking as a be-all end-all.
17:10:55 <oklopol> if someone confuses implication and equivalence once more i'm going to smack this world with a large trout.
17:10:55 <ais523> (/me remembers Arthur C Clarke's characterisation that in future there would be only two religions, one which believed in <= 1 god and one which believed in >= 1 god)
17:11:07 <ehird> -1 gods
17:11:14 * AquaLoqua slaps AquaLoqua around a bit with a large trout
17:11:20 <fizzie> logical thinking % atheism == 0?
17:11:38 <ais523> fizzie: wouldn't that imply that either logical thinking >= atheism or logical thinking == 0?
17:11:46 <ehird> logical thinking (crazy) logical thinking = your mom
17:11:50 <AquaLoqua> hrmm, but then, ais423, there is space for a third, a comprimise god=1, only 1
17:12:10 <AquaLoqua> *ais523 that is
17:12:26 <fizzie> ais523: Yes, well, at least |logical thinking| >= |atheism| then. % is a bit vague with that.
17:13:30 <AquaLoqua> yes, and M(atheism){Logical thinking}
17:13:44 <fizzie> You matheist!
17:14:02 <AquaLoqua> I like that
17:14:10 <AquaLoqua> I vote we make it a new religion
17:15:24 <fizzie> There is some sort of bad pun waiting in the "a is congruent to b modulo x" reading of "a % x = b" plus the "corresponding in character or kind" meaning of congruent plus whatever was above, but I can't make it work.
17:15:31 <oklopol> we actually considered registering an official religion with vjn at some point¨
17:15:32 <oklopol> *point
17:15:49 <AnMaster> official religion?
17:15:51 <oklopol> but in the end realized it might bring publicity, which we really didn't want.
17:15:52 <AnMaster> there is some register?
17:15:55 <AquaLoqua> what might vjn be?
17:16:06 <oklopol> www.vjn.fi
17:16:12 <oklopol> a random group i belong to.
17:16:12 <AquaLoqua> (as opposed to unoffical)
17:16:16 <fizzie> A friend in high school started a small few-person religion, but all I can remember about it was that it involved fish somehow.
17:16:33 <AnMaster> heh
17:16:45 <AnMaster> fizzie, fun
17:16:54 <oklopol> fizzie: official one? well, i'm assuming there is such a thing as an official religion, i don't actually know
17:17:16 <oklopol> the plan was abandoned before getting into details
17:17:45 <fizzie> oklopol: Not official. But I think there is indeed some register of them.
17:18:58 <oklopol> well unless it's official, it's not officially fun.
17:19:09 <oklopol> who hasn't made unofficial religions as kids
17:19:17 <oklopol> well i guess religious people may not have.
17:19:26 <fizzie> Yes, it's in the "uskonnonvapauslaki", vaguely translated "law of freedom of religion".
17:19:32 <fizzie> (At least in Finland, that is.)
17:19:45 <fizzie> You need at least 20 people for it.
17:19:55 <oklopol> lol.
17:19:58 <fizzie> That's actually pretty few.
17:20:06 <fizzie> http://www.finlex.fi/fi/laki/ajantasa/2003/20030453 for the Finnish-speaking people; chapter 2.
17:20:31 <oklopol> if it's 20, then i think we need to reconsider this.
17:20:31 <oklopol> i thought it was in thousands.
17:20:33 <oklopol> hmm
17:20:35 <ais523> does that include Flying Spaghetti Monsterism?
17:20:40 <oklopol> that may have been a bit silly of me.
17:20:41 <fizzie> And it's not actually a "official religion", it's a "officially registered religious community".
17:21:26 <fizzie> (And if there are Swedish-speaking people who are unexplicably interested about Finnish legislation, the Swedish version is at http://www.finlex.fi/sv/laki/ajantasa/2003/20030453 also.)
17:21:33 <oklopol> right. it's only cool if it's as official as christianity.
17:21:54 <ais523> *inexplicably?
17:22:01 <fizzie> ais523: Yes.
17:22:20 <oklopol> well, christianity is still somewhat in the law, so maybe not *that* official.
17:22:32 <fizzie> Yes; that would be very difficult.
17:24:24 -!- jix has quit ("...").
17:28:01 <fizzie> They will also only accept communities that have as their stated purpose [very freely paraphrasing] "to arrange and support activities that are based on a religious creed, writings considered holy, or other specific well-established principles that are considered holy".
17:28:05 <fizzie> That's rather vague.
17:29:29 <oklopol> might be useful to know whether we would actually have to lie to them that we believe in some kinda holy thing.
17:29:29 <oklopol> or whether we could do it, you know, bureaucrat to bureaucrat
17:29:30 <oklopol> and
17:29:34 <oklopol> i have no idea how that's spelt.
17:29:41 <oklopol> spelling is trivial..
17:29:41 <oklopol> *-.
17:30:11 -!- buud has joined.
17:30:15 <ais523> oklopol: you spelt it corrrectly
17:30:18 <ais523> and hi Hiato
17:30:30 <AquaLoqua> (that is v abot)
17:30:36 <ais523> hi vabot then
17:30:36 <buud> ais523: Because I could not stop for Death, He kindly stopped for me; The cube had food and maybe ammo. And immortality.
17:30:40 <oklopol> yeah i've just never seen it written
17:30:42 -!- jix has joined.
17:30:54 <fizzie> oklopol: Additionally, if you manage to get at least three members of your religious community to the same school, they are entitled to get religious teaching for that religion there.
17:31:00 <ais523> oklopol: it's a hard word to get right first time...
17:31:09 <oklopol> fizzie: does that apply to universities?
17:31:21 <oklopol> 4 members of vjn go to it.
17:31:26 <oklopol> err
17:31:28 <oklopol> turku uni
17:31:41 <fizzie> oklopol: Just "perusopetus", the obligatory thing. I don't think most universities have very much religious courses anyway.
17:31:53 <oklopol> compulsory
17:31:55 <oklopol> i thinks
17:32:04 <oklopol> hmm, and that's true.
17:32:08 <oklopol> i wasn't exactly thinking
17:32:09 <fizzie> Oh, and high school too.
17:32:52 <oklopol> darn. we're late
17:33:51 <fizzie> Also you would have had to convince your parents to demand that, it seems.
17:34:15 <oklopol> hmm.
17:34:37 <oklopol> that might've been a problem, i have pretty normal parents.
17:36:13 <fizzie> It's funny how people hyperlink random things in Wikipedia. This one paragraph has the words "blue", "green" and "pink" linked to the corresponding colours.
17:36:27 <fizzie> Just in case the reader would suddenly start to wonder about "blue".
17:36:30 <ais523> overlinking used to be even worse
17:36:40 <oklopol> overlink?
17:36:42 <ais523> there's a warning somewhere to tell people not to link every word in an article
17:36:54 <ais523> although I haven't seen it used much recently
17:36:59 <oklopol> oh.
17:37:04 <oklopol> overlinking. right.
17:37:09 <ais523> linking too much
17:37:21 <oklopol> yes yes, i thought it was a technical term or smth.
17:41:19 <fizzie> Also in the same article: the words "sword", "magical", "war", all to the generic entries.
17:41:31 <fizzie> "Hmm, I wonder what this word 'war' means? Thankfully, there's a link."
17:41:41 <ehird> fizzie: what about [[link]]
17:41:42 <ehird> THAT IS CONFUSING
17:41:50 <ais523> http://en.wikipedia.org/wiki/Special:Search?go=Go&search=link
17:41:52 <ehird> "Hmm, I wonder what this is? It's blue."
17:42:00 <ehird> "What should I do with it? Does it mean something?"
17:42:13 <ais523> [[blue]]. [[the weather in london|red]].
17:42:20 <ais523> unfortunately that doesn't work too well for other colours.
17:42:48 <fizzie> That's not there. A lot of "rare" words -- "broadsword", "condiment", "apocalyptic", "shell", "general", "court"...
17:42:59 <ehird> london rain is blood
17:44:20 <GregorR> They could set up a JavaScript onclick event so you can click on any word to go to its article :P
17:44:36 <GregorR> That way they wouldn't be links (technically)!
17:44:58 <ais523> GregorR: that would need an admin
17:45:30 <ehird> like ais523!
17:45:43 -!- AquaLoqua has quit ("Dana").
17:45:47 <ais523> in practice it would need an admin and a consensus to implement, or it'd be reverted
17:46:00 <ehird> just ban and deadmin every other admin.
17:46:01 <ehird> then do it.
17:46:11 <ais523> admins can't desysop each other, that needs a steward
17:46:22 <ehird> become a steward first then
17:46:38 <ais523> nah, that requires huge elections and the ability to speak multiple languages
17:46:42 <ais523> as well as telling the WMF who you are
17:46:55 <ehird> the ability to spaek multiple languages?
17:46:56 <ehird> wut
17:47:09 <ais523> ehird: stewards mostly handle crosswiki stuff
17:47:11 -!- AquaLoqua has joined.
17:47:16 <ehird> ah
17:47:22 <ehird> ais523: make an underload wiki, then
17:47:32 <fizzie> Can you, in fact, delete the main page now? There's that "wikipedia:don't delete the main page" page, and during those events it was obviously possible, but is it possible still?
17:47:41 <ehird> fizzie: I believe so.
17:47:45 <ehird> ais523: by which I mean an underload wikipedia
17:47:53 <ais523> fizzie: no, there's a custom extension running on Wikimedia specifically to stop people doing that
17:48:03 <fizzie> Aw.
17:48:10 <ais523> the devs implemented it to stop people blocking it in much hackier and more complex ways
17:48:13 -!- AquaLoqua has quit (Client Quit).
17:48:24 <ais523> nonetheless, it is actually possible to delete the main page anyway, but I won't tell you how
17:50:03 <ehird> tell me!
17:50:06 <ehird> i want to knowwwwwwwww
17:50:12 <ehird> ais523: deleting the templates on it?
17:50:28 <fizzie> Now *there's* a person who I especially wouldn't tell it. :p
17:50:43 <ais523> yes, agreed
17:52:28 <ehird> fizzie: Who would make me an admin?
17:52:29 <ehird> Srsly. :p
17:53:46 <ais523> ehird: I remember you telling me that you thought you could become an admin quite easily...
17:54:16 <ehird> I was joking.
18:05:57 <GregorR> so i herd u liek mudkips
18:06:18 <ais523> GregorR: why did you suddenly come up with a mudkips meme for no obvious reason?
18:06:28 <ehird> ais523: A better question is why not.
18:06:46 <ais523> ehird: something must have prompted it...
18:15:26 <oklopol> ehird: just ban and deadmin every other admin. <<< lol @ deadmin.
18:17:23 <oklopol> mainly because i first thought it was from dead + admin
18:19:18 -!- buud has quit (Read error: 110 (Connection timed out)).
18:21:58 <AnMaster> oklopol, hah same
18:41:28 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | I am ... just not right now X-P.
18:42:52 -!- jix has quit ("...").
18:47:09 <AnMaster> optbot!
18:47:10 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | doesn't make it acceptable.
18:47:13 <AnMaster> optbot!
18:47:14 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | 9x may actually BSOD from anything.
18:47:18 <AnMaster> hah
18:48:18 -!- jix has joined.
18:48:19 <ais523> AnMaster: XP BSODs if you attempt to debug graphical DOS programs under the DJGPP port of gdb in my experience, possibly to do with the video driver
18:48:27 <ais523> that presumably doesn't come up for most people, though
18:49:04 -!- kar8nga has quit (Remote closed the connection).
18:58:10 <AnMaster> ais523, haha
19:01:46 * ehird imagines a party for leap-seconds
19:01:51 <ehird> "3..2..1..YAAAAAAAAit's over"
19:02:51 <ais523> yay, leap seconds
19:09:48 <GregorR> Do people have leap-year parties ...?
19:10:38 <ais523> they have new-year parties
19:10:57 <ais523> this year's new-year party will be especially exciting as there'll be a leap-second party just before it
19:11:01 <ais523> 1 second earlier, to be precise
19:11:18 <GregorR> Yes, THAT'S the real excitement :P
19:11:39 <ais523> I've never knowingly lived through a leap second, and want to
19:14:13 -!- olsner has joined.
19:21:19 -!- KingOfKarlsruhe has joined.
19:29:37 <ehird> ditto
19:29:42 <ehird> ais523: we can have a party online
19:29:45 <ehird> get freenode to do it
19:29:49 <ehird> it's +m
19:29:52 <ehird> then -m for the leap second
19:29:54 <ehird> and +m right after
19:29:59 <ehird> you haev to celebrate quickly.
19:30:00 <ais523> I won't be online at 23:59:60...
19:30:23 <ehird> Hmph. :P
19:30:25 <ehird> Well, everyone else can do it
19:30:57 -!- puzzlet has quit (Remote closed the connection).
19:31:03 -!- puzzlet has joined.
19:31:22 <fizzie> It's, what, 02 here when they actually add the leap second? I can't be certain I'll be present either.
19:39:13 <fizzie> I'm not sure I've read this piece of Wikipedia earlier, about the 64-bit time_t: "In the negative direction, this goes back more than twenty times the age of the universe, and so suffices. In the positive direction, whether the approximately 293 billion representable years is truly sufficient depends on the ultimate fate of the universe, but it is certainly adequate for most practical purposes."
19:39:26 <ais523> haha
19:39:39 <fizzie> I'm sure there have been debates about that being too frivolous for an encyclopedia article.
19:39:53 <fizzie> The "age of the universe" and "ultimate fate of the universe" are links.
19:42:18 -!- Mony has quit ("Join the Damnation now !").
20:14:53 -!- Hiato has joined.
20:34:46 <AnMaster> fizzie, Deewiant: Question:
20:34:56 <AnMaster> Should HRTI use unix time?
20:35:02 -!- comex has changed nick to \n.
20:35:04 <AnMaster> or can the starting point be something else?
20:35:16 <AnMaster> say, since start of interpreter
20:35:26 <AnMaster> or since system boot
20:35:43 <Deewiant> err what? what starting point?
20:35:52 <AnMaster> Deewiant, that HRTI internally measures
20:36:13 <Deewiant> what starting point? how is it anywhere evident where HRTI started from?
20:36:30 <AnMaster> Deewiant, because it doesn't say how should HRTI handle the case of the system change changes
20:36:36 <AnMaster> should it be unaffected?
20:36:41 <AnMaster> or should the time returned be affected?
20:36:45 <Deewiant> UNDEF
20:36:52 <AnMaster> Deewiant, and what would you prefer?
20:37:01 <Deewiant> unaffected of course, it's a timer not a clock
20:37:14 <AnMaster> Deewiant, and is that the case for CCBI?
20:37:38 <Deewiant> might be on windows, probably not on posix
20:37:48 <Deewiant> since I guess gettimeofday() or whatever is the best option
20:38:29 <AnMaster> Deewiant, Well cfunge is optionally moving away from getttimeofday() since it is deprecated in POSIX.1-2008. Cfunge will still use it as a fallback if clock_gettime() isn't found
20:38:35 <AnMaster> also clock_gettime() is nanoseconds
20:38:57 <Deewiant> I use whatever tango provides, I don't know what it uses
20:39:45 <AnMaster> Deewiant, my system provide nanosecond granularity btw :)
20:39:57 <AnMaster> what a pitty HRTI can't express that
20:42:45 -!- \n has changed nick to blink.
20:43:13 -!- blink has changed nick to comex.
20:44:47 -!- Hiato has quit ("Leaving.").
20:57:52 -!- kar8nga has joined.
21:18:45 -!- KingOfKarlsruhe has quit (Remote closed the connection).
21:19:56 <AnMaster> fizzie, there?
21:20:11 <AnMaster> I made some large changes, I got no idea if it still works on OS X
21:20:27 <AnMaster> so if you please could test last cfunge on there? :)
21:21:41 -!- ab5tract has joined.
21:22:45 <AnMaster> ais523, there?
21:22:51 <ais523> yes
21:23:04 <AnMaster> ais523, an issue: on Linux you need to link librt to get clock_gettime()
21:23:10 <ais523> I know
21:23:21 <AnMaster> so a new dependecy for cfunge if and only if clock_gettime() is supported
21:23:28 <ais523> that's handled transparently somewhere in ick, I forget where, probably the bottom of perpet.c
21:23:32 <ais523> I check for it in configure
21:23:49 <AnMaster> ais523, well issue is cfunge these days set lots of important defines in cmake
21:24:03 <ais523> so presumably I can reuse the configure results when I get round to porting cfunge to the build system I use
21:24:05 <AnMaster> CMakeFiles/cfunge.dir/flags.make:C_DEFINES = -DDISABLE_GC -DUSE64 -DCONCURRENT_FUNGE -DFORTIFY_SOURCE=2 -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED -DHAVE_acosl -DHAVE_asinl -DHAVE_atanl -DHAVE_cosl -DHAVE_powl -DHAVE_roundl -DHAVE_sinl -DHAVE_sqrtl -DHAVE_tanl -DGC_DEBUG -DDEBUG -DHAVE_clock_gettime
21:24:10 <AnMaster> is what I have here
21:24:15 <AnMaster> on my debug build
21:24:27 <AnMaster> ais523, however on freebsd there is no librt
21:24:28 <ais523> most of those can be caught by autoconf easily enough
21:24:39 <AnMaster> clock_gettime() is in libc there
21:24:42 <ais523> ugh
21:24:49 <ais523> jumping from library to library is a pain
21:24:56 <AnMaster> ais523, I got a working check for it in my cmakefile
21:25:00 <AnMaster> but you need to handle that
21:25:03 <ais523> on ick I /think/ I handle that by not using clock_gettime if it isn't in librt
21:25:21 <AnMaster> ais523, well cfunge tries to handle it everywhere
21:25:59 <AnMaster> ais523, my cmake checks for this correctly
21:26:06 <AnMaster> cmake file*
21:26:13 <ais523> the problem is ick needs to use the commandline at runtime
21:26:18 <ais523> it wouldn't be so bad the other way round
21:26:27 <AnMaster> ais523, well you have to solve it
21:26:36 <AnMaster> and cfunge may need librt on certain platforms
21:26:39 <ais523> for cfunge?
21:26:55 <AnMaster> ais523, well cfunge falls back on other functions if you lack those
21:27:03 <ais523> I suppose I could check twice for clock_gettime
21:27:05 <AnMaster> ais523, also librt.so brings in libpthread.so here
21:27:09 <ais523> once without librt, once with
21:27:14 <AnMaster> no idea why
21:27:20 <ais523> and that doesn't matter, the existence of a shared object is irrelevant if it's never used
21:27:27 <AnMaster> well I don't know
21:27:31 <AnMaster> librt may use it
21:27:54 <AnMaster> anyway if -DHAVE_clock_gettime isn't there then cfunge will use gettimeofday()
21:28:08 <AnMaster> ais523, you want to check for those *l math functions too btw
21:28:21 <AnMaster> reason: cfunge falls back on double versions otherwise
21:28:30 <AnMaster> which is bad in FIXP and a few other places
21:28:56 <AnMaster> ais523, I have been working a lot recently on making the build system detect stuff better
21:29:20 <fizzie> I'll test it tomorrow maybe.
21:29:27 <ais523> AnMaster: so have I...
21:29:46 <AnMaster> fizzie, you will want a clean build, reusing old configure cache could break stuff
21:29:52 <AnMaster> since I reorganized a lot
21:30:18 <AnMaster> ais523, :)
21:30:30 <AnMaster> ais523, well iirc autoconf got some "search library" thingy
21:30:43 <AnMaster> that looks for one functions in no extra libraries and then each of the listed ones
21:30:45 <ais523> AnMaster: yes, I'll have to check how well it goes
21:32:01 <AnMaster> ais523, also I'm planning to introduce an ability to disable certain fingerprints at compile time, this would work as adding some sort of %depends HAVE_FOO then the fingerprint stuff would need that define to be compiled
21:32:06 <AnMaster> I'm not sure how yet
21:32:13 <AnMaster> since I use wildcards in cmake
21:32:36 <AnMaster> maybe the whole file in an ifdef and compile it, so if not defined it will be an empty file?
21:32:37 <ais523> ugh, wildcards...
21:32:49 <AnMaster> ais523, you think I want to list every file?
21:32:52 <ais523> I do
21:32:55 <AnMaster> every time I add one?
21:33:04 <AnMaster> lib/libghthash/*.c
21:33:04 <AnMaster> lib/genx/*.c
21:33:04 <AnMaster> lib/stringbuffer/*.c
21:33:04 <AnMaster> src/*.c
21:33:05 <AnMaster> src/funge-space/*.c
21:33:07 <AnMaster> src/instructions/*.c
21:33:09 <AnMaster> src/fingerprints/*.c
21:33:09 <ais523> although with automake I only list them 3 times rather than about 20
21:33:11 <AnMaster> src/fingerprints/*/*.c
21:33:13 <AnMaster> )
21:34:02 <AnMaster> ais523, no way I'm going to want to add yet another one every time I add a fingerprint
21:34:12 <ais523> it's automatable, and pretty easy
21:34:18 <ais523> after all, how hard is adding one line to a text file?
21:34:37 <ais523> (autodepends are nice, though, I used to maintain dependencies manually too)
21:34:38 <AnMaster> ais523, more than I want. But I guess I could write a script to auto generate the list
21:34:52 <AnMaster> ais523, oh that I don't need to bother about at all. Cmake handles it
21:35:00 <AnMaster> and so does automake
21:35:00 <ais523> same with automake
21:35:13 -!- sebbu2 has joined.
21:35:33 <AnMaster> ais523, anyway I may use other stuff from librt at some point
21:35:41 <AnMaster> and I don't know what ones use threads on linux
21:35:52 <AnMaster> if you happen to know so I can avoid them?
21:36:10 <ais523> I don't mind if things use threads as long as they don't leave me with two copies of my program
21:36:28 <ais523> and really, that seems unlikely if they're written properly, it would be a bug to not return exactly once from most of the stuff in there
21:36:32 <AnMaster> ais523, if I build out of tree for ick, how would I build cfunge for it?
21:36:48 <ais523> I'll make it work out of tree too, I think
21:36:54 <ais523> especially as you're meant to work out of tree
21:36:57 <AnMaster> ais523, iirc AIO is implemented using threads on linux
21:37:07 <AnMaster> on freebsd it is actually in kernel
21:37:13 <ais523> presumably the script in question would run in the build tree rather than the source tree
21:37:26 <ais523> AnMaster: that doesn't matter, as they aren't returning, the existence of the threads is not a problem
21:37:38 <AnMaster> well true
21:37:43 <AnMaster> hm
21:38:34 -!- oerjan has joined.
21:38:40 <AnMaster> ais523, also the -F bug still isn't fixed?
21:38:47 <AnMaster> and darcs says no new revisions to pull
21:39:19 <AnMaster> oh and:
21:39:21 <AnMaster> -- Looking for clock_gettime
21:39:21 <AnMaster> -- Looking for clock_gettime - not found
21:39:21 <AnMaster> -- Looking for clock_gettime in rt
21:39:21 <AnMaster> -- Looking for clock_gettime in rt - found
21:39:23 <AnMaster> :)
21:39:52 <AnMaster> ais523, so I look in libc first
21:40:03 <ais523> yes, libc first is right
21:40:13 <AnMaster> oh another nice thing, on x86 and x86_64 linux the real clock_gettime() is actually in a vdso
21:40:15 <ais523> and -F is really rickety, I should tear that bit out and redo it sometime
21:40:18 <AnMaster> same for gettimeofday()
21:40:37 <AnMaster> those are kernel memory mapped as a DSO into the process address space
21:40:55 <AnMaster> ais523, " -F :unsupported on computers without sh or bash"
21:40:59 <AnMaster> I meant that specific issue
21:41:18 <ais523> AnMaster: ah, the regression in Autoconf?
21:41:22 <AnMaster> ais523, yes
21:41:23 <ais523> maybe I should send that one upstream
21:41:31 <AnMaster> ais523, maybe you should push yes
21:41:34 <ais523> or just get the source from the old Autoconf and use that
21:41:38 <AnMaster> and you *ARE* upstream
21:41:46 <AnMaster> ais523, oh it was autoconf bug?
21:41:48 <ais523> AnMaster: I mean, tell the Autoconf people they're causing a bug in my program
21:42:00 <ais523> it's an autoconf regression, they deprecated something that they probably shouldn't have
21:42:06 <AnMaster> ais523, and yes you should file a bug
21:42:07 <ais523> and it's returning the wrong result by default
21:42:07 <AnMaster> to them
21:42:09 <AnMaster> IMO
21:42:18 <AnMaster> ais523, what thing did they deprecate?
21:42:25 <ais523> the thing that detects if #! works
21:42:34 <ais523> on the basis that it always does nowadays
21:42:38 <AnMaster> well
21:42:42 <AnMaster> that sounds sane to me
21:42:50 <AnMaster> unlike intercal
21:42:53 <AnMaster> ;P
21:43:01 <ais523> except, they defaulted the test to "doesn't" rather than "does"
21:43:05 <ais523> when turning the test off
21:43:11 <ais523> if I've figured out what's going on correctly
21:43:47 <AnMaster> ah
21:43:54 <AnMaster> well that is a bug IMO
21:44:08 <AnMaster> ais523, also is there any platform where #! doesn't work?
21:44:09 <ais523> I should make sure it's their bug first before reporting it, though
21:44:15 <AnMaster> that you use
21:44:27 <ais523> AnMaster: DOS without bash/sh, but then autoconf would never run in the first place
21:44:38 <AnMaster> well there you are then
21:44:55 <ais523> but that's why it's tested, I have a precalculated autoconf results header for DOS
21:44:59 <AnMaster> ais523, also. no one but you use DOS these days. Sorry to say it
21:45:17 <ais523> AnMaster: I don't know, FreeDOS is relatively popular for some things
21:45:25 <AnMaster> ais523, ok, bios flashing
21:45:37 <AnMaster> harddisk firmware upgrade
21:45:38 <AnMaster> right
21:45:40 <AnMaster> such things
21:45:46 <ais523> so, why wouldn't someone write a BIOS flasher in INTERCAL?
21:45:52 <ab5tract> lol
21:46:00 <AnMaster> I'm not even going to answer that one
21:46:08 <ais523> I don't see why I should artifically limit what INTERCAL can be used for...
21:46:15 <AnMaster> heck I wouldn't dare flash my BIOS
21:46:20 <AnMaster> using intercal
21:46:32 <ais523> I wouldn't dare flash it with anything else, come to that
21:46:37 <ab5tract> it would be a malicious flasher, most certainly
21:46:46 <AnMaster> well I have flashed a BIOS
21:47:06 <AnMaster> using a floppy image the computer manufacture provided
21:47:14 <AnMaster> and only because the system had issues
21:47:18 <AnMaster> the upgrade worked
21:47:27 <ais523> well, they still should have written the flasher in INTERCAL
21:47:33 <ais523> maybe they did, did you look at the source?
21:47:37 <AnMaster> ais523, sure go tell Dell that
21:47:45 <AnMaster> it was a Dell computer
21:47:50 <ais523> so's this one, as it happens
21:47:57 <AnMaster> old one
21:48:12 <AnMaster> got a "designed for windows 98" sticker
21:48:18 <AnMaster> have*
21:48:24 <fizzie> I've flashed a couple of BIOSes because of "gets completely confused when seeing a hard drive this big" issues. I don't think any of the flashers have been written in INTERCAL, but who knows.
21:48:25 -!- kar8nga has left (?).
21:48:53 <AnMaster> fizzie, I flashed the dell one because it kept loosing time
21:49:01 <AnMaster> when running
21:49:05 <AnMaster> so not bad battery
21:49:09 <AnMaster> and a known issue
21:49:19 -!- sebbu has quit (Success).
21:49:21 <AnMaster> hwclock randomly resetting when running non-windows 98
21:49:54 <AnMaster> hm
21:49:56 <AnMaster> this is useful
21:49:59 <AnMaster> man 7 mq_overview
21:50:06 <AnMaster> looks very useful
21:51:03 <fizzie> It looks pretty much like the sysV thing.
21:51:09 <AnMaster> yeah
21:51:19 <fizzie> Which is also in POSIX.
21:51:42 <fizzie> I'm sure there are all kinds of fancities, though.
21:53:09 <AnMaster> fizzie, what are the name of those functions though=
21:53:10 <AnMaster> ?
21:54:20 <fizzie> msgsnd/msgrcv is the basic pair.
22:01:20 <AnMaster> NOTES
22:01:21 <AnMaster> System V message queues (msgget(2), msgsnd(2), msgrcv(2), etc.) are an older API for exchanging messages between processes. POSIX message queues provide a
22:01:21 <AnMaster> better designed interface than System V message queues; on the other hand POSIX message queues are less widely available (especially on older systems) than
22:01:21 <AnMaster> System V message queues.
22:01:23 <AnMaster> ah yes
22:08:14 <ehird> Who here is cryptographically-knowledgable?
22:08:34 <AnMaster> well I know a bit
22:08:43 <AnMaster> no expert though
22:08:50 -!- oerjan has quit ("Reboot").
22:09:07 <ehird> fizzie: You must be, surely.
22:09:11 <ehird> I know this with my eyes.
22:09:20 <fizzie> Well, sort-of. Maybe.
22:09:34 <AnMaster> well since ehird is ignoring me it is no point anyway
22:09:35 <AnMaster> night
22:09:44 <ehird> fizzie: Excellent.
22:10:05 <ehird> :P
22:10:20 <fizzie> I also will not be here for very many minutes; just a moment more.
22:10:42 <ehird> Now, say I want a user to be able to login with a password to a server, _but_ the server can never see the plaintext password. This points me to doing the hashing client-side, but then any attacker with the database can just put the hash in from the database and log in, thus defeating the whole point of hashing.
22:11:02 <ehird> My query is just whether I can prove to the server that the user knows the password without the server seeing the password and without that flaw.
22:11:54 -!- oerjan has joined.
22:13:02 <ehird> oerjan: Do you know cryptography.
22:13:27 <fizzie> It's... nontrivial to prove knowledge of something if the server doesn't know it either. But you can of course use a hash of the original password, and then do some garden-variety challenge-response-style authentication if the server has the hash also.
22:14:03 <ehird> fizzie: The server has the hash and the client has the plaintext.
22:14:17 <ehird> But hashing on the client side allows you just to rip the password hash from the database and get it to send it off.
22:14:18 <oerjan> not much, just the basic RSA algorithm we learned in number theory class
22:14:20 <oklopol> the server can maybe do different kind of hashings of the hash
22:15:02 <oklopol> if uses a hash function on the hash with seed S, giving S to the user, then asks the user what the second-order hash is with that seed
22:15:04 <oklopol> dunno.
22:15:05 <oerjan> well i may have read about other things, but probably vague
22:15:17 <ehird> oklopol: just hash the stolen hash :p
22:15:25 <AnMaster> um
22:15:28 <AnMaster> HMAC?
22:15:34 <ehird> see, it's easy if the server does all the hashing, but that involves revealing the pass to the server
22:15:39 <AnMaster> HMAC solves it
22:15:40 <oklopol> ehird: what?
22:16:02 <oklopol> what stolen hash, what would be stolen exactly?
22:16:09 <fizzie> HMAC just does message-authentication with shared-secret.
22:16:20 <ehird> oklopol: Let's say i'm an evil hax0r and I got a hold of the user database.
22:16:30 <ehird> In a regular system this is useless, all I can give to the server is a plaintext which it hashes to check.
22:16:40 <ehird> If the CLIENT does the hashing before sending it off, I can just make it send off the stolen hash.
22:16:43 <AnMaster> fizzie, ah he wants a hash on the server
22:16:45 <AnMaster> hm
22:16:47 <fizzie> Hmn. So you'd need the client to be able to prove that he knows something that can be hashed to some specific string, without revealing it to the server.
22:16:49 <ehird> which is...bad.
22:16:53 <ehird> fizzie: Yeah.
22:17:04 <ehird> You can do this with GPG.
22:17:05 <AnMaster> ehird, just use an ssl connection
22:17:07 <ehird> Put the public key on the server,
22:17:08 <oklopol> ehird: in my solution the hash never moves anywhere.
22:17:10 <ehird> and get the client to sign a nonce
22:17:24 <ehird> But I don't know how I'd implement that if the key is just the password :-P
22:17:26 <oklopol> proposed solution, i haven't exactly given this sort of issues much thought.
22:18:32 <ehird> Perhaps I should ask the GPG peeps how it works.
22:18:32 <oklopol> right, okay, yeah you mean the thief can already have the hash of the original password
22:18:41 <ehird> right
22:18:42 <AnMaster> fizzie, hm HMAC with a hash on the server?
22:18:47 <oklopol> that's not part of the problem description.
22:18:49 <AnMaster> fizzie, impossible?
22:19:11 <ehird> it is now :)
22:19:19 <oklopol> damn you!
22:19:30 <fizzie> ehird: You can negotiate a plain old secure channel, and use that to transfer some secret key that the server then hashes and compares to the stored thing.
22:19:31 -!- ab5tract has quit.
22:19:46 <ehird> fizzie: The point is, I don't want people to have to trust me.
22:19:51 <ehird> The server should never see the plaintext password.
22:20:07 <ehird> Hmm.
22:20:13 <ehird> What I need is a pair of functions:
22:20:14 <AnMaster> ehird, how would you tell the server the original hash then?
22:20:14 <fizzie> I'm not seeing what's the point in that, since they're going to have to trust you anyway to do anything with the password.
22:20:22 <ehird> fizzie: Nope.
22:20:26 <ehird> The point is, it all happens client-side.
22:20:31 <ehird> The password is never revealed to the server.
22:20:33 <oklopol> assuming all you can do is hash a string and send a string, i'm pretty sure it's impossible.
22:20:38 <ehird> actually
22:20:42 <ehird> i need these functions to do it
22:20:58 <ehird> encrypt(a, key)
22:20:58 <ehird> decrypt(a, key)
22:21:00 <ehird> with the constraint that the result of encrypt(a,key) cannot reveal key
22:21:05 <ehird> HMm.
22:21:07 <oerjan> ehird: it seems to me that getting a message secretly to the server, and what that message is to be are orthogonal issues
22:21:17 <ehird> oerjan: Yes, I guess so.
22:21:18 <fizzie> No, really; you need at some point to tell the server something that can be later used to log in as you.
22:21:26 <ehird> fizzie: Yes.
22:21:30 <ehird> I know that.
22:21:35 <ehird> My idea was -
22:21:38 <ehird> the server sends down a long nonce
22:21:47 <ehird> and the client does encrypt(nonce, password)
22:21:47 <ehird> hmm
22:21:54 <ehird> then the server uses a third function verify(encrypted, key)
22:21:58 <fizzie> So that amounts to telling the server a "password" -- which it sees -- and which can be used by someone else to log in, if they manage to catch it.
22:22:02 <ehird> with the public part of that password
22:22:03 <ehird> and.. um
22:22:07 <ehird> i'm reinventing gpg key
22:22:08 <ehird> *here
22:22:09 <ehird> :p
22:22:25 <ehird> fizzie: Well, yes.
22:22:28 <AnMaster> why not just use gpg?
22:22:40 <ehird> The only situation I'm defending from is "a h4x0r has got a hold of the users database"
22:22:49 <ehird> Hmm.
22:22:50 <ehird> Wait, no.
22:22:55 * ehird thinks
22:22:58 <fizzie> ehird: But you can do that already, by having the server hash the thing it receives from the client.
22:23:08 <ehird> fizzie: Yes, I said it wrong
22:23:09 <ehird> What I mean is
22:23:15 <ehird> say password P is vital to my liiiiiiiiiife
22:23:20 <ehird> if anyone sees it, they can kill me.
22:23:21 <ehird> somehow.
22:23:30 <fizzie> Then you will have the client hash it before using it for the password to the service.
22:23:34 <ehird> I want to be able to log in with P, while not having P seeable by the server
22:23:40 <ehird> hmm
22:23:42 <ehird> i know!
22:23:43 <ehird> double hash
22:23:51 <ehird> client sends hash(password)
22:23:57 <fizzie> So you use hash(P) as the password to that particular service. Problem solved.
22:23:59 <ehird> server has hash(hash(password)+salt) on the server
22:24:01 <ehird> then
22:24:07 <ehird> it checks that hashed thing is ...
22:24:09 <ehird> yeah, pretty much
22:24:12 <ehird> OK, that's easy
22:24:14 <ehird> however
22:24:27 <ehird> I do need something similar for another step of it:
22:24:38 <ehird> server sends opaque data which can only be decrypted with the user's password
22:24:45 <ehird> but without the server knowing the password
22:24:50 <ehird> and the client does the encryption
22:25:03 <ehird> So I just need some basic encrypt(stuff, pass) function, really.
22:25:13 <ehird> I should probably look up which of those are good.
22:26:47 <fizzie> AES is what everyone's using, since it's The Standard.
22:28:18 <ehird> fizzie: Mm. I wonder if there are AES libraries for javascript?
22:28:30 <ehird> And how terribly slow they are :-P
22:28:41 <fizzie> Sure, at least five of them in the AES wikipedia article already.
22:28:57 <oklopol> ehird: umm, and why couldn't the evil haxor use the hash of the password after the client sent it?
22:29:09 <ehird> oklopol: my mind was blurred
22:29:13 <ehird> h4x0r isn't the important thing
22:29:16 <ehird> the server not knowing the password was
22:29:28 <oklopol> if you just want the password to be safe, then my scheme was correct.
22:29:35 <ehird> right
22:29:36 <ehird> i agree
22:29:36 <oklopol> it's essentially the same as yours
22:29:39 <ehird> which is why i'm using it
22:29:39 <ehird> :p
22:29:40 <oklopol> though.
22:29:59 <oklopol> yes yes, but i don't consider myself capable of this kind of thinking.
22:30:06 <oklopol> so i'm going to leave QUICKLY
22:30:09 <ehird> bye.
22:30:19 <oklopol> (BYE)
22:31:41 <ehird> Hmm.
22:31:46 <ehird> I wonder if AES does hashing too?
22:31:48 <ehird> Then I could drop blowfish.
22:31:58 <ehird> Nope.
22:33:32 <fizzie> There are constructions to turn a block cipher to a (cryptographic) hash function.
22:33:38 <ehird> Really?
22:33:53 <fizzie> Sure; usually they are a bit slower than actual designed hash functions, though.
22:34:10 <ehird> Slower is better when you don't want people to try and bruteforce, naturally.
22:34:30 <fizzie> If you want slow, you can just add more iterations of the hash function.
22:34:41 <ehird> Yeah, but it's also nice to have a unified encryption/hash function thingy.
22:34:46 <ehird> Any pointers to these constructions?
22:35:05 <fizzie> http://en.wikipedia.org/wiki/One-way_compression_function seems to have quite a list; up there in the third paragraph of the intro.
22:36:37 <fizzie> Despite the fancy names, the actual constructions are relatively simple.
22:37:40 <oklopol> very fancy :P
22:39:13 <ehird> Hmm.
22:39:34 <ehird> I'm not quite getting how to go from encrypt(text, key) to hash(text), but oh well.
22:40:06 -!- jix has quit ("...").
22:42:25 <fizzie> In the simplest case you just divide 'text' to cipher-key-sized blocks (with suitable padding in the end), then starting from some initial H you just repeatedly xor that value with the value encrypted by using the current message block as the key.
22:42:59 <fizzie> Of course if encrypt(text, key) does some more clever block cipher mode of operation, you'd want to use a lower-level function here.
22:44:46 <fizzie> (Not here any longer.)
22:55:14 <GregorR> I has lap kitty!
22:55:51 <ehird> perl -e '$|++; printf "\e[3;%d;%dt", map { 300*(1.5+sin(++$m * $_)+0.3*cos($m*$_*5)) } .005,.008 until select $x,$x,$x,0.02'
22:55:52 <ehird> Run that now.
22:55:56 <ehird> You shall be amazed.
22:57:54 <oklopol> no we won't
22:58:00 <oerjan> O_O
22:58:05 * oerjan is amazed
22:58:33 <oklopol> i'm guessing it's an ellipse
22:58:42 <oklopol> don't really know perl though
22:58:43 <oerjan> oklopol: try it
22:58:44 <oklopol> err
22:58:55 <oklopol> no that's not an ellipse
22:59:05 <oklopol> try it? how? think i have perl :|
22:59:11 <ehird> i didn't even know there were control characters to do that
22:59:14 <ehird> oklopol: it moves around your terminal window
22:59:17 <ehird> all wavy like
22:59:41 <oklopol> yeah okay i didn't see that coming
22:59:46 <oklopol> oh, \e.
22:59:54 <oklopol> is that like some sorta ESC
23:00:11 <oerjan> yes.
23:00:26 <oklopol> yeah okay i didn't exactly read the format string
23:00:33 <ehird> this is awesome
23:00:35 <oklopol> the wave seems needlessly complicated
23:00:42 <ehird> it seems needlessly AWESOME
23:00:46 <oklopol> why not just have a sin.
23:01:00 <ehird> i didnt write it
23:01:00 <ehird> :3
23:01:17 <oklopol> hmm
23:01:25 <oklopol> does it move both up-down and right-left?
23:01:49 <oklopol> i don't actually know what the exact semantics of "until select" are.
23:02:44 <ehird> oklopol: run it
23:02:44 <ehird> :P
23:02:53 <ehird> it just dances.
23:04:21 <oklopol> NEVER.
23:04:56 <ehird> xD
23:05:03 <fizzie> The "until select $x,$x,$x,0.02" just does "infinite loop with 0.02 second delay between iterations".
23:05:52 <fizzie> Since $x is not initialized to any specific value, the select's FD sets are empty, so it waits until that 0.02 second timeout.
23:06:45 <oklopol> oh, it's that select.
23:06:53 <oklopol> i thought it was some sorta "select case"
23:07:18 <oklopol> forgot perl lets you skip parens around params
23:07:25 * oklopol slaps self
23:07:41 <oklopol> what's the map mapped over?
23:08:16 <fizzie> The list (0.005, 0.008) most likely; not quite sure.
23:08:40 <oklopol> ah
23:08:45 <oklopol> that explains the sin+cos.
23:08:54 <oklopol> god i'm an idiot, that was so trivial
23:09:02 <oklopol> me sleeps.
23:09:03 <oklopol> ->
23:09:13 <fizzie> The result for 0.005 becomes the first %d, for 0.008 the second.
23:09:36 <oklopol> yeah, i know exactly how it works now
23:10:26 <fizzie> Can't say I recall offhand what \e[...t is, though.
23:10:40 <ehird> escape code
23:10:48 <ehird> vt-100 or w/e
23:10:48 <fizzie> Yes, but which one.
23:11:07 <fizzie> I remember \e[...m for the attribute-setting, and \e[...f for cursor movement.
23:11:15 <oklopol> i guess it's the one that moves the terminal?
23:11:25 <oklopol> t is for terminally ill
23:11:38 * oerjan imagines physical VT100s bouncing all over the place
23:12:30 <ehird> hahahah
23:12:34 <ehird> that would be great
23:12:58 <oerjan> well, actually VT320s since that is what the university had when i started there
23:13:20 <oerjan> (i think, not sure of the 2)
23:13:29 <fizzie> Oh, right, it's the dtterm-stolen window manipulation thing.
23:13:51 <fizzie> No wonder it didn't do anything in this tiling-style window manager.
23:14:32 <oerjan> it worked great in putty
23:15:00 <oerjan> (on windows)
23:15:40 <fizzie> Actually I'm a bit surprised those aren't disabled by default; the usefulness is a bit questionable.
23:15:41 <ehird> I am tired. If I have a number N, how do I make it the nearest (going upwards) multiple of M?
23:15:41 <ehird> >_<
23:15:42 <oerjan> (connecting to a linux machine)
23:15:43 <ehird> Really tired.
23:16:06 <fizzie> (N+M-1)/M*M with truncating division is the usual thing.
23:16:51 <fizzie> The +M-1 makes sure that current multiples of M aren't bumped upwards, but anything larger is.
23:17:15 <ehird> That works. Yay!
23:24:17 <ehird> Hm.
23:24:25 <ehird> Now hwy is there blowfish for JS but not bcrypt for js?
23:38:17 -!- oklopol has quit (Connection timed out).
←2008-11-10 2008-11-11 2008-11-12→ ↑2008 ↑all