←2011-10-25 2011-10-26 2011-10-27→ ↑2011 ↑all
00:00:11 <evincar> There's a flat space for function arguments, basically, not a nested one.
00:00:13 <elliott> oh good god not more of this terrible notation
00:00:14 <monqy> at least: maybe??
00:00:25 <monqy> elliott: hi
00:00:46 <oklopol> why not have [x] as a shorthand for [x ?]
00:01:22 -!- pikhq has joined.
00:01:44 -!- pikhq_ has quit (Ping timeout: 256 seconds).
00:02:00 <oklopol> evincar: how do you compose [g ?] with x?
00:02:02 <evincar> I dunno, that doesn't seem like the best idea. Ideally x and [x] would be the same in all cases, to avoid confusion.
00:02:35 <evincar> So x is a function?
00:02:43 <oklopol> sure
00:02:49 <oklopol> does that matter
00:03:19 <evincar> Yeah.
00:03:30 <evincar> If you're composing functions, you need to know the arity.
00:03:37 <oklopol> everything is unary
00:03:40 <evincar> So that you can use the right number of placeholders.
00:03:41 <evincar> Okay.
00:03:51 <oklopol> except addition. addition is binary.
00:04:09 <evincar> So [g [x ?]] is the composition of g and x.
00:04:32 <evincar> Whereas [g x] is the function g applied to the function x.
00:04:40 <evincar> (Glad I finally got that straight...)
00:04:53 <oklopol> okay let's see
00:05:14 <evincar> I'm just wondering whether something like this can be done simply in Haskell.
00:05:19 <evincar> It can be done, no doubt.
00:05:25 <evincar> It's the "simply" that could be problematic.
00:05:28 <monqy> can it even be done in Even?
00:05:32 <monqy> is Even....doable?
00:05:47 <evincar> I never wrote it, but it's a language that can be written. :P
00:05:52 <monqy> can it?
00:05:55 <oklopol> okay so it seems you haven't really integrated composition and application into one uniform syntax
00:05:57 <evincar> Absolutely.
00:06:03 <monqy> do you have proof of this
00:06:29 <evincar> Why wouldn't it be possible to write it?
00:06:33 <oklopol> you just have lambdas where you can only use each argument once and in order afaiu
00:06:43 <monqy> Even might be ill-defined or something
00:06:50 <monqy> or there could be bad problems in it that make it awful
00:06:57 <oklopol> so in particular, can you implement s?
00:07:49 <monqy> ah yes I remember one of the things, yes
00:07:54 <evincar> It should be just S x y z = [x z [y z]].
00:07:58 <monqy> basically what oklopol's saying
00:08:34 <oklopol> well i think [[[S x] y] z] = [[x z] [y z]] is closer to the real thing
00:08:58 <oklopol> since when combinatoring, you don't want to have to supply all three args
00:09:08 <evincar> That makes sense.
00:09:36 <oklopol> i was just wondering if you can just write S down using ?'s
00:10:16 <evincar> Oh. You wouldn't need to. It doesn't involve composition exactly.
00:10:36 <evincar> You could write [[x ?] [y ?] z z] if you were feeling fancy.
00:10:57 <evincar> I guess.
00:11:50 <oklopol> shouldn't it be [[[x ?] [y ?]] z z]? and i'm still not sure how you know when a lambda starts and when a composition starts
00:12:39 <elliott> oerjan: Help the GHC on here is 6.12.1 I can't cope.
00:12:49 <oklopol> this one time i made a language where you didn't use parens at all, the interpreter just used types to choose the correct parsing
00:13:19 <evincar> oklopol: [[x ?] [y ?]] is equal to [x [y ?]], so those outer brackets shouldn't be there.
00:13:30 <evincar> And maybe the syntax needs to be clearer.
00:13:42 <evincar> But I'm really just asking how to do something like this in Haskell.
00:14:05 <evincar> Without just implementing it the way I was going to for Even.
00:14:10 <oklopol> well that's a question for the people who care about haskell
00:14:24 <elliott> <oklopol> this one time i made a language where you didn't use parens at all, the interpreter just used types to choose the correct parsing
00:14:26 <elliott> types
00:14:38 <oklopol> sure
00:14:57 <evincar> So you just chose the parse that was type-correct?
00:15:05 <evincar> What if there were multiple type-correct parses?
00:15:26 <oklopol> i made a proof of concept partial interpreter and at least my quicksort and mergesort parsed correctly
00:15:36 <evincar> Was precedence encoded in the type system somehow?
00:15:37 <oklopol> then again both were like 8 characters
00:15:50 <evincar> Or was there no precedence?
00:16:01 <monqy> ooh what language is this it sounds good
00:16:38 <oklopol> if there were multiple type-correct parses, then the first one found was chosen. i might have added optional parens if i'd worked more on it.
00:16:59 <oklopol> cise. one of my languages that only exist in my dreams
00:17:13 <monqy> :(
00:17:29 <monqy> evincar: so what do you want in haskell
00:18:06 <oklopol> merge sort: '/,)#<
00:18:06 <oklopol> quicksort: /2;A b:C,',JnB
00:18:06 <oklopol> bubblesort a:B,',\#<A,JnA
00:18:11 <oklopol> iirc these parsed
00:19:02 <oklopol> i have absolutely no idea how any of those work
00:19:03 <oklopol> :D
00:19:12 <oklopol> ;I,;mc,[]{"[]"},=}!!b->"+"+mC1"-"-mC1">"+C1"<"-C1{;X}Wh=mC0=}X??b
00:19:16 <oklopol> brainfuck in cise
00:19:23 <elliott> cise is beautiful
00:19:32 <monqy> yes i want to know more
00:19:41 <elliott> he's explained like three things about it in the past i think :P
00:19:44 <oklopol> for brainfuck, i'm sure the parsing would never have been found :D
00:20:20 <oklopol> and there are probably errors, parsing was not the only weird thing about cise
00:21:55 <evincar> monqy: Say I want to pull out all the applications in (Vertex (x + d) (y + d) (z + d)). In Even I could write something like [apply3 [Vertex ? ? ?] [add ? d] x y z].
00:22:22 <elliott> basically evincar is unhappy because composition does not allow him to write any lambda-expression without points
00:22:28 <evincar> Yes.
00:22:32 <elliott> shockin
00:22:33 <elliott> g
00:22:42 <elliott> hint: you can do it, it's called stack-based languages
00:22:49 <oklopol> /2 = divide in two, A b:C = pattern match and only leave the upper cased letters in the register, ' = recurse, JnB = join with B as the separator
00:22:55 <evincar> I like concatenative semantics, thank you very much.
00:23:01 <oklopol> that one is easy enough
00:23:20 <elliott> evincar: that's what a stack gives you...
00:23:32 <oklopol> a base case is not needed
00:23:49 <oklopol> i dunno if that's the shortest quicksort though
00:23:55 <evincar> Pointfree just feels nicer, but in applicative languages it's less readable.
00:23:59 <oklopol> in the world
00:24:26 <oklopol> i didn't want to use a stack and stacks seem to be the way to be short
00:24:37 <evincar> Cise is indeed beautiful.
00:26:09 <oerjan> <elliott> oerjan: Help the GHC on here is 6.12.1 I can't cope. <-- it was nice to know you
00:27:33 <elliott> :'(
00:29:03 <oklopol> some cheating is certainly going on, for instance i think []{"[]"} is how you nest the program w.r.t. [ and ], but on the other hand {"[]"} is a lambda returning "[]" so i'm not completely sure what the semantics are.
00:31:14 -!- yorick has quit (Ping timeout: 276 seconds).
00:31:44 <oklopol> ;mc puts the memory tape and the pointer in the register (, just emptied it so ; is variable introduction and not pattern matching this time)
00:32:07 <oklopol> haha
00:32:15 <oklopol> so the beginning
00:33:06 -!- yorick has joined.
00:34:17 <oklopol> in ;I,;mc,[]{"[]"} first ;I puts the program in i and leaves it in the register, then , empties the register, so ;mc just introduces two variables whose type is unknown, then ,[]{"{}"} nests the contents of the register, but since it's empty (both m and c are lowercase so it's left empty), and we really need some content this time, it takes i as the contents, since i was the last thing left in the
00:34:41 <oklopol> ...register
00:35:06 <oklopol> the rest is a single statement so... yeah i have no idea
00:36:43 <oklopol> +mC1 should parse as take c'th element of m, then add one to the result. since nothing is done with the result, it's done in-place
00:38:59 <oklopol> we call the last statement recursively, and since m and c are not defined in the lambda that's called, we use the variables of the topmost level in all of them
00:40:21 <oklopol> anyway probably the sensible solution to the parsing problem would be the to do what clue does
00:42:28 <evincar> oklopol: And what is it that Clue does?
00:42:51 <monqy> evincar: in your example with Vertexy things, does that even work? I'm doubtful.
00:43:30 <monqy> trying to find your thing about how ? gets resolved
00:44:00 <evincar> [apply3 [Vertex ? ? ?] [add ? d] x y z] = [[Vertex ? ? ?] [add ? d] [add ? d] [add ? d] x y z] = [[Vertex [add ? d] [add ? d] [add ? d]] x y z]
00:44:02 <oklopol> evincar: that's one of the few languages of mine that exist outside my dreams so you can check out the abstruse explanation on the wiki, but anyhow just give an example io-pair for the function
00:44:13 <evincar> = [Vertex [add x d] [add y d] [add z d]]
00:44:29 <evincar> oklopol: "The precise details of the syntax are not known." :(
00:44:38 <oklopol> :D
00:44:41 -!- copumpkin has quit (Ping timeout: 244 seconds).
00:45:02 <evincar> monqy: Basically an application always puts it argument in the leftmost ?.
00:45:02 <oklopol> that's pretty irrelevant
00:45:06 -!- copumpkin has joined.
00:45:14 <oklopol> argh
00:45:28 <oklopol> anyone know the length of the shortest qs in gs?
00:46:48 <evincar> Except I broke that example...
00:47:01 <evincar> ...because the second thing would be wrong.
00:47:03 <evincar> Argh.
00:47:11 <evincar> So it's ambiguous...
00:47:20 <elliott> evincar discovers that variables exist for a reason
00:48:35 <evincar> ...there's not really a clear way to say that [a ? ?] [b ?] [c ?] d e should mean [a [b d] [c e]] and not [a [b [c d]] e]. (
00:48:38 <oklopol> even cise uses variables
00:48:39 <evincar> * :(
00:48:42 <oerjan> i'm pretty sure i argued that it would be hideously ambiguous when it was discussed previously
00:48:43 <oklopol> clue doesn't, though
00:48:53 <monqy> oerjan: didn't we all?
00:49:00 <oerjan> probably
00:49:02 <elliott> yes
00:49:10 <evincar> It's not hideously ambiguous...it just has one particularly hideous ambiguity.
00:49:20 <monqy> i.e. hideously ambiguous
00:49:32 <oerjan> although i vaguely recall i thought it could possibly work with type resolution of some sort
00:49:47 <monqy> the ambiguity is in something afaiu core to the language
00:49:47 <elliott> oerjan: except in the face of polymorphism
00:50:02 <oklopol> both clue and cise are ambiguous, but i think we all agree there's enough empirical evidence that we can safely say that's not relevant in practice.
00:50:02 <oerjan> mhm
00:50:18 <evincar> Hmm. If you can specify that some arguments are applied all at once, rather than sequentially, that solves it.
00:50:25 <oerjan> oklopol: you can probably add perl to that category iirc
00:50:34 <Sgeo|web> What language is this?
00:50:36 <evincar> I seem to recall that functions had to be able to take multiple operands for this to work.
00:50:43 <evincar> And now I remember why. :P
00:50:48 <elliott> oerjan: nah, just TC
00:50:56 -!- tiffany has quit (Quit: Leaving).
00:51:33 <oklopol> cise and clue are way ambiguouser than perl
00:51:57 -!- tiffany has joined.
00:52:03 <oerjan> elliott: i recall reading that perl has part of its parser implemented by majority voting among heuristics
00:52:13 <elliott> wow :D
00:52:15 <oerjan> *+vaguely
00:52:18 <oklopol> :D
00:52:19 <evincar> It's true.
00:52:56 <oklopol> clue doesn't really even *have* a parser though
00:53:10 <oklopol> well okay the things it parses it parses unambiguously
00:53:33 <oklopol> so i suppose technically i lose
00:53:44 <elliott> dude oklopol
00:53:45 <elliott> cise =/= clue
00:53:46 <evincar> Right, you just have ambiguous semantics.
00:54:03 <oklopol> i didn't confuse them
00:54:26 <elliott> clue has a pretty unambiguous syntax afaict
00:54:59 <oklopol> nah, only the script used for debugging is.
00:55:08 <oklopol> the actual program is the empty string
00:55:25 <oklopol> or the function bag
00:55:33 <elliott> lol
00:55:48 -!- ive has joined.
00:56:13 <oklopol> *has
00:58:09 <monqy> evincar: anyway, try actually implementing even and then implementing something nontrivial in it (and running it and making sure it works); maybe that will help get rid of problems???
00:58:50 <oklopol> there should be a language where you write the program interactively by example, like to define quicksort you say you're making a function from lists to lists, then you're given an example list and you apply quicksort on it, repeatedly. then, suddenly, the program says "hey i think i got it!" and starts doing it on its own and you tell it if it makes a mistake. of course, we need someone with
00:58:55 <oklopol> down's to say the line
00:59:13 <evincar> monqy: It probably would, so I probably will.
00:59:23 <oklopol> "hurr durr i think this goes in there"
00:59:41 <evincar> It's more interesting than any other language I've got in mind that I also have the time to work on.
00:59:43 <oklopol> and there's a no you retard button
01:00:24 <oerjan> oklopol: i suggest the name u2b
01:00:31 <oklopol> or, for those who do not hate computers, a "oh that's all right, i'll take it from here if that's okay".
01:00:33 <oklopol> button
01:00:52 <evincar> oklopol: You could remove the "interactively" bit with a genetic algorithm.
01:01:24 <evincar> "Your program succeeds for all of the 1000 inputs I tested, for a confidence level of x percent."
01:01:27 <oklopol> the interactively bit is important, but how
01:01:42 <oklopol> but umm erm umm how do you know what's correct
01:01:43 <evincar> Like, you write test cases and evolve an algorithm from those.
01:02:00 <evincar> You can't know if it's correct for all inputs.
01:02:26 <evincar> But you can have a known confidence level that it will work as expected.
01:02:29 <oklopol> that's been done to death, interaction is the new glue sniffing.
01:02:34 <evincar> And at the end of the day, isn't that how most software works?
01:02:51 <evincar> Except the probability of failure isn't even known for most software.
01:02:55 <oklopol> your computer should be someone you can have a beer with at the end of the day
01:02:57 <evincar> So a genetic algorithm works better. :P
01:03:08 <evincar> Agreed.
01:03:12 <elliott> oerjan: idgi
01:03:22 <monqy> u2b
01:03:24 <oklopol> i assumed he meant youtube but i still didn't get it
01:03:36 <evincar> "Kennedy's Lemma establishes that if we can parse Perl 5, we can solve the Halting Problem. Therefore we cannot parse Perl 5."
01:03:40 <evincar> From http://www.perlmonks.org/?node_id=663393
01:03:47 <oklopol> evincar: how do you evolve a genetic algoritm from test cases?
01:04:11 <oklopol> incidentally, epic yawn at what evincar linked
01:04:24 <oklopol> i almost lost my eyes in the process
01:04:45 <oklopol> oh seems it's rather nontrivial though
01:05:08 <oklopol> oh
01:05:10 <oklopol> no it's not
01:05:14 <evincar> Yeah, no it's not.
01:06:53 <oklopol> "This means that, in order to statically parse Perl, it must be possible to determine from a string of Perl 5 code whether it establishes a nullary prototype for the whatever subroutine." why isn't there Q.E.D. after this sentence?
01:07:13 <oklopol> maybe i don't know perl well enough. very possible since i don't know it at all.
01:07:34 <oerjan> elliott: say it aloud
01:07:41 <elliott> oerjan: you tubee?
01:07:46 <elliott> oklopol: that's statically knowable in e.g. C...
01:08:30 <oklopol> you two be?
01:08:58 <evincar> "You to be", your future self?
01:09:16 <oklopol> elliott: so there are static types in perl, you can't just ?: with something that has no args and something that has one on the right?
01:09:21 <monqy> you too, Be
01:09:45 <oklopol> u-tubie is a little tub shaped like a u
01:09:45 <elliott> oklopol: yeah i don't think you Get It
01:09:59 <oklopol> i thought it was a python :D
01:09:59 <elliott> even if you do
01:10:03 <elliott> if (false) { sub foo() { ... } }
01:10:08 <elliott> that establishes a nullary prototype for foo I think
01:16:55 <oklopol> okay so that's not quite as trivial, it's just static parsing that's impossible, not actually interpreting the program correctly
01:18:53 <evincar> Right.
01:19:00 <evincar> So you can't "parse" Perl.
01:19:06 <evincar> But you can evaluate it.
01:19:08 <evincar> And hope it works.
01:19:28 <elliott> less stupidly-stated: parsing perl is tc
01:20:00 <oklopol> well it could be that you cannot even prove which parsing is correct, and thus not ever execute anything! now that would be something
01:20:12 <oklopol> i wish there was a shorted way to say not ever
01:20:30 <oklopol> i wish there was a way to type shorted so that it's not a typo
01:20:54 <evincar> That's what heuristics are for.
01:21:11 <evincar> I guess Larry assumed that people are in the habit of rephrasing themselves when they're misunderstood.
01:21:18 <evincar> If we're looking at Perl from a linguistic standpoint.
01:21:28 <evincar> Which you should, because it's as hideous as any natural language I've known.
01:22:03 <oklopol> i don't rephrase, i redesign the language over my program
01:30:05 <evincar> The luxury of a language designer. Or a Lisp or Forth user.
01:31:12 -!- GreaseMonkey has joined.
01:31:12 -!- GreaseMonkey has quit (Changing host).
01:31:12 -!- GreaseMonkey has joined.
01:31:50 <oklopol> or a really stubborn crazy person
01:33:59 -!- Jafet has quit (Quit: Leaving.).
01:35:55 <evincar> Someone who submits a patch for every problem he encounters...or just forks the project and merges in all of the changes from the mainline.
01:36:07 <evincar> Just so he can have the language he wants.
01:39:35 <oklopol> i like how people subtly don't know shit in the comments
01:40:18 <oklopol> or make the occasional brainfart, what's the difference really
01:43:22 <Sgeo|web> "Kennedy's Lemma: If you can parse Perl, you can solve the Halting Problem. "
01:43:24 <Sgeo|web> o.O
01:43:49 <oklopol> why do i keep yawning when i hear that
01:45:04 <oerjan> oklopol: maybe you were pavlov's dog in a previous life
01:46:39 <elliott> oklopol: the first one was the best imo
01:46:43 <elliott> is this good or bad ivory tower ivory tower
01:49:14 <oklopol> why do i complain when i yawn and complain when i ain't sleepyhead
01:55:17 <oklopol> oerjan: do you know what a rational prime is?
01:55:45 <oklopol> i couldn't find a definition anywhere, but i did find out that it doesn't seem to mean regular prime
01:56:14 <oerjan> i cannot say i recall
01:56:33 <elliott> oklopol: it means "prime", all primes are rational, hth
01:57:36 <oklopol> from context i think it means a prime number that cannot even be split into the product of polynomials over formal variables. no idea if there are primes that can.
01:58:22 <oklopol> for regular primes i found a definition on wp but it looked scary
01:58:43 <oklopol> and apparently we don't know if there are infinitely many of those
01:59:19 <oklopol> (well of course it's clear that there are, even though i don't know the definition, but anyhow)
01:59:31 <evincar> I wonder if anyone'll ever say "Looks like we ran out of primes" and there'll be this big hype like over the tachyonic neutrinos thing.
02:00:08 <oklopol> well Z doesn't exist so we're fucked anyway
02:15:36 -!- DCliche has joined.
02:35:12 <Sgeo|web> Z?
02:35:26 <oerjan> the set of integers
02:36:02 <elliott> sgeo doesn't know /that/?
02:37:52 <oklopol> you can't know everything simultaneously
02:38:50 <evincar> What if I'm in a box with a cat?
02:38:52 <monqy> does ℤ look more familiar sgeo
02:38:58 <evincar> You don't know that I don't know everything simultaneously.
02:39:03 <evincar> Until you observe me.
02:39:06 <evincar> Dead in a box with a cat.
02:39:13 <oerjan> http://www.irregularwebcomic.net/1960.html
02:39:15 <monqy> dead box / rip
02:39:21 <oklopol> oh i'll observe the pants off ya
02:39:38 <evincar> Creepy~.
02:39:54 <evincar> Is that, like, psychokinesis?
02:39:56 <oklopol> that's one of my many qualities
02:40:00 <evincar> Because, if so, awesome.
02:40:25 <evincar> I'm going to assume that message was in reply to my question about psychokinesis.
02:40:40 <evincar> And therefore that your brain is worthy of dissection.
02:41:22 <oklopol> oh i'll dissect the pants of my brain
02:44:04 <tiffany> I just read 'dissect my penis' =_=
02:44:29 <oklopol> oh i'll dissect the penis out of that equal face
02:46:19 <oklopol> and you know what they say, left foot leads into the right beginning of the end
02:54:06 <elliott> indeed
03:07:57 -!- tiffany has quit (Remote host closed the connection).
03:08:00 <evincar> Okay, so the general insistence here is that I should write Even, for lack of anything better to write.
03:08:08 <evincar> What should I write it in? Haskell?
03:09:39 <oerjan> > var$fix("haskell "++)
03:09:40 <lambdabot> haskell haskell haskell haskell haskell haskell haskell haskell haskell has...
03:11:08 <evincar> > cycle ["haskell"]
03:11:09 <lambdabot> ["haskell","haskell","haskell","haskell","haskell","haskell","haskell","has...
03:11:13 <evincar> Ahem.
03:11:15 <elliott> > repeat "haskell"
03:11:17 <lambdabot> ["haskell","haskell","haskell","haskell","haskell","haskell","haskell","has...
03:11:19 <elliott> take your pick
03:11:36 <evincar> (cycle ["haskell"]) !! 42
03:11:44 <evincar> > (cycle ["haskell"]) !! 42
03:11:45 <lambdabot> "haskell"
03:11:51 <evincar> Welp, guess that settles it.
03:11:54 <oerjan> > var$cycle"haskell "
03:11:55 <lambdabot> haskell haskell haskell haskell haskell haskell haskell haskell haskell has...
03:12:21 <Madoka-Kaname> :t var
03:12:23 <lambdabot> forall a. String -> Sym a
03:12:32 <Madoka-Kaname> > var$"a = b"
03:12:33 <lambdabot> a = b
03:26:12 -!- pikhq_ has joined.
03:26:24 -!- pikhq has quit (Ping timeout: 260 seconds).
03:37:39 -!- CakeProphet has joined.
03:37:39 -!- CakeProphet has quit (Changing host).
03:37:39 -!- CakeProphet has joined.
03:38:50 <Sgeo|web> > map text $ repeat "Haskell"
03:38:51 <lambdabot> [Haskell,Haskell,Haskell,Haskell,Haskell,Haskell,Haskell,Haskell,Haskell,Ha...
03:51:09 <Madoka-Kaname> >map text $ permutations "abc"
03:51:13 <Madoka-Kaname> > map text $ permutations "abc"
03:51:14 <lambdabot> [abc,bac,cba,bca,cab,acb]
03:51:53 <Madoka-Kaname> > map text $ ((replicateM [1..]) <=< (cycle "abc"))
03:51:54 <lambdabot> Couldn't match expected type `GHC.Types.Int'
03:51:54 <lambdabot> against inferred type ...
03:51:59 <Madoka-Kaname> :t replicateM
03:52:00 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a]
03:52:31 <Madoka-Kaname> :t replicate
03:52:32 <lambdabot> forall a. Int -> a -> [a]
03:54:38 <oerjan> > (`replicateM` "abc") =<< [1..]
03:54:39 <lambdabot> ["a","b","c","aa","ab","ac","ba","bb","bc","ca","cb","cc","aaa","aab","aac"...
04:13:22 -!- MDude has changed nick to MSleep.
04:31:39 -!- pikhq has joined.
04:31:56 -!- pikhq_ has quit (Ping timeout: 260 seconds).
04:37:22 -!- oerjan has quit (Quit: Good night).
04:45:23 -!- Jafet has joined.
04:58:37 -!- clog has quit (Ping timeout: 240 seconds).
05:27:26 -!- derrik has joined.
05:28:51 -!- copumpkin has quit (Ping timeout: 244 seconds).
05:28:54 -!- Zuu has quit (Ping timeout: 260 seconds).
05:29:15 -!- copumpkin has joined.
05:47:02 -!- Patashu has quit (Ping timeout: 245 seconds).
05:48:35 -!- evincar has quit (Quit: ChatZilla 0.9.87 [Firefox 7.0.1/20110928134238]).
05:52:24 -!- DCliche has quit (Quit: You are now graced with my absence.).
06:11:45 -!- pikhq has quit (Ping timeout: 255 seconds).
06:11:48 -!- pikhq_ has joined.
06:19:49 -!- CakeProphet has quit (Ping timeout: 240 seconds).
06:34:37 -!- elliott has quit (Ping timeout: 258 seconds).
06:39:03 -!- CakeProphet has joined.
06:39:03 -!- CakeProphet has quit (Changing host).
06:39:03 -!- CakeProphet has joined.
06:48:58 <CakeProphet> sjsiejisjdfijwgioj
06:50:32 <fizzie> defgiiiijjjjjosssw. (Sorted that for you.)
06:51:02 <Madoka-Kaname> :t sort
06:51:03 <lambdabot> forall a. (Ord a) => [a] -> [a]
06:51:20 <Madoka-Kaname> > sort "sjsiejisjdfijwgioj"
06:51:21 <lambdabot> "defgiiiijjjjjosssw"
06:51:30 <fizzie> See, I did it right.
06:51:52 <fizzie> An abfoor is a sorted foobar.
06:52:08 <Madoka-Kaname> > sort "fizzie"
06:52:09 <lambdabot> "efiizz"
06:52:10 <Madoka-Kaname> Bad!
06:52:19 <Madoka-Kaname> Don't make me reverse sort you
06:52:35 <fizzie> > sort Madoka-Kaname
06:52:36 <lambdabot> Not in scope: data constructor `Madoka'Not in scope: data constructor `Kana...
06:52:41 <fizzie> > sort "Madoka-Kaname"
06:52:41 <lambdabot> "-KMaaaadekmno"
06:52:43 <fizzie> (I can't quite.)
06:52:57 <fizzie> Kmaaaaadekmno. It's like some sort of a bird sound.
06:53:10 <fizzie> s/quite/quote/
06:53:19 <fizzie> I can't quite quote.
06:53:36 <Madoka-Kaname> > sort "I can't quite quote."
06:53:37 <lambdabot> " '.Iaceeinoqqtttuu"
06:53:38 * Madoka-Kaname silly idea
06:53:49 <Madoka-Kaname> I should write a bot that enters a random channel and sorts every line that comes through.
06:54:02 <fizzie> ^scramble fizzie
06:54:02 <fungot> fziezi
06:54:22 <fizzie> I'm all jumbled up.
06:54:32 <Madoka-Kaname> > sort "fziezi"
06:54:34 <lambdabot> "efiizz"
06:54:35 <Madoka-Kaname> fify
06:55:31 <Madoka-Kaname> ^scramble それは日本語で書かれた文
06:55:31 <fizzie> ^unscramble fziezi
06:55:31 <fungot> fizzie
06:55:31 <fungot> 㝂㯗欪㧛㋂㟖恌へ恞蜥恌
06:55:37 -!- clog has joined.
06:55:39 <fizzie> It's... not very UTF8-aware.
06:55:46 <Madoka-Kaname> ^unscramble 㝂㯗欪㧛㋂㟖‡æŒã¸æžèœ¥æŒã
06:55:47 <fungot> Á£⒀Ś£ï€è¾æ¸⁀ºãŀ⦀ÚÀœ
06:55:51 <Madoka-Kaname> You fail
06:55:51 <Madoka-Kaname> :<
06:56:07 <fizzie> I don't think you passed in the same bytes it outputteded.
06:56:22 <Madoka-Kaname> ^scramble バカ!
06:56:22 <fungot> 㐂
06:56:32 <Madoka-Kaname> ^unscramble 㐂«ãƒ
06:56:32 <fungot> Ò£⫀š¯
06:56:35 <Madoka-Kaname> ^scramble あ
06:56:36 <fungot>
06:56:41 <Madoka-Kaname> ^unscramble め
06:56:41 <fungot>
06:56:47 <Madoka-Kaname> ^scramble ああああああああああああああああああああああ
06:56:47 <fungot> めめめめめめめめめめめああああああああああ
06:56:53 <Madoka-Kaname> ^unscramble めめめめめめめめめめめ‚ああああああああああã
06:56:54 <fungot> Á⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀÁ⣀ڀ
06:56:55 <Madoka-Kaname> Nope.
06:56:56 <Madoka-Kaname> I didn't.
06:57:16 <fizzie> I'm guessing your client will latin1-fallback the bot's output, and then when you paste it back you're UTF-8ing them.
06:57:29 <Madoka-Kaname> Makes sense
06:57:43 <fizzie> ^show
06:57:43 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp test celebrate wiki chr
06:57:48 <fizzie> ^srmlebac fizzie
06:57:48 <fungot> fziezi
06:57:55 <fizzie> ^uenlsbcmra fziezi
06:57:55 <fungot> fizzie
06:57:57 <Madoka-Kaname> ^scramble fizzie
06:57:57 <fungot> fziezi
06:58:08 <Madoka-Kaname> ^unscramble srmlebac
06:58:08 <fungot> scramble
06:58:10 <Madoka-Kaname> ^show scramble
06:58:11 <fungot> >>,[>,]<[<]>[.>>]<[>>]<2[.<2]
06:58:15 <Madoka-Kaname> ^show unscramble
06:58:16 <fungot> >,[>,]<[<]>[.[-]>[>]<[.[-]<[<]]>]
06:58:24 <Madoka-Kaname> ^show echo
06:58:24 <fungot> >,[.>,]<[<]+32[.>]
06:58:27 <fizzie> I didn't think it was exactly the same.
06:58:31 <fizzie> ^scramble 1234567
06:58:31 <fungot> 1357642
06:58:36 <fizzie> ^srmlebac 1234567
06:58:36 <fungot> 1357642
06:58:41 <Madoka-Kaname> ^show scramble
06:58:42 <fungot> >>,[>,]<[<]>[.>>]<[>>]<2[.<2]
06:58:43 <fizzie> But it does seem to be. Hmm.
06:58:45 <Madoka-Kaname> ^show srmlebac
06:58:45 <fungot> >>,[>,]<[<]>[.>>]<[>>]<2[.<2]
06:58:53 <fizzie> Well, those certainly look identical.
06:58:58 <Madoka-Kaname> 違うわけがない
06:58:59 <fizzie> They were added quite a while ago.
06:59:31 <Madoka-Kaname> ^show source
06:59:31 <fungot> (http://git.zem.fi/fungot/blob/HEAD:/fungot.b98)S
06:59:36 <Madoka-Kaname> ^help
06:59:37 <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
06:59:56 <derrik> awesome
07:00:38 <fizzie> Help is also just a (...)S thing.
07:00:47 <Madoka-Kaname> Let's write a programming language that compiles to befunge
07:00:51 <Madoka-Kaname> ^show def
07:00:59 <Madoka-Kaname> ^def def ul (Nope)S
07:01:00 <fungot> Defined.
07:01:02 <Madoka-Kaname> ^def def ul (Nope)S
07:01:03 <fungot> Defined.
07:01:05 <Madoka-Kaname> =p
07:01:12 <fizzie> Sadly it can't show internal commands, and they take precededence.
07:01:24 -!- derrik has quit (Quit: gone).
07:01:28 <fizzie> I've compiled something to (ugly) befunge, but I've completely forgotten what it was.
07:01:35 <fizzie> I think it was some other esolang.
07:01:44 <fizzie> Brainfuck is reasonably easy to.
07:02:40 <Madoka-Kaname> A simple C-like language?
07:03:18 <Madoka-Kaname> # Trampoline: Skip next cell < stream crossing?
07:03:20 <fizzie> It would be nice to have something that compiles into "compact" blocks of befunge, instead of some horribly structured layout.
07:03:52 <fizzie> Yes, you can do ... #ab#cd#ef#gh# ... to execute bdfh when going right, geca when going left.
07:04:23 <fizzie> The classic print loop of ... >:#,_ ... sorta-uses that.
07:05:02 <Madoka-Kaname> How do you do conditionals?
07:05:04 <Madoka-Kaname> Self-modifying code?
07:05:18 <Madoka-Kaname> fizzie, I think that'd be the same kind of problem as writing a (good) some-language -> redstone compiler
07:05:27 -!- Jafet has quit (Quit: Leaving.).
07:05:37 <Madoka-Kaname> Except with one less dimension to work with..
07:05:40 <fizzie> | and _ ; they branch up/down and left/right depending on whether the number popped from stack is non-zero or zero.
07:06:02 <fizzie> Well, and 'w' which turns left, goes straight, or turns right depending on <0, =0, >0, in Funge-98.
07:06:17 <Madoka-Kaname> fizzie, so.
07:06:37 <Madoka-Kaname> First, generate a tree or graph of some sort, diagramming what branches, etc, to output, and then you can just generate that, right?
07:06:57 <fizzie> Well, and m which branches high/low in trefunge.
07:07:42 <Madoka-Kaname> fizzie, I'm thinking you can compile the thing to something like this:
07:07:46 <Madoka-Kaname> [CodeSnippet]
07:08:09 <Madoka-Kaname> CodeSnippet [Instruction] BranchType [Int]
07:08:23 <Madoka-Kaname> Then generate that in some way.
07:08:31 <fizzie> A control flow graph is probably something you'd have, yes; but then it's non-trivial how to best pack all the blocks, esp. if you want to reuse instructions going different way.
07:08:38 <Madoka-Kaname> Right.
07:08:41 <Madoka-Kaname> Which is the big problem.
07:08:44 <fizzie> Not that human befunge programmers are that good in instruction reuse either, I suppose.
07:08:49 <fizzie> At least I'm not.
07:09:02 <fizzie> It makes for nicely tricky-to-modify code.
07:09:27 <Madoka-Kaname> Basically, snippets of instructions that don't branch, followed with a single branch instruction. That shouldn't be too hard to generate, right?
07:09:39 <Madoka-Kaname> Then you can merge branches that don't go all over the place into single clusters.
07:09:48 <Madoka-Kaname> Then place those however.
07:09:49 <fizzie> That's exactly what a control flow graph is.
07:09:53 <Madoka-Kaname> Ah.
07:09:57 <fizzie> "In a control flow graph each node in the graph represents a basic block, i.e. a straight-line piece of code without any jumps or jump targets; jump targets start a block, and jumps end a block."
07:10:04 <Madoka-Kaname> I see.
07:10:53 <fizzie> I have a program that generates a control flow graph for a befunge program with (imperfect) static analysis; doesn't really work for self-modifying code, though.
07:11:01 <fizzie> I have fungot graphed somewhere, let's see.
07:11:01 <fungot> fizzie: ' it's very hard,' she said to herself, " i think you might do something better with the time, the time goes with it.'
07:11:21 <fizzie> http://users.ics.tkk.fi/htkallas/fungotsmall.png
07:11:21 <fungot> fizzie: taking " boys" as universe; x="fat"; and fnord interpret the lower half of the cupboard, where all the cakes in the world: once in the week. and that's the way to outland?"
07:11:48 <Madoka-Kaname> fizzie, o.o
07:12:27 <fizzie> I also have a very dusty printout of that right here on my desk; was thinking of maybe taping it on the wall, but never did. It's not exactly readable at A4 size anyway, and I can't quite make myself pay the printing costs for a poster-sized version.
07:13:11 -!- Jafet has joined.
07:13:11 <fizzie> What's in the bubbles is just sequences of befunge instructions (with <>^v-style things stripped out) and the edge labels denote what sort of jump it is.
07:13:28 <Madoka-Kaname> fizzie, is there ever reason to use p or g?
07:13:41 <fizzie> (You can drop the word "small" for a readable 7485x15016-sized copy.)
07:14:20 <Madoka-Kaname> I suppose you could maintain a call stack with frames with that.
07:14:20 <fizzie> Er, well, for storage. There's only so much you can do with a stack. (Though I guess with the stack-stack you can probably do anything; still, it's awkward to use.)
07:14:52 <Madoka-Kaname> Top row = entry
07:15:04 <Madoka-Kaname> Second row = stack information (current y, etc)
07:15:20 <Madoka-Kaname> Rest = actual stack
07:15:40 <Madoka-Kaname> You should be able to cacluate the maximum stack frame size for every function, so, put the program after that many instructions.
07:16:07 <fizzie> It's not very befungey befunge you get if you do it like that.
07:16:20 <fizzie> Esp. arbitrary jumps are quite "bad".
07:16:41 <fizzie> Many people (okay, just me) even frown on using ;.
07:17:47 <Madoka-Kaname> What does ; do?
07:17:58 <fizzie> It jumps to the next ; it encounters.
07:18:27 <fizzie> So you don't have to worry about writing yourself into a corner so much, since you can just jump across code.
07:19:02 <fizzie> The UFO-looking device in that bot-graph (near the bottom) is the babbling punctuation jump-table.
07:19:45 <fizzie> To right of it seems to be part of the brainfuck bytecode compiler.
07:20:09 <fizzie> And the brainfuck interpreter itself is right below that.
07:20:37 <fizzie> The $2aaaaa*****81p88+:*91paaa**:a1p is a dead giveaway.
07:22:29 <fizzie> Oh, and there's the two random-number generation blocks (one fixed for the [0, 15] range and a loopy one for a reasonably large random numbers). I like the graph.
07:22:32 <Madoka-Kaname> Does fungot use p/g?
07:22:33 <fungot> Madoka-Kaname: an enormous dead fnord was lying on the bank.
07:22:38 <fizzie> Yes, much.
07:22:48 <Madoka-Kaname> fizzie, so.
07:22:58 <fizzie> It sort of has to, since most fingerprints write data in the fungespace.
07:23:08 <fizzie> Things like the IRC message splitting would be pretty hairy with just a stack.
07:23:29 <Madoka-Kaname> With Funge-98's A-Z thing, the stack mainpulation functions, etc, should be simple to implement, right?
07:24:11 <fizzie> Er, well. If you make a custom fingerprint for compilation, it doesn't really count as "compiling to befunge" any more, I don't think.
07:24:20 <Madoka-Kaname> Eh?
07:24:26 <Madoka-Kaname> You can't define fingerprints in the program?
07:24:30 <fizzie> No.
07:24:47 <Madoka-Kaname> Ah.
07:25:12 <fizzie> They're just "standard libraries" you can load. Though I think there are a couple of extensions that let you define some with Befunge code.
07:25:42 <fizzie> RC/Funge-98 and some others have that "mini-funge" thing.
07:26:24 <Madoka-Kaname> So, Funge doesn't have arbitrary jumps?
07:26:45 <fizzie> 'x' is pretty much an arbitrary jump, as long as you have a > or something at the destination to reset the delta.
07:26:55 <fizzie> And you need to give relative coordinates instead of absolute, but that's a minor matter.
07:27:38 <fizzie> The SUBR fingerprint gives you absolute jumps and an internal call-stack for 'return'.
07:28:08 <Madoka-Kaname> Meh
07:28:13 <fizzie> Fungot's (owner-only) "^code" command uses SUBR to execute what was passed to it, but I don't use SUBR elsewhere. It, too, feels slightly cheaty.
07:28:16 <Madoka-Kaname> 'x' makes compiling messy.
07:28:54 <Madoka-Kaname> I think I'll manually maintain a stack, and then put the entire program in a huge switch statement.
07:29:14 <Madoka-Kaname> Where each value is an entry point of some sort into the program.
07:29:20 <fizzie> I don't see how it's any messier than, you know, regular assembly jumps that also are relative.
07:30:17 <Madoka-Kaname> I guess
07:30:33 <fizzie> Deewiant has some sort of a constant-maker, incidentally.
07:30:48 <fizzie> You give it a number, and it tries to figure out a short way to represent that in Befunge code.
07:30:57 <fizzie> Whoops, lunchtime. ->
07:31:15 <Madoka-Kaname> fizzie, and that's one of the problems.
07:31:22 <Madoka-Kaname> Constants arn't, well, constant space.
07:34:52 -!- Ngevd has joined.
07:36:01 <Ngevd> Hello!
07:38:30 <Madoka-Kaname> Compiling like that'd be kinda messy
07:38:48 <Madoka-Kaname> And you can only resolve that in the routing step too.
07:39:14 <Madoka-Kaname> Most instructions that compile to multiple funge instructions can be unwound before routing. That can't.
07:39:33 <Madoka-Kaname> Not unless you reserve max(programSize) space for each constant at any rate
07:39:55 <Madoka-Kaname> maxConstantSize*
07:40:51 <CakeProphet> Madoka-Kaname: what's the topic?
07:41:19 <Madoka-Kaname> Compiling to Funge
07:41:32 <CakeProphet> maybe you could create chunks of linear instructions
07:41:43 <CakeProphet> and then determine the 2D layout in a separate compilation step?
07:41:45 <Madoka-Kaname> That's already the plan.
07:41:48 <Madoka-Kaname> =p
07:41:48 <CakeProphet> for example, to determine the -- okay
07:41:57 <Madoka-Kaname> I was thinking about how to do function calls.
07:42:11 <Madoka-Kaname> Using 'x' involves generating constants which are only known during routing.
07:42:30 <Madoka-Kaname> Making that a multi-byte instruction that has to be resolved during the route pass.
07:42:35 <CakeProphet> maybe you could create a tree/graph that relates to callers to callees?
07:42:59 <CakeProphet> so that you can determine the program layout based on the tree.
07:43:09 <Deewiant> You can fetch the current position at runtime and the target should be static, no?
07:45:35 <CakeProphet> a believe a function would just duplicate its parameter values on the stack, and be spatially nearby its caller so that it can be executed sequentially and then return back to the calling code segment.
07:45:56 <CakeProphet> ...that's an idea, anyway.
07:46:07 <CakeProphet> managing the stack may be difficult.
07:46:44 <CakeProphet> or instead of using the stake you can get use put/get
07:46:46 <CakeProphet> *stack
07:46:51 <CakeProphet> weorjwoeirjoewjsoifj
07:46:54 <CakeProphet> s/get//
07:47:24 <Madoka-Kaname> CakeProphet, yeah.
07:47:47 <Madoka-Kaname> The plan I have right now is to maintain a stack.
07:47:56 <CakeProphet> put/get may be easier to maintain.
07:48:14 <CakeProphet> but I have no clue how to place chunks of code close to each other spatially so that function calls work.
07:48:35 <CakeProphet> if a function calls more than four functions you'll have to do some nasty routing stuff instead of simply using the 4 directions.
07:50:13 <Madoka-Kaname> CakeProphet, giant switch statement
07:50:13 <CakeProphet> another important thing to note, if blocks of code are literally rectangles of code in befunge
07:50:23 <CakeProphet> function calls need to happen on the outside of those rectangles
07:50:28 <CakeProphet> or shapes
07:50:30 <CakeProphet> or whatever.
07:58:28 -!- Jafet has quit (Quit: Leaving.).
07:59:33 <CakeProphet> Madoka-Kaname: I think get/put would greatly simplify static memory demands.
07:59:45 <CakeProphet> maybe even dynamic? stack might be better for that.
08:00:07 -!- monqy has quit (Quit: hello).
08:00:30 <Madoka-Kaname> CakeProphet, reentrancy.
08:02:12 <CakeProphet> so one of my friends who somewhat recently broke up with his fiance, wrote on Facebook: "Is returning the ring........that's all I have to say about that."
08:02:22 <CakeProphet> to which another person replied: "One does not simply walk into Mordor."
08:03:04 <Madoka-Kaname> CakeProphet, actually.
08:03:18 <Madoka-Kaname> If I had a C-like language, i can optimize it by making it not use the stack fully, and only a return address.
08:03:38 <fizzie> Madoka-Kaname: They're constant-space if you just set an upper bound and leave empty space here and there.
08:03:38 <Madoka-Kaname> Which can be on the funge stack instead of a manual stack
08:04:01 <Madoka-Kaname> fizzie, right, but it's still an additional pass on the generated Funge code.
08:04:40 <CakeProphet> efficiency: top priority for Befunge code.
08:05:20 <CakeProphet> fungot: isn't that right?
08:05:21 <fungot> CakeProphet: " then it wasn't solid, like sylvie and you?" i asked eagerly, with a little basket, which he threw open, and sylvie more grave and quiet, but with a very different look from what uggug ever got from him.
08:06:23 <CakeProphet> fizzie: are there any digital form of Finnegans Wake?
08:06:27 <CakeProphet> +s
08:06:43 <CakeProphet> I think it would be a good fungot source.
08:06:44 <fungot> CakeProphet: 2. some y are m," and " hoarse," you will say " fnord" marked on them, and yet bear parting?
08:07:51 <CakeProphet> also the blah story.
08:08:05 <CakeProphet> replace every occurence of "blah" with "fnord"
08:11:50 -!- Phantom_Hoover has joined.
08:15:37 <fizzie> Madoka-Kaname: If you don't want to use absolute jumps, the massive switch is always an option; fungot has one example of a subroutine (the code compilation used both by ^bf/^ul and ^def) where it pushes 0/1/2 on stack below the arguments, and then the return path has :2-| ... :1-| style diverters to go back where it started from. Still, fixed-size constants aren't that bad.
08:15:37 <fungot> fizzie: then, silence. some fancied they heard in the air. " i could show it you in a minute or two, fnord.
08:15:49 <Madoka-Kaname> fizzie, yeah.
08:16:15 <Madoka-Kaname> And that can be built as a pass on an ADT of some sort instead of a pass on free-form code
08:32:59 <Ngevd> Today's Freefall is pretty funny
08:34:10 -!- Jafet has joined.
08:39:39 <Madoka-Kaname> fizzie, I was thinking about that.
08:41:59 -!- Ngevd has quit (Ping timeout: 252 seconds).
09:13:12 -!- sebbu has quit (Ping timeout: 240 seconds).
09:32:55 -!- Ngevd has joined.
09:39:13 -!- Jafet has quit (Quit: Leaving.).
10:00:35 -!- sebbu has joined.
10:00:35 -!- sebbu has quit (Changing host).
10:00:35 -!- sebbu has joined.
10:08:13 -!- pikhq_ has quit (Remote host closed the connection).
10:13:29 -!- pikhq has joined.
10:25:15 -!- copumpkin has quit (Ping timeout: 260 seconds).
10:26:22 -!- copumpkin has joined.
10:35:16 -!- GreaseMonkey has quit (Quit: The Other Game).
10:48:32 -!- ais523 has joined.
10:59:31 -!- ais523 has quit (Read error: Connection reset by peer).
11:00:44 -!- ais523 has joined.
11:17:36 -!- Ngevd has quit (Ping timeout: 244 seconds).
11:20:24 -!- ive has quit (Ping timeout: 258 seconds).
11:28:17 -!- Jafet has joined.
11:56:01 -!- ais523 has quit (Read error: Connection reset by peer).
12:49:42 -!- ais523 has joined.
12:54:43 -!- hagb4rd2 has joined.
12:56:55 -!- Ngevd has joined.
12:57:13 -!- hagb4rd has quit (Ping timeout: 240 seconds).
13:15:38 -!- sllide has joined.
14:06:29 <ais523> can anyone here explain GADTs to me? if so, are they willing to?
14:06:46 <Ngevd> GADTs?
14:10:29 * ais523 assumes that Ngevd can't
14:10:40 <ais523> something starting with G Abstract Data Types
14:10:43 <ais523> probably generic or generalized
14:24:09 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:50:11 -!- copumpkin has joined.
15:04:03 <coppro> generalized, I believe
15:07:27 <CakeProphet> ais523: basically GADTs allow you to specify a so-called phantom type parameter. Each constructor can return a value with a different phantom type as a parameter.
15:07:39 <CakeProphet> Thus, the type system can now differentiate between different constructors of the same type.
15:08:04 <CakeProphet> a simple example is lists. You can have List Empty a and List NonEmpty a
15:08:06 <ais523> CakeProphet: hmm, I'm not sure I understand; could you give an example?
15:08:28 <CakeProphet> now head and tail are typesafe. head :: List NonEmpty a -> a
15:08:38 <CakeProphet> tail :: List NonEmpty a -> List x a
15:08:44 <ais523> so how does it track whether lists are nonempty or not?
15:09:01 <CakeProphet> GADTs allow you to specify the return type of each constructor
15:10:51 <ais523> ht
15:10:54 <ais523> *ah right
15:11:04 <CakeProphet> data Empty; Data NonEmpty; Data List x a where { Cons :: a -> List y a -> List NonEmpty a; Null :: List Empty a }
15:11:18 <ais523> I was talking to someone about Anarchy and they thought it was like GADTs, but it isn't really
15:11:28 <ais523> meanwhile, I've been working on this (I submitted it): http://golf.shinh.org/p.rb?sort+by+first+occurrence
15:11:29 <CakeProphet> no clue on that one. :P
15:11:46 <ais523> I'm doing nowhere near the leaders
15:12:27 <ais523> and there are several obvious algorithms; I don't know which is best
15:13:40 <CakeProphet> I think the most common example for GADTs is writing AST data types for interpreters.
15:13:45 <CakeProphet> that's what I commonly see it associated with
15:13:51 <CakeProphet> but it can be used for other things.
15:13:55 <ais523> yep, that's what Anarchy's intended to do to
15:14:07 <ais523> but it works by inferring a huge number of different ADTs
15:14:18 <ais523> I suppose it isn't all that dissimilar after all, but the inference thing is different
15:14:52 <oklopol> ais523: do you know how short quicksort is in golfscript
15:15:22 <ais523> oklopol: no, but I suspect it's pretty short, as it has most of the components of quicksort as primitives
15:16:06 <oklopol> it's 14 characters in cise, was just wondering if gs gives a significant improvement to that
15:16:12 <oklopol> i don't actually know gs
15:17:53 <ais523> it actually has a sort primitive
15:17:59 <oklopol> who doesn't
15:18:05 <oklopol> is it always quicksort?
15:18:30 <ais523> but I'll try to write a quicksort without it
15:18:32 <oklopol> mergesort is 6 characters in cise, so i assume that's not much shorter in gs
15:19:02 <ais523> hmm, actually GolfScript has no concise method to do recursion
15:19:12 <ais523> which means that a quicksort, specifically, is kind-of awkward
15:19:15 <oklopol> ...
15:19:23 <oklopol> how about bubblesort?
15:19:30 <oklopol> also 14 in cise
15:20:21 <oklopol> it seems primality checking is also 6 characters, but it uses a non-ascii character
15:20:52 <oklopol> (i thought that particular character was ascii back then because umlaut is on all finnish keyboards, surprisingly enough)
15:23:46 <oklopol> cise has a recursion primitive which recursively calls the current statement or the whole program depending on which one makes more sense
15:24:47 <ais523> I think bubble sort is quite short in GolfScript, but am not good enough at it to write it concisely
15:25:14 -!- CakeProphet has quit (Quit: Lost terminal).
15:27:18 <oklopol> darn
15:27:42 <oklopol> http://rosettacode.org/wiki/Reports:Tasks_not_implemented_in_Golfscript :/
15:32:43 <ais523> boring, it only has two INTERCAL examples
15:32:45 <oklopol> xD J sucks ass: quicksort =: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)
15:33:04 <oklopol> seriously, who has the time to write 43 characters
15:33:38 <oklopol> i should really make this language
15:36:34 <Jafet> Try golfscript
15:36:41 <Jafet> Oh, beaten to it
15:37:01 <oklopol> yeah it seems no one has bothered to write it
15:37:24 <Jafet> Just make a codegolf thread for it and it will be written
15:37:29 <oklopol> and apparently even ais doesn't know how to golf in gs
15:37:38 <oklopol> ais523: wanna make a thread for it?
15:37:41 <ais523> I'm not very good at gs
15:37:54 <ais523> or basically, golfscript works like mathematica, by having a good standard library for typical golfing tasks
15:38:05 <ais523> so it's very good at sorting, but bad at implementing any given sort algorithm, for instance
15:39:24 <oklopol> :(
15:39:33 <oklopol> why would anyone want to write actual programs
15:39:41 <oklopol> when you can implement algorithms
15:40:21 <ais523> heh
15:41:28 -!- MSleep has changed nick to MDude.
15:47:42 <oklopol> factorial is 10 characters
15:48:21 <oklopol> that's just \* in cise. i think.
15:49:47 <ais523> a golfscript factorial shouldn't be that long, surely?
15:50:02 <oklopol> n to [1, ..., n] and to [0, ..., n] are list conversions, the first one is chosen since the second one gives a trivial result
15:50:12 <oklopol> are integer to list conversions
15:50:40 <oklopol> wait i guess the second one is to n-1 but anyhow
15:51:37 <ais523> here's a GolfScript factorial program, that factorials every line of input (treating it as a number): http://golf.shinh.org/reveal.rb?Factorial/narb_1298033052&gs
15:51:43 <ais523> or ~]{,1\{)*}/n}%
15:51:56 <ais523> the bit that actually does the factorialling is ,1\{)*}/ I think
15:52:24 <ais523> but it had to construct the 1..n list by hand
15:53:18 <oklopol> if you want to construct the list by hand in cise, you have to press the umlaut key. but that's not ascii, dunno what i should change it to.
15:54:18 <oklopol> that's crazy, it almost seems like you have to tell the program how you want it to manipulate the data and not just give it the relevant commands in a random sequence
15:54:31 <ais523> indeed
15:54:36 -!- augur has quit (Remote host closed the connection).
15:55:01 -!- augur has joined.
15:56:01 <oklopol> one interpretation of *\ is that you go from 7 to [1*2, 3*4, 5*6, 7]
15:56:02 <ais523> underlambda's going to have a command to construct a list 1..n, although it isn't documented anywhere so I've forgotten what the command actually is
15:56:27 <ais523> cise could be made more concise by making the order relevant, I guess
15:56:41 <oklopol> well it is relevant
15:57:56 <oklopol> i decided today that in addition to heuristics (consisting mostly of example runs), a hash value is computed for your program which can be used to choose between ambiguous cases
15:57:57 <ais523> let's see... an Underlambda factorial would be along the lines of U'*t
15:58:03 <ais523> not sure about the capitalization there
15:58:05 <Ngevd> Just got a new headset
15:58:17 <ais523> construct a list from 1..n, then fold it with multiplication
15:58:27 <oklopol> unnecessary whitespace changed parsing dramatically
15:58:40 <oklopol> *changes
15:59:32 <ais523> oklopol: haha, that's a truly brilliant way of disambiguating
15:59:53 <ais523> it hashes the program, then determines between the possible programs with that meaning in an order depending on the hash, so you can use whitespace or minor changes to change its preference order?
16:00:16 -!- augur has quit (Ping timeout: 252 seconds).
16:00:29 -!- Darth_Cliche has joined.
16:00:55 <oklopol> actually i was thinking a more direct approach where the basic heuristics are used for programs without whitespace (of course, ways of affecting parsing probably arise automatically), and the hash is computed from the placing of unnecessary whitespace
16:01:22 <oklopol> of course, whitespace is also a command, it's just one that doubles as nop when used in certain contexts
16:02:02 <ais523> yep, the way whitespace works in underlambda is that it's a NOP by default, but can be redefined in the preprocessor if you're really mad
16:02:17 <ais523> (underlambda isn't really designed as a golfing language, but can nonetheless be quite short)
16:02:29 <oklopol> you can do nesting by hand by using lambdas, but { and }, the lambda commands, also dual as other stuff, so you can't just put a lambda where you wanna nest.....
16:02:37 -!- monqy has joined.
16:02:37 <oklopol> hah
16:03:04 <oklopol> i didn't recall you have a preprocessor planned
16:03:22 <ais523> oklopol: it's not part of the language, technically
16:03:25 -!- ive has joined.
16:03:26 <oklopol> okay
16:03:38 <ais523> but the idea is that the preprocessor is enough to compile the full language into a small subset
16:04:44 <oklopol> also something i'm planning: you can give the parse tree you want, and the interpreter checks if the program would have parsed into that
16:04:53 <ais523> now I'm thinking about how to write a numeric sort in Underlambda
16:05:00 <oklopol> might make it easier to implement
16:05:38 <oklopol> cise is not a language you actually write a program in and use, it's a language where you write a very short algorithm implementation and prove it technically parses into the correct thing
16:06:47 <oklopol> numeric sort
16:06:49 <oklopol> ?
16:06:51 <oklopol> i'll ggl
16:06:54 <ais523> sorting an array of numbers
16:06:58 <ais523> not a sort algorithm in itself
16:06:58 <oklopol> o
16:07:00 <ais523> oko
16:07:05 <oklopol> okoko
16:07:07 <ais523> okokoko
16:07:09 <oklopol> okokokoko
16:07:13 <ais523> okokokokoko
16:07:16 <oklopol> okokokokokoko
16:07:20 <ais523> okokokokokokoko
16:07:23 <oklopol> okokokokokokokoko
16:07:27 <ais523> okokokokokokokokok
16:07:30 <ais523> bleh
16:07:36 <oklopol> indeed
16:08:03 <ais523> let's see... a version based on indexing lists would be really messy
16:08:20 <ais523> and a structurally recursive one would be a little long
16:08:25 <ais523> so that leaves selection sort, I guess
16:08:48 <ais523> I'm just trying to work out a good way to write the max function
16:09:21 <oklopol> btw query if you don't automatically see that
16:10:05 <ais523> yep, I saw it
16:14:54 <ais523> bleh, the problem's not just finding the largest element in a list, but getting rid of all the others
16:15:14 <ais523> *getting rid of it and leaving the others
16:15:46 <ais523> perhaps quicksort is actually simpler
16:22:03 -!- augur has joined.
16:36:40 -!- Ngevd has quit (Ping timeout: 258 seconds).
16:38:32 -!- ais523 has quit (Read error: Connection reset by peer).
16:40:12 -!- elliott has joined.
16:41:07 -!- ais523 has joined.
16:41:28 * elliott actually clicks the link in the topic
16:41:33 <elliott> ooh, underload
16:44:16 -!- Ngevd has joined.
16:45:30 <elliott> thankfully the first task is easy enough for even me
16:45:35 <Ngevd> Hello!
16:46:44 <elliott> atehwa: I'm not sure the third Underload question is as hard as it's meant to be...
16:46:54 <elliott> at least, it's easier than the second :)
16:46:56 <Ngevd> I did it in about thirty seconds
16:47:20 <elliott> I did it in about three :p
16:47:23 <ais523> elliott: you need to understand CS quite well to do that
16:47:29 <ais523> I knew the answer before the question was posted, does that count?
16:47:35 <Ngevd> I had never used Underload before
16:47:38 <elliott> ais523: what, to make a pair in underload?
16:47:40 <ais523> yep
16:47:48 <Ngevd> And was tired
16:47:53 <ais523> well, many students treat things like pairs as magic somehow
16:47:58 <ais523> rather than things you can implement by hand
16:48:35 -!- ais523 has quit (Read error: Connection reset by peer).
16:48:36 <olsner> if xchat made links out of links in topics, I'd click the link
16:48:43 <elliott> olsner: it does
16:48:44 <elliott> type /topic
16:48:51 * elliott would be surprised if anyone could answer the first two questions but not the third
16:48:56 -!- ais523 has joined.
16:49:00 <elliott> * elliott would be surprised if anyone could answer the first two questions but not the third
16:49:29 <olsner> elliott: are you sure that /topic command is safe? it won't immolate me or anything?
16:51:55 <elliott> olsner: dead sure
16:52:39 <olsner> ooh, it put some text on the screen with clickable links
16:53:07 <elliott> yay, finished all the Underload questions; now let's see if I can be bothered to do the ones about a language I'm not quite thoroughly familiar with
16:55:53 <quintopia> isnt the pair thing just as simple as having a string like ()(), then the programs duplicate, execute, then pop off the unwanted half?
16:56:12 <elliott> quintopia: spoilers ;)
16:56:14 <elliott> s/;/:/
16:56:24 <quintopia> i've never done underload and i have to agree with elliott
16:56:25 <ais523> quintopia: a bit simpler than that, actually; you don't need the duplicate
16:56:30 <ais523> and the answer's already been spoiled in-channel
16:56:40 <ais523> it isn't really an Underload question, anyway, but an understanding-CS-concepts question
16:56:43 <elliott> oh, it has? alright, then
16:56:56 * elliott was maybe a little overly in-depth with his answers
16:57:06 <elliott> maybe atehwa really expects us to embed arbitrary substrings in p!
16:57:07 <ais523> so people here, who are generally decent with CS concepts, are going to understand manufacturing a pair easily
16:57:08 <quintopia> ais523: i duplicated so i could still have the pair around later, since that's how i'd use it
16:57:19 <ais523> quintopia: well, head and tail don't preserve their argument
16:57:31 <ais523> so instead, it's typically the caller's duty to duplicate the pair before calling head or tail
16:57:31 <elliott> quintopia: it's bad form to preserve the argument in concatenative languages
16:57:49 <elliott> it adds noise to all definition sites and many call sites
16:58:01 <quintopia> ah good point. i was doing mentally the duplicating i would do if i used it.
17:01:03 <elliott> uh oh
17:01:17 <ais523> uh oh?
17:01:29 <elliott> ais523: I have to deal with past me's emacs configuration
17:01:38 <ais523> you can't just rename ~/.emacs?
17:01:59 <elliott> ais523: I'd have to put something in its place
17:02:08 <elliott> my current configuration is almost certainly lost forever
17:07:27 <ais523> elliott: where'd tallybot go?
17:07:44 <ais523> OK, OK, wrong channel, but you aren't in the right one
17:07:57 <elliott> ais523: it crashed as soon as i pinged it on the new metadynasty
17:08:02 <elliott> and I don't have my private key here
17:08:06 <elliott> so there's nothing I can do
17:08:07 <ais523> ah, OK
17:08:14 <ais523> probably an admin made a mistake editing templates
17:08:17 <ais523> where's "here", anyway?
17:08:32 <elliott> on this inferior-but-for-not-being-broken computer
17:08:46 <ais523> does it have numbers?
17:08:51 <elliott> yes, actually
17:08:52 <elliott> how am I meant to explain to prgmr that I lost my private key twice in quick succession?
17:09:07 <ais523> you should keep backups of it
17:09:19 <elliott> ais523: and have my backup media break too?
17:09:28 <ais523> I don't think it works like that…
17:09:37 <ais523> how broken is the computer with it on, anyway?
17:09:46 <ais523> is it working enough to boot it up and ssh in, for instance?
17:09:54 <elliott> ais523: it turned itself off and won't turn back on again
17:09:55 -!- myndzi\ has joined.
17:10:34 <ais523> elliott: hmm, what if you remove the battery and run it powered from its charger?
17:11:02 <elliott> you can't "remove the battery", that would cause ridiculous structural damage to the whole thing
17:11:14 <elliott> but I've tried charging it overnight and nothing
17:11:26 <ais523> ah, OK
17:11:35 <ais523> I'm not used to laptops with nonreplaceable batteries
17:12:30 -!- myndzi has quit (Ping timeout: 256 seconds).
17:13:32 * elliott upgrades debian
17:14:01 -!- Jafet has quit (Quit: Leaving.).
17:14:19 <quintopia> if you have to cause structural damage, do it pulling the hard disk :D
17:14:35 <elliott> quintopia: you mean the flash chips directly on the motherboard?
17:14:45 <elliott> not only would that work perfectly, it would leave my warranty fully intact
17:15:03 <quintopia> surely there was separate storage media with the numbers you require?
17:15:27 <elliott> which numbers
17:16:19 <quintopia> your private key for instance
17:16:34 <elliott> I just generated it in the last week, so no
17:19:19 -!- Zuu has joined.
17:44:44 <fizzie> The story of the cursed SSH key.
17:45:45 -!- Phantom__Hoover has joined.
17:46:50 -!- Ngevd has quit (Ping timeout: 260 seconds).
17:48:49 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
17:49:03 <Phantom__Hoover> RIP Phantom_Hoover.
17:49:52 <elliott> RIP.
17:50:00 -!- ive has quit (Quit: leaving).
17:54:19 -!- Phantom__Hoover has changed nick to Phantom_Hoover.
18:00:14 <elliott> Gregor: pikhq: Yo, Debianites, help me out.
18:06:15 <Phantom_Hoover> I'm a Debianite!
18:06:53 <elliott> Phantom_Hoover: Yeah, but you don't know things.
18:23:02 -!- Ngevd has joined.
18:25:19 <quintopia> he's a Debutante
18:25:32 -!- ais523 has quit (Remote host closed the connection).
18:30:18 <elliott> pserver is no longer officially supported; the cvs package
18:30:18 <elliott> does not install any service, inetd, or something similar.
18:30:18 <elliott> If you want to set up a CVS server, use SSH, as shown in:
18:30:19 <elliott> * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh.html
18:30:19 <elliott> * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh-advanced.html
18:30:19 <elliott> * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh-advanced2.html
18:30:20 <elliott> huh
18:30:49 <olsner> lol cvs
18:31:04 <elliott> olsner: apt-get is reading me changelogs :p
18:31:59 <elliott> on /boot: <bazik> it got 300meg in that virtual machine <ompaul> that's tine <ompaul> tiny
18:32:04 <elliott> here i was thinking that sounded big :p
18:33:05 <olsner> yeah, 300MB just to fit a bootloader, a kernel and a handful of modules is huge
18:34:56 <elliott> `quote GFDL
18:35:03 <HackEgo> 141) * Phantom_Hoover wonders where the size of the compiled Linux kernel comes from. <cpressey> To comply with the GFDL, there's a copy of Wikipedia in there.
18:35:31 <olsner> ah, that must be it
18:37:57 <elliott> olsner: oh lol ompaul thought they meant /
18:38:02 <elliott> despite the context being perfectly obviously about /boo
18:38:03 <elliott> t
18:43:36 <elliott> What, wine is no longer in wheezy.
18:43:57 <elliott> It's back into sid though.
18:44:03 <olsner> debian removed wine?
18:44:13 <elliott> # [2011-10-22] Accepted 1.0.1-3.4 in unstable (low) (Robert Millan)
18:44:13 <elliott> # [2011-08-13] Accepted 1.0.1-3.3 in unstable (low) (Robert Millan)
18:44:13 <elliott> # [2011-08-13] Accepted 1.0.1-3.2 in unstable (low) (Robert Millan)
18:44:13 <elliott> # [2011-07-08] wine REMOVED from testing (Britney)
18:44:13 <elliott> # [2010-11-27] wine 1.0.1-3.1 MIGRATED to testing (Britney)
18:44:22 <elliott> it had been terminally unmaintained, apparently
18:44:23 <elliott> for two years
18:45:10 <olsner> hmm, pretty sure ubuntu has newer wine packages than that, why is that work not reusable in debian?
18:46:33 <elliott> dunno
18:51:48 <Phantom_Hoover> http://www.reddit.com/r/Minecraft/comments/lpkye/seriously_the_void_fog_needs_to_go/
18:51:51 <Phantom_Hoover> Oops.
18:56:47 -!- Boxer_ has joined.
18:57:00 <Boxer_> Hy
18:57:10 <Ngevd> Hello!
18:57:24 <Ngevd> (are you new?)
18:57:41 <Boxer_> You a Fam Male
18:57:49 <Boxer_> Yes
18:57:58 <Ngevd> `welcome
18:57:59 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: welcome: not found
18:58:03 <Ngevd> `? welcome
18:58:06 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
18:58:12 <Ngevd> I'm not very good at that :(
18:58:28 <Ngevd> Also, I am a Fam Male? What?
18:58:49 <Boxer_> Deutsch
18:59:03 <Boxer_> Girl Boy ?
18:59:09 <Ngevd> Boy
18:59:19 <Boxer_> Oky
18:59:20 -!- ais523 has joined.
18:59:24 <Boxer_> Tanks
18:59:36 <Ngevd> Most of us here are, to be honest
18:59:57 <elliott> hello Boxer_ tanks
19:00:01 -!- pumpkin has joined.
19:01:38 <Phantom_Hoover> Ngevd, for the longest time, all of us were.
19:01:55 <Phantom_Hoover> This lead to Phantom_Hoover's Laws of Statistical Absurdity.
19:02:10 -!- copumpkin has quit (Ping timeout: 255 seconds).
19:03:32 -!- pumpkin has changed nick to copumpkin.
19:04:40 <fizzie> Are some people not, then?
19:05:55 <fizzie> This reminds me of this humor radio show, parodying the "forest radio" show: (freely paraphrasing from the Finnish) "Hey there all men of the forest; and why not women too -- after all, half the men are women!"
19:08:16 <elliott> fizzie: I'm pretty sure Madoka-Kaname and tiffany aren't.
19:09:51 -!- copumpkin has quit (Ping timeout: 244 seconds).
19:11:24 -!- Boxer_ has quit (Quit: Rooms • iPhone IRC Client • http://www.roomsapp.mobi).
19:13:06 -!- copumpkin has joined.
19:16:37 -!- sllide has quit (Read error: Connection reset by peer).
19:17:41 <Phantom_Hoover> elliott, I maintain that Madoka-Kaname is actually a 40-year-old man, and we don't talk about tiffany in this house young man.
19:20:59 -!- Boxer_ has joined.
19:21:07 <Phantom_Hoover> Boxer_!
19:21:20 <Boxer_> Ja
19:21:53 -!- Boxer_ has left.
19:22:36 <Ngevd> He's scared of Finns
19:22:50 <elliott> Boxer_ is the best.
19:23:32 -!- tiffany has joined.
19:24:00 <Phantom_Hoover> elliott, SEE WHAT YOU HAVE DONE
19:25:10 <ais523> who is Boxer_, anyway?
19:25:20 <ais523> and why did he part rather than quit? I get a feeling he/she doesn't like being here
19:25:22 <elliott> The best.
19:25:31 <Ngevd> New chap, apparently German
19:25:36 <Phantom_Hoover> In the clearing stands a Boxer_, and a fighter by his trade?
19:25:42 <Ngevd> Or at least German-speaking
19:25:48 <elliott> Ngevd: You realise he will have no clue at all what this channel is about.
19:26:39 <Phantom_Hoover> We must attempt to contact this primitive "ger man", and bring the light of civilisation to him and his people.
19:29:06 <quintopia> and who is tiffany? should i know tiffany?
19:29:17 <tiffany> I'm madoka-kaname's girlfriend
19:29:22 <Phantom_Hoover> Knowing tiffany will bring only pain and sorrow.
19:29:27 <tiffany> ._.
19:29:35 * quintopia runs
19:30:07 <Phantom_Hoover> (For background information, see:
19:30:11 <Phantom_Hoover> `quote Galatea
19:30:13 <Phantom_Hoover> )
19:30:14 <HackEgo> 649) <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo. <Phantom_Hoover> Also lesbian.
19:31:37 <Phantom_Hoover> (tiffany is an emoticon bot under the delusion that she is intelligent.)
19:32:03 <tiffany> I'm not an emote bot :c
19:32:18 <Phantom_Hoover> Poor thing is confused.
19:32:21 * tiffany kicks phantom_hoover in the shin
19:32:30 <Phantom_Hoover> Someone paradoxed her at some point, obviously.
19:32:54 <Phantom_Hoover> She doesn't even realise that a) I am a phantom, and hence cannot be kicked and b) I am I hoover, and hence do not have shins.
19:33:06 <Phantom_Hoover> *I am a hoover
19:33:07 <elliott> I am I hoover --Phantom Hoover
19:33:26 <Phantom_Hoover> Add a full stop in the middle and it becomes philosophy.
19:35:11 -!- pikhq_ has joined.
19:35:17 -!- pikhq has quit (Ping timeout: 256 seconds).
19:35:21 <Ngevd> `addquote <Phantom_Hoover> Add a full stop in the middle and it becomes philosophy.
19:35:23 <HackEgo> 696) <Phantom_Hoover> Add a full stop in the middle and it becomes philosophy.
19:41:41 -!- oerjan has joined.
19:49:18 <elliott> hi oerjan
19:49:26 <oerjan> hi elliott
19:49:32 <elliott> hi oerjan
19:49:35 <oerjan> hi elliott
19:49:38 <elliott> hi oerjan
19:49:39 <oerjan> hi elliott
19:49:41 <elliott> hi oerjan
19:49:41 <oerjan> hi elliott
19:49:43 <elliott> hi oerjan
19:49:43 <oerjan> hi elliott
19:49:44 <elliott> hi oerjan
19:49:44 <oerjan> hi elliott
19:49:45 <elliott> hi oerjan
19:49:46 <oerjan> hi elliott
19:49:47 <elliott> hi oerjan
19:49:48 <oerjan> hi elliott
19:49:49 <elliott> hi oerjan
19:49:50 <oerjan> hi elliott
19:49:51 <elliott> hi oerjan
19:49:53 <oerjan> hi elliott
19:49:53 <monqy> hi
19:49:54 <elliott> hi oerjan
19:50:10 <oerjan> curses, foiled by a monkey
19:50:16 <elliott> that was so good
19:51:03 <olsner> oh my, you're having FUN in here
19:52:05 <Phantom_Hoover> Dammit, WP lured me to click one of its donation appeals with the prospect of learning what the hell is up with that programmer's face.
19:52:40 <olsner> was it... brain damage after exposure to python?
19:53:08 <Phantom_Hoover> Lesions of Rossum.
19:53:47 <oerjan> today's xkcd was somewhat confusing until i got it
19:53:57 <oerjan> and then realized i'd had similar thoughts
19:54:40 <Phantom_Hoover> I guess they could have just caught a bomb in it?
19:54:48 <Phantom_Hoover> It was the Blitz, after all.
19:55:07 <oerjan> it's a well known fact that python turns you into a universal robot
19:55:08 <fizzie> Catching a bomb with a wardrobe: easiest thing ever.
19:55:31 <oerjan> (if you get that pun without googling i'll be somewhat impressed)
19:56:04 <Phantom_Hoover> Explain.
19:56:16 <Phantom_Hoover> fizzie, yes, it could have been critical to the war effort.
19:56:25 <Phantom_Hoover> They should have all been shot for treason.
19:56:26 <olsner> Phantom_Hoover: if you put the bomb in the wardrobe it'll actually explode in narnia
19:56:34 <ais523> elliott: we had an oko pyramid earlier today for the first time in years
19:56:40 <ais523> it was me who messed it up :(
19:56:50 <elliott> ais523: it's not a pyramid if oklopol isn't involved; was he
19:56:55 <ais523> he was
19:57:05 <elliott> anyway i kind of find ours unimpressive after observing the #vjn natives
19:57:05 <oerjan> Phantom_Hoover: hint: Karel Čapek
19:57:21 <Phantom_Hoover> Oh, of course.
19:58:30 <elliott> 06:58:41: <Madoka-Kaname> ^show scramble
19:58:31 <elliott> 06:58:42: <fungot> >>,[>,]<[<]>[.>>]<[>>]<2[.<2]
19:58:31 <elliott> 06:58:43: <fizzie> But it does seem to be. Hmm.
19:58:31 <elliott> 06:58:45: <Madoka-Kaname> ^show srmlebac
19:58:31 <elliott> 06:58:45: <fungot> >>,[>,]<[<]>[.>>]<[>>]<2[.<2]
19:58:31 <elliott> 06:58:53: <fizzie> Well, those certainly look identical.
19:58:31 <fungot> elliott: ' when i make a noise," said he, " yet truth is truth: you know you did." a little wink beneath the lid.
19:58:31 <fungot> elliott: " it's not in nursery fnord? and as for food, our fnord"
19:58:35 <elliott> fizzie: They're funney aliases.
19:58:54 <oerjan> ^style
19:58:54 <fungot> Available: agora alice* c64 ct darwin discworld europarl ff7 fisher fungot homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
19:58:58 <oerjan> thought so
19:58:58 <fizzie> elliott: Apparently so. I had forgotteded, and was under the impression they did something slightly different.
19:59:15 <oerjan> ^scramble scamble
19:59:15 <fungot> sabelmc
19:59:18 <oerjan> oops
19:59:20 <oerjan> ^scramble scramble
19:59:20 <fungot> srmlebac
19:59:35 -!- copumpkin has changed nick to controversipumpk.
19:59:44 -!- controversipumpk has changed nick to copumpkin.
20:01:38 <fizzie> Foiled by NICKLEN=16 again.
20:01:47 <elliott> 07:31:22: <Madoka-Kaname> Constants arn't, well, constant space.
20:01:52 <elliott> Madoka-Kaname: That's, um, true in general.
20:02:13 <oerjan> http://rur-ple.sourceforge.net/
20:02:23 <fizzie> The constancy of constants is a constant worry of mine.
20:02:32 <elliott> oerjan: wat
20:02:33 -!- DCliche has joined.
20:02:38 <elliott> Uh oh, DCliche found us.
20:02:43 <elliott> Everybody run.
20:02:48 -!- Vorpal has quit (Ping timeout: 248 seconds).
20:03:00 <fizzie> ^ the fastest runner.
20:03:08 <elliott> 15:07:27: <CakeProphet> ais523: basically GADTs allow you to specify a so-called phantom type parameter. Each constructor can return a value with a different phantom type as a parameter.
20:03:16 <elliott> ais523: btw, cakeprophet is totally wrong about this and you should disregard his explanation
20:03:25 <ais523> elliott: thanks
20:03:29 <ais523> do you have a better one?
20:03:36 <fizzie> Yes; in reality you specify a so-called Phantom_Hoover.
20:03:38 <oerjan> elliott: just finding someone else who did the same pun
20:03:44 <oerjan> well, essentially
20:04:01 <elliott> ais523: http://www.haskell.org/ghc/docs/latest/html/users_guide/data-type-extensions.html#gadt?
20:04:22 <elliott> ais523: it's basically a new syntax for regular ADTs where "data Foo a = A Int String | B [a] a" turns into
20:04:23 <elliott> data Foo where
20:04:26 <elliott> A :: Int -> String -> Foo a
20:04:31 <elliott> B :: [a] -> a -> Foo a
20:04:38 <elliott> ais523: and then uses that to let you be more specific about the return type
20:04:40 <Deewiant> http://hackage.haskell.org/trac/haskell-prime/wiki/GADTs also
20:04:40 <elliott> e.g.
20:04:45 <elliott> ais523: A :: Int -> Foo String
20:04:51 <elliott> which isn't possible with ordinary ADTs
20:05:00 <elliott> this allows you to, e.g. build up typed ASTs
20:05:07 <elliott> Tuple :: Term a -> Term b -> Term (a,b)
20:05:40 <elliott> Deewiant: That's not very helpful, but alright
20:05:46 -!- Vorpal has joined.
20:05:54 <Deewiant> I think it's reasonably helpful
20:06:04 <elliott> ais523: oh, and it subsumes existential quantification because you can do "Foo :: a -> Term b"
20:06:11 <elliott> Foo :: (Show a) => a -> Term String
20:06:12 <elliott> -- later
20:06:15 -!- Darth_Cliche has quit (Ping timeout: 260 seconds).
20:06:17 <elliott> eval (Foo x) = show x
20:06:33 <ais523> ah, OK
20:06:49 <ais523> that's not exactly what I want in Anarchy either, but sounds like a useful feature to combine with it
20:06:59 <oerjan> ais523: it also solves the problem with ordinary ADTs that class contexts in data definitions don't do anything useful (and are in fact being removed)
20:07:47 <elliott> `addquote <oklopol> that's crazy, it almost seems like you have to tell the program how you want it to manipulate the data and not just give it the relevant commands in a random sequence
20:07:49 <HackEgo> 697) <oklopol> that's crazy, it almost seems like you have to tell the program how you want it to manipulate the data and not just give it the relevant commands in a random sequence
20:08:55 <ais523> let stringise_anything_with_integer_leaves = match
20:08:56 <ais523> | Leaf x -> x = string_of_int x
20:08:58 <ais523> | _ -> recurse
20:09:07 <ais523> there's some Anarchy for you
20:09:14 <elliott> ais523: looks like syb stuff
20:09:18 <ais523> syb?
20:09:23 <elliott> scrap your boilerplate
20:09:23 <monqy> syb
20:09:29 <elliott> i'm sure you can do that with Data.Data
20:09:35 <ais523> elliott: well, Anarchy's a lot about getting rid of boilerplate
20:09:48 <elliott> scrap your boilerplate is an actual thing
20:09:57 <elliott> let's see...
20:09:58 <ais523> for which language?
20:10:01 <elliott> haskell
20:10:08 <elliott> every functional programming language technique has been done in haskell
20:10:22 <ais523> heh
20:10:35 <elliott> hmm..
20:10:36 <oerjan> not uniqueness types, i think
20:10:37 <elliott> s/../.../
20:10:40 <elliott> oerjan: true :P
20:11:00 <ais523> Anarchy also has some other fun features
20:11:05 <Deewiant> Or linear typing, but that's pretty much the same AIUI
20:11:07 <ais523> it's not implemented yet, but I have a vague spec
20:11:25 <ais523> that contains all the new language features, but not any of the stuff that's generically available in languages that you actually need
20:11:27 <elliott> ais523: wait, that function makes no sense
20:11:36 <ais523> what, stringise_anything_with_integer_leaves?
20:11:38 <elliott> ais523: or, wait, is it mutating the tree?
20:11:43 <oerjan> or dependent types, i think
20:11:43 <elliott> what is stringise_anything_with_integer_leaves' type
20:11:45 <ais523> elliott: it's copy-mutating it
20:12:14 <ais523> and its type is polymorphic: ('a | Leaf Int) -> ('a | Leaf String)
20:12:25 <ais523> where 'a can contain any bunch of type constructors
20:12:31 <ais523> including recursive ones
20:12:37 <ais523> and mutually recursive ones
20:12:45 <elliott> eh
20:12:48 <elliott> take a look at "everywhere"
20:12:57 <elliott> http://hackage.haskell.org/packages/archive/syb/0.3.3/doc/html/Data-Generics-Schemes.html
20:13:00 <ais523> that's not a very searchenginable term
20:13:23 <elliott> ais523: f.e. everywhere (mkT show)
20:13:27 <oerjan> yeah that term is everywhere
20:13:37 <ais523> hmm, I think syb might actually be useful for the planned purpose of Anarchy
20:13:37 <elliott> data Foo a = Leaf a | Blah (Foo a) (Foo [a]) | Bluh (Foo a) (Foo a)
20:13:44 <ais523> but I'll keep going with Anarchy anyway beacuse it's a fun language
20:13:46 <elliott> everywhere (mkT show) :: (Show a) => Foo a -> Foo String
20:13:47 <elliott> I think
20:13:54 <elliott> and it'll transform on the leaves
20:13:57 <elliott> including inside the lists
20:14:18 <ais523> let frobnify_types = match
20:14:19 <ais523> | x'type(y) -> frobnify y; recurse x
20:14:25 <ais523> you can stick metadata on things
20:14:30 <ais523> that's ignored except when you explicitly mention it
20:14:37 <elliott> what's "x'type(y)" in less stupid syntax
20:14:50 <monqy> how rude!!
20:15:03 * elliott mean
20:16:11 <ais523> elliott: I'm not sure if the concept exists in many other languages, but it's basically a pattern that matches anything (x) that has a "type" metadata field with value y
20:16:40 <elliott> so (x with Type y) or something
20:16:46 <ais523> yep, if you like
20:17:19 <elliott> ah, programs are starting to break when I open them; the Debian upgrade must be almost finished
20:17:52 <ais523> so that makes a copy which recurses into x, and replaces the type metadata with a frobnified version
20:18:01 <ais523> there's an implicit "| _ -> recurse" case at the end of that
20:18:11 <ais523> wait, no there isn't
20:18:17 <elliott> it sounds like anarchy would be nice for tree processing and little else :P
20:18:20 <ais523> so you get a compile-time error if the tree doesn't have 'type everywhere
20:18:23 <ais523> elliott: yes, that's its intended purpose
20:18:24 <elliott> otoh, lots of things are tree processing
20:18:33 <ais523> I'm just fine with it being useless for anything but tree processing
20:18:39 <elliott> http://i.imgur.com/I5FMs.png
20:18:45 <elliott> ^ debian upgrades
20:19:31 <ais523> haha
20:19:51 <ais523> elliott: hmm, the syb website gives me a 403
20:19:56 <ais523> that's not particularly encouraging…
20:20:14 <elliott> syb is maintained as part of the core haskell libraries
20:20:24 <elliott> see http://hackage.haskell.org/package/syb, and http://hackage.haskell.org/package/base (the core is in Data.Data)
20:20:40 <elliott> http://www.cs.uu.nl/wiki/GenericProgramming/SYB is the linked website there
20:21:00 <elliott> (Data.Data has to be in base because of the compiler support for deriving instances)
20:36:25 -!- Nisstyre has quit (Ping timeout: 240 seconds).
20:42:21 -!- Nisstyre has joined.
20:46:59 -!- sllide has joined.
20:49:55 -!- derdon has joined.
21:11:54 -!- elliott has quit (Remote host closed the connection).
21:14:41 -!- elliott has joined.
21:18:04 <elliott> hmm, I think this thing is probably due for a clean install
21:20:31 <elliott> Man, this is a pretty nifty old script of mine.
21:32:58 <elliott> Oh man, this is some cool old code.
21:33:54 <ais523> does it do something useful?
21:34:42 <elliott> Ostensibly!
21:34:47 <elliott> I like how I've invented my own dependency system here.
21:36:21 <elliott> /* previously a function, but a macro produces smaller executables
21:36:21 <elliott> (bad inlining?) */
21:37:40 <elliott> ais523: I think like half of these programs are full o' goto.
21:37:58 <ais523> elliott: you should see the code C-INTERCAL generates some time
21:38:00 <ais523> especially with -e
21:38:05 <elliott> /* FIXME: inexplicably broken */
21:38:09 -!- augur has quit (Remote host closed the connection).
21:38:38 <elliott> ais523: http://sprunge.us/XHdI
21:38:45 <elliott> it's kind of elegant in its own twisted way
21:39:24 <ais523> elliott: is that a safer rm?
21:39:30 <elliott> Safer howso?
21:39:46 <ais523> no idea
21:39:53 <ais523> less chance of deleting stuff you actually want, or something
21:39:58 <ais523> it's just an rm implementation altogether, right?
21:40:01 <elliott> yep
21:40:17 <ais523> so what possessed you to reimplement rm?
21:40:25 <elliott> http://sprunge.us/cRDY I love how many of these programs start with comments to the effect of "just doesn't work"
21:40:39 <elliott> I also like my sliding four-character buffer.
21:41:33 <elliott> hmm, what OS to install on here for the few weeks of agony
21:41:45 <elliott> I think I'm sufficiently annoyed at Xfce's taskbar to rule it out
21:41:46 <Ngevd> Vista
21:41:48 <ais523> elliott: gah, I saw the "strings" in the usage message before I figured out what it did
21:41:51 <elliott> probably not ready to take the xmonad plunge yet
21:41:51 <elliott> ais523: aww
21:42:16 <ais523> so what made you reimplement the POSIX userland, anyway? so you could truthfully say "Linux" not "GNU/Linux"?
21:42:41 <elliott> I think this was part of my tiny-executable fetishism.
21:42:51 <ais523> you will still lose to busybox
21:42:52 <elliott> They're certainly nicer than coreutils implementations, though. :p
21:42:55 <elliott> ais523: err, no
21:43:03 <elliott> these all came out much, much smaller than busybox
21:43:14 <ais523> wow
21:43:14 <elliott> busybox tools aren't really that small at all
21:43:20 <elliott> a lot of them are based on coreutils ones, even
21:44:20 <elliott> ah, I really like this thing's cal implementation
21:44:34 <elliott> using pikhq's brilliant pseudo-coroutine thing to do the layout
21:45:08 <ais523> did you implement ddate?
21:45:27 <elliott> no :( shame on me
21:45:45 <elliott> yeah, the static binary of all of these tools is 14.7 kilobytes in total
21:45:58 <elliott> basename, cal, cat, date, dirname, echo, env, false, kill, link, mkdir,
21:46:03 <elliott> mv, pwd, rm, signal, sleep,
21:46:10 <elliott> strings, true, uname, vis, yes,
21:46:12 <elliott> chroot
21:46:25 <elliott> some of which don't work :P
21:46:49 <elliott> ais523: oh, the best part is that the build system has special support for true/false
21:46:53 <elliott> ais523: just so they can skip libc entirely
21:47:00 <elliott> TRUEFALSECC := /opt/pcc-dietlibc/bin/pcc
21:47:00 <elliott> TRUEFALSECFLAGS := \
21:47:00 <elliott> -Os -nostdlib -nostdinc -nostartfiles \
21:47:00 <elliott> -isystem /opt/pcc-dietlibc/include -D__dietlibc__ \
21:47:00 <elliott> -D__restrict__= /opt/pcc-dietlibc/lib-x86_64/libc.a \
21:47:01 <elliott> $(CFLAGS)
21:47:11 <ais523> elliott: what language were true/false written in?
21:47:19 <ais523> if you say anything higher-level than asm, I'll be disappointed
21:47:32 <ais523> ideally, you should just pack all the code into the ELF headers
21:48:00 <elliott> ais523: yes, I too have read breadbox's page on that
21:48:16 <ais523> elliott: I know, that's why I referenced it rather than having to explain it to you
21:48:27 <elliott> ais523: anyway, very non-portable C, but it comes out to the same thing as asm, since they look like this:
21:48:28 <elliott> #include <unistd.h>
21:48:28 <elliott> void _start(void)
21:48:28 <elliott> {
21:48:28 <elliott> _exit(0);
21:48:28 <elliott> }
21:48:48 <ais523> boring, no "goto *(void*)0;"?
21:48:51 <elliott> heh
21:49:06 <ais523> that is probably going to be the least portable line of C I've ever written forever
21:49:34 <elliott> is it even, strictly-speaking, C?
21:53:12 -!- Sgeo|web has quit (Ping timeout: 265 seconds).
21:53:43 <elliott> gah
21:53:46 <elliott> firefox is ignoring my dpi settings
21:53:48 <ais523> elliott: sure, it's accepted by at least one strictly-conforming compiler
21:53:58 <ais523> even if that compiler is gcc-bf
21:54:04 <elliott> ais523: I don't believe such compilers exist
21:54:11 <ais523> (I believe stock gcc will also be able to parse and compile the line, although it doesn't do anything useful)
21:55:11 <elliott> right then, time to write some fucking C bindings
21:55:36 <elliott> (ais523: this is for tallybot, by the way...)
21:56:27 <Ngevd> I was going to write a bot
21:56:33 <Ngevd> But I never figured out how
21:58:24 <quintopia> i was going to port my bot to my vps
21:58:28 <quintopia> but i never time
21:58:51 <quintopia> (you decide whether the verb is "had" or "made")
21:59:42 <elliott> /* something went wrong but we just ignore it for now... */
22:01:53 <elliott> anyway, this is cool enough for me to try and preserve it: http://sprunge.us/WCXI?python
22:04:34 <ais523> 72 # I hate ais523
22:04:48 <elliott> ais523: that was because I had to rewrite it to handle C-INTERCAL's tarball names
22:05:03 <elliott> because they use final -s to do something other than separate name and version :)
22:05:05 <ais523> I guessed it was INTERCAL-related
22:05:31 <ais523> this is an automatic build script that just invokes things like configure, right?
22:05:46 <ais523> ah, download/configure/build/install
22:05:59 <elliott> ais523: $ inst http://path/to/tarball installs that package into /opt/pkgname
22:06:06 <elliott> ais523: it works surprisingly well
22:06:55 <elliott> heh, I have azip here
22:08:06 <ais523> does it automatically unpack .az files?
22:08:15 <ais523> I'm still pretty pleased at getting it to beat bz2
22:08:26 <ais523> which just goes to show that most compression algo designers aren't trying hard enough
22:09:08 <elliott> ais523: no, it doesn't :)
22:09:10 <Deewiant> bz2 hardly involves much trying
22:09:35 <ais523> elliott: it beats gz even with stupid encodings for numbers
22:09:36 <Deewiant> It's pretty much BWT + the minimal stuff to compress it
22:09:44 <elliott> i meant
22:09:47 <elliott> re: <ais523> does it automatically unpack .az files?
22:10:08 <ais523> ah, OK
22:11:36 <elliott> pikhq_: Thanks for pointing me at NetSurf ages back, btw
22:13:12 <elliott> gah
22:13:18 <elliott> I can't deal with it, I have to reinstall to get a newer ghc
22:13:27 <elliott> monqy: Does Arch have a civilised GHC version yet
22:13:35 <Deewiant> elliott: No
22:13:45 <monqy> crys
22:13:59 <elliott> SIGH.
22:14:07 <elliott> What is a programmer meant to do???
22:14:14 <Deewiant> Impressively it doesn't even have the latest stable release
22:14:16 <Phantom_Hoover> I thought you hated Arch anyway?
22:14:22 <Deewiant> 7.0.3 instead of .4
22:14:31 <elliott> Phantom_Hoover: Yes, but there's no way Debian has a civilised GHC.
22:14:38 <Phantom_Hoover> I remember my hatred of sshc being ruined when I looked at the logs and it turned out he was actually an idiot.
22:14:43 <elliott> Deewiant: 7.2 is "stable", it's just a "preview release".
22:14:58 <elliott> Deewiant: i.e. they released it as stable then decided to slap warnings on it when it turned out to be buggy.
22:15:34 <Deewiant> Whatever, if it comes with warnings people won't treat it as stable
22:16:06 <elliott> Yeah OK so is there an OS that has the latest GHC :-p
22:16:13 <Deewiant> Windows
22:16:25 -!- Vorpal has quit (Ping timeout: 240 seconds).
22:16:34 <elliott> Deewiant: Windows does not have the latest GHC.
22:16:39 <pikhq_> Gentoo?
22:16:45 <Deewiant> Well, depends on how you think about it
22:16:45 <elliott> By that argument practically everything does because there's binary packages
22:16:45 <pikhq_> (just a guess)
22:17:01 <elliott> http://packages.gentoo.org/package/dev-lang/ghc
22:17:01 <elliott> Nope.
22:17:02 <Deewiant> The typical method of installing stuff on Windows has the latest GHC
22:18:01 <elliott> http://packages.debian.org/source/experimental/ghc
22:18:05 <elliott> PROBLEM SOLVED.
22:19:21 <elliott> Soooooooooooooooooooooooo
22:19:54 <elliott> Come to think of it, does Arch even still have GNOME 2
22:22:51 * Phantom_Hoover → sleep
22:22:53 -!- Phantom_Hoover has quit (Quit: Leaving).
22:23:09 -!- Mathnerd314 has joined.
22:23:14 -!- Mathnerd314 has left.
22:24:44 -!- Patashu has joined.
22:25:56 <oerjan> no more gnome, or?
22:26:03 <elliott> oerjan: where is pun
22:26:21 <elliott> oh neat, Arch are actually not shipping gnome 2 at all
22:26:29 <elliott> that fits in with their characteristic march-forwards-at-all-costs attitude
22:26:49 <oerjan> elliott: as previously, read it aloud. although my pronunciation may be off, i'm just a lowly norwegian.
22:26:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:27:01 <elliott> oerjan: idgi
22:27:26 <oerjan> it's more a rhyme than a pun
22:27:36 -!- GreaseMonkey has joined.
22:27:37 <elliott> it sort of works
22:27:46 -!- Patashu has quit (Client Quit).
22:28:40 <elliott> oh great, they have their own ~gnome 2 fork~
22:30:22 <Deewiant> Where "they" = "some guy who uploaded it to AUR"?
22:30:52 -!- Patashu has joined.
22:34:24 <elliott> Deewiant: Yep
22:34:36 <Deewiant> Ok
22:34:39 <elliott> Also a wiki article :P
22:34:54 <monqy> some guy who wiki articled it
22:35:01 <Deewiant> So "some guy who wrote an article" as well
22:36:53 <elliott> Deewiant: Some guy who made a Linux distribution
22:37:14 <elliott> "Yes, it is huge. I'm alone. Thankyou so much."
22:37:16 <elliott> deep gnome thoughts
22:37:17 <Deewiant> Who is not, in any way, affiliated with this gnome 2 fork
22:37:28 <elliott> Deewiant: Well, they're both some guys
22:38:14 <Deewiant> Sure, but I read your "they" as referring to Arch
22:38:31 <elliott> Honestly, I would just use a standalone WM if I wasn't so attached to panels
22:38:40 <elliott> And I know of no decent panel implementation other than GNOME2's
22:38:56 <Deewiant> Can't you use it with a different WM
22:39:17 <elliott> Deewiant: You're missing the part where it's not in the repositories
22:39:23 <elliott> Because OMG OMG OMG GNOME3
22:39:25 <elliott> SO NEW
22:39:27 <elliott> SO SHINY
22:39:45 <Deewiant> It won't get updated anyway, no?
22:39:53 <Deewiant> So just manually install it
22:40:10 <elliott> Deewiant: Yeah, that sounds sustainable
22:40:21 <Deewiant> Like said, it won't get updated...
22:40:32 <elliott> Deewiant: Yeah, so I need to run something else.
22:41:01 <Deewiant> The fork is presumably closest to your needs, then :-P
22:41:21 <elliott> Yeah except I know it'll be totally fucked in some awful way, and also it's one big monolithic project so I can't pull out the panel
22:41:24 <elliott> Who knows a good panel
22:41:47 <Deewiant> What's so special about gnome2's panel
22:43:25 <elliott> Deewiant: Nothing at all, it just isn't horribly broken
22:43:38 <Deewiant> How are other panels horribly broken
22:43:38 <elliott> Deewiant: e.g. In Xfce's, you can't even rearrange windows on the task bar
22:44:08 <elliott> KDE's will probably pull in ~seventy billion KDE dependencies and look like crap and I know it want to be all transparent vector blah blah instead of just using widgets, so I'm disinclined to try it out
22:44:18 -!- ais523 has quit (Remote host closed the connection).
22:45:00 <Deewiant> I use xfce4's, can't say I've felt the need for that feature :-P
22:47:04 <elliott> I do it all the time to optimise access to a related set of windows, apparently the Xfce devs' opinion on this is that it takes more code so who cares
22:47:35 <Deewiant> I only really use the panel to see what's open anyway
22:48:08 <elliott> Ha ha, Deewiant is an Alt-Tab user
22:48:40 <Ngevd> I use Unity because I am tasteless, weird, and don't actually know what you are talking about
22:48:45 <monqy> I have a panel-like thing but really it's just a clock, the list of workspaces i'm using, and the title of the currently focused window
22:48:57 <monqy> "all monqy needs"
22:49:01 -!- copumpkin has joined.
22:49:29 <monqy> oh and it has the name of the tiling method i'm using i forgot about that
22:50:59 <elliott> Deewiant: Really though Xfce mostly satisfies me, it's just that where it differs from GNOME 2 it's usually inferior
22:51:12 <elliott> Deewiant: xfce-terminal is just close enough to gnome-terminal to annoy me about all the ways it differs
22:51:28 <elliott> Whatever their archive manager is called is awful, and their media player is about a billion times worse than Totem
22:51:28 <Deewiant> I only use xfce4-panel, I don't know anything about the rest of it (nor gnome)
22:51:44 <elliott> Maybe I should just use the console exclusievly.
22:51:50 <elliott> exclusively.
22:51:52 <Deewiant> And I sleep now -->
22:52:26 <Ngevd> 'quote
22:52:41 <Ngevd> I used the wrong punctuation, didn't I?
22:52:43 <Ngevd> `quote
22:52:45 <HackEgo> 102) <songhead95> think of all the starving kids in china who don't have rotting sea life to eat
22:53:49 <elliott> Alright, Arch it is I think
22:55:32 <oerjan> `help
22:55:33 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
22:55:54 <elliott> oehi
22:55:55 <elliott> oerjan: hi
22:55:59 <oerjan> hello
22:58:21 <oerjan> `log [r]otting sea life to eat
22:58:48 <HackEgo> 2010-03-21.txt:04:11:18: <songhead95> think of all the starving kids in china who don't have rotting sea life to eat
22:59:15 <oerjan> ah. looks genuine then.
22:59:25 <elliott> oerjan: what
22:59:26 <oerjan> somehow that sounded to me like oklopol
22:59:29 <elliott> heh
23:03:37 -!- sllide has quit (Ping timeout: 240 seconds).
23:03:50 -!- augur has joined.
23:06:21 -!- PatashuXantheres has joined.
23:07:11 <elliott> So
23:07:25 <elliott> Installing OSes without an optical drive sucks bigtime.
23:09:59 <Ngevd> It's a week until my birthday
23:11:02 <monqy> ahhh, installing oses without optical drive. that stuff's fun
23:11:24 <Ngevd> Oddly, I generally use SD cards to install OSs
23:11:30 <Ngevd> Because I am like that
23:12:17 -!- PatashuXantheres has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
23:14:10 -!- pikhq has joined.
23:14:35 -!- pikhq_ has quit (Ping timeout: 256 seconds).
23:14:46 <oerjan> remember, remember, the third of november
23:15:40 <elliott> http://sprunge.us/TfTY ;; someone tell me this isn't a lovely cal(1)
23:18:26 <Ngevd> Goodnight
23:18:27 -!- Ngevd has quit (Quit: Leaving).
23:19:28 <Patashu> what are the functions write() and writes()?
23:20:27 <elliott> Patashu: write() is standard syscall
23:20:33 <elliott> writes(fd,s) is write(fd,s,sizeof(s)-1)
23:20:40 <elliott> i.e. avoid specifying length for constant strings
23:20:53 <Patashu> ah ok
23:21:43 -!- augur has quit (Read error: Connection reset by peer).
23:22:04 <DCliche> Did someone highlight me?
23:22:20 <elliott> I think I did :-P
23:22:56 -!- augur has joined.
23:30:30 -!- derdon has quit (Remote host closed the connection).
23:58:07 -!- evincar has joined.
23:58:31 <evincar> I'm having a small bit of trouble parsing the lambda syntax in Even.
23:59:21 <oerjan> are you using haskell? >:P
23:59:39 <oerjan> > var$cycle"Parsec! "
23:59:40 <lambdabot> Parsec! Parsec! Parsec! Parsec! Parsec! Parsec! Parsec! Parsec! Parsec! Par...
←2011-10-25 2011-10-26 2011-10-27→ ↑2011 ↑all