00:04:12 -!- nooga has quit (Ping timeout: 265 seconds).
00:16:56 <lambdabot> http://sophos.berkeley.edu/macfarlane/pandoc/
00:21:59 -!- sebbu has joined.
00:22:00 -!- sebbu has quit (Changing host).
00:22:00 -!- sebbu has joined.
00:28:08 -!- sebbu has quit (Ping timeout: 244 seconds).
00:38:25 -!- augur has joined.
00:39:06 -!- sebbu has joined.
00:39:10 -!- sebbu has quit (Changing host).
00:39:10 -!- sebbu has joined.
01:03:36 -!- zzo38 has joined.
01:09:56 -!- monqy has joined.
01:30:09 -!- zzo38 has quit (Remote host closed the connection).
01:40:58 <lambdabot> s -> Getting (First a) s t a b -> Maybe a
01:41:27 <lambdabot> Perhaps you meant `_just' (imported from Control.Lens)
01:41:36 <lambdabot> (Applicative f, Prismatic k) => k (a -> f b) (Maybe a -> f (Maybe b))
02:12:20 -!- augur has quit (Read error: Connection reset by peer).
02:12:53 -!- augur has joined.
02:37:26 -!- augur has quit (Remote host closed the connection).
02:43:17 <kmc> you do it to yourself
02:45:02 -!- kmc has set topic: Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://codu.org/logs/_esoteric/.
02:49:53 -!- oerjan has set topic: Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://codu.org/logs/_esoteric/.
02:51:36 -!- tswett has joined.
02:51:38 -!- shachaf has set topic: Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://cоdu.org/logs/_esoteric/.
02:52:21 <oerjan> > "Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://cоdu.org/logs/_esoteric/"
02:52:22 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:52:39 <oerjan> > "Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all..."
02:52:41 <lambdabot> "Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me....
02:53:01 <oerjan> > " because you don't know what you ask of me. | http://cоdu.org/logs/_esoteric/"
02:53:01 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:53:11 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:53:12 <oerjan> > " because you don't know what you ask of "
02:53:13 <lambdabot> " because you don't know what you ask of "
02:53:35 <oerjan> > "me. | http://cоdu.org/logs/_esoteric/"
02:53:35 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:53:43 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:53:53 <oerjan> > ".org/logs/_esoteric/"
02:53:54 <kmc> binary search itt
02:54:00 <shachaf> oerjan: I suspect there are more efficient ways of figuring that out.
02:54:04 <lambdabot> mueval: recoverEncode: invalid argument (invalid character)
02:54:21 <monqy> it's easy when you're url hilighter stops at the problem о
02:54:49 -!- shachaf has set topic: Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://cоdu.оrg/lоgs/_еsоtеric/.
02:55:09 <monqy> now the о is in codu and esoteric, shachaf?
02:55:32 <monqy> it's 1px off of o in my font
02:56:03 -!- shachaf has set topic: Yes I'll tell you, I'll tell you why I'm lying here... but God forgive me... and God help us all... because you don't know what you ask of me. | http://сodu.оrg/lоgs/_еsotеric/.
02:56:20 <monqy> oh no what did you do
03:01:27 -!- Sgeo|web has joined.
03:16:37 <kmc> ḧẗẗp̈:̈/̈/̈c̈öd̈ü.̈ör̈g̈/̈l̈ög̈s̈/̈_̈ës̈öẗër̈ïc̈/̈
03:17:25 <shachaf> Hmm, I guess none of the punctuation has diæreses.
03:17:42 <shachaf> Or maybe my font is just messed up!
03:17:52 <kmc> something weird happened in copy-paste-land
03:18:08 <Bike> "COMBINING_DIAERESIS" sounds like a disease.
03:18:32 <shachaf> COMBINING PALATALIZED HOOK BELOW
03:18:45 <shachaf> Sounds rather painful, in fact.
03:18:49 <Bike> how long do i have to live, doc
03:19:58 <shachaf> COMBINING GRAVE-ACUTE-GRAVE
03:20:09 <kmc> oh i blame mosh
03:20:28 <kmc> the umlauts disappear if i cat the same file inside mosh
03:20:36 <kmc> on a different server though
03:20:40 <kmc> so maybe it's a locale difference
03:20:50 <kmc> they're dots anyway
03:21:03 <kmc> is вхыыыыыыыыыы supposed to be like "whyyyyyyyyyyyy"
03:22:52 -!- Phantom__Hoover has quit (Read error: Connection reset by peer).
03:23:23 <shachaf> GHC recompiles much more quickly when you touch the RTS than when you touch the compiler.
03:23:40 <shachaf> I suppose it doesn't have to recompile the compiler at all.
03:24:01 <kmc> compiling Haskell is slow
03:24:28 <shachaf> And you don't need to do the stage1/stage2 thing.
03:24:34 <shachaf> Well, I guess you don't really need that anyway.
03:28:05 <shachaf> Gregor: So should the new quote database keep an ordering?
03:28:11 <shachaf> I think ordered quotes are silly.
03:28:55 <Gregor> Ordering per se isn't important, but numbering or otherwise having short, easy-to-remember IDs is, and ordering seems to be the best way to do that.
03:29:03 <Gregor> Except of course that then we keep deleting them, breaking it.
03:29:16 <shachaf> No, we're going to make a new system where a quote is identified by a hash.
03:30:31 <shachaf> Gregor: ... how about yes?
03:30:32 <Gregor> Unless it's like a decimal hash of no more than four digits.
03:30:56 <shachaf> Three characters should be plenty.
03:31:16 * oerjan gently reminds people of the birthday paradox
03:31:36 <shachaf> We've already gone through it and figured out how long they need to be.
03:31:58 <shachaf> Anyway we'll just take the shortest unique prefix each time.
03:32:05 <Gregor> I mean, I'm not gonna stop anybody, I have little investment and the whole point of HackEgo is do whatever you want, but *eh*
03:32:40 <Gregor> It's just not memorable at all.
03:33:15 <Gregor> Three to four base-32 digits.
03:33:15 <shachaf> <Gregor> I've forgotten already.
03:33:34 <shachaf> I think it's just as memorable as three digits.
03:33:44 <quintopia> although i'm fine with just assigning them increasing integers that don't change when one is deleted
03:33:45 <shachaf> Because people are inefficient at remembering things from a small alphabet. :-(
03:33:47 <c00kiemon5ter> imo a sequence is simpler, "colission-free" and easier to remberer
03:33:59 <Gregor> Jumping from decimal to anything more than about base 12 and it becomes impossible.
03:34:23 <Bike> just have people type in the whole quote when they want to retrieve the quote.
03:34:26 <Gregor> Yeah, just not deleting numbers seems like the sensible way to go.
03:35:17 <shachaf> If by sensible you mean unsensible?
03:35:30 <shachaf> Bike's suggestion is good.
03:35:49 <Gregor> Yeah, being memorable, sequential AND constant, that'd be terrible.
03:36:54 <shachaf> The number shouldn't be part of the quote!
03:36:59 <shachaf> That'd mess the whole thing up.
03:37:55 <Gregor> ... dahell? Who's suggesting that? Or are you just pissy about the fact that order of addition affects quote identification?
03:37:57 <oerjan> i say quotahto, you say quotayto
03:40:13 <quintopia> you specify an id when you add a quote
03:40:21 <quintopia> if it's not unique, it doesn't get added
03:40:33 <quintopia> then people decide what's memorable
03:41:33 <Sgeo|web> And make it not indicate whether or not it was added, and hide the quote list for 24 hours after an attempted addition
03:41:41 <Sgeo|web> And 24 hours before an attempted addition
03:43:08 <shachaf> Even quintopia's suggestion is better.
03:44:48 <Gregor> How about do whatever the fuck you want because HackEgo isn't a democracy, it's anarchy.
03:47:44 * kmc throws a chair through the nearest starbucks window
03:49:04 <Sgeo|web> kmc: what if the nearest Starbucks is miles away?
03:49:09 <Sgeo|web> Is the nearest Starbucks miles away?
03:49:48 <oerjan> come and see the violence inherent in the system
03:51:17 <Gregor> HELP! HELP! I'M BEING OPPRESSED!
03:51:44 <HackEgo> 94) <Warrigal> Darn, now I can't acknowledge the reference you were making.
03:54:55 <lambdabot> tswett: You have 1 new message. '/msg lambdabot @messages' to read it.
03:55:12 <tswett> Let's assign each quote a number according to the order in which it was added.
03:55:46 <kmc> look deep into its soul
03:55:50 <HackEgo> 396) <oklofok> mixing drinks together is like taking all of mozart's works and listening to all of them at once <oklofok> and in general a drink - and most foods - are kind like taking a song and then just taking the average of the notes and listening to it for three minutes. <oklofok> olsner: the point is you don't have to be the composer yourse
03:56:00 <HackEgo> 48) <GregorR> ??? <GregorR> Are the cocks actually just implanted dildos? <GregorR> Or are there monster dildos and cocks? <GregorR> Or are both the dildos and cocks monster?
03:56:07 <HackEgo> 516) <Phantom_Hoover> Yeah, Bashir, just sit there drinking, rather than diagnosing the carpenter mauled in that tragic bonobo accident.
03:56:12 <HackEgo> 119) <CakeProphet> how does a "DNA computer" work. <CakeProphet> von neumann machines? <Phantom_Hoover> CakeProphet, that's boring in the context of DNA. <Phantom_Hoover> It's just stealing the universe's work and passing it off as our own.
03:56:17 <HackEgo> 290) <elliott> <Yahweasel> <Vorpal> that one doesn't make a lot of sense outside context. Unless it is supposed to be a rather lame joke about STD as in HIV, and so on // HELLO WELCOME TO QUOTE DATABASES 101
03:56:36 <kmc> `delquote 290
03:56:42 <HackEgo> *poof* <elliott> <Yahweasel> <Vorpal> that one doesn't make a lot of sense outside context. Unless it is supposed to be a rather lame joke about STD as in HIV, and so on // HELLO WELCOME TO QUOTE DATABASES 101
03:57:26 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: quotwe395: not found
03:57:38 <tswett> Why is my terminal being slow. Stop being slow, my terminal.
03:59:41 <HackEgo> bin \ canary \ egobot.tar.xz \ foo \ interps \ karma \ lib \ paste \ quotes \ share \ wisdom \ zalgo \ zalgo.hi \ zalgo.hs \ zalgo.o
04:01:39 <HackEgo> 395) <oklofok> mixing drinks together is like taking all of mozart's works and listening to all of them at once <oklofok> and in general a drink - and most foods - are kind like taking a song and then just taking the average of the notes and listening to it for three minutes. <oklofok> olsner: the point is you don't have to be the composer yourse
04:01:42 <HackEgo> 290) <elliott> A priori one cannot say that post hoc ergo propter hoc the diminishing returns would give; yet under quid pro quo one can agglutinate fabula and sujet into vagrancies untold. <elliott> See? I'm intellectual.
04:02:16 <HackEgo> 710) <fizzie> I saw a MythBusters show about that. (Or I guess it maybe was a tree.)
04:02:17 <HackEgo> 193) <zzo38> Invent the game called "Sandwich - The Card Game" and "Professional Octopus of the World" (these names are just generated by randomly)
04:02:17 <HackEgo> 245) <fizzie> Phantom_Hoover: I have just one tvtropes page open in elinks, but my tvtropes.txt "queue" has 38 tvtropes.org URLs waiting for processing.
04:02:17 <HackEgo> 859) <Taneb> Gordon Moore's expected lifespan doubles every 18 months
04:02:19 <HackEgo> 371) <Sgeo_> "system is fairly sane <Sgeo_> <elliott> imagine if the roomba was called the Robotic Magic Vacuum <Sgeo_> <elliott> would you object to that being trademarked <Sgeo_> <monqy> I mean <Sgeo_> <monqy> phrase trade" <Sgeo_> oops
04:02:25 <tswett> elliott, naturally, forgot to take into account the varying efficacies of arbitrational vantages.
04:02:42 <Sgeo|web> elliott: monqy tswett despite not on list, Fiora
04:03:21 <tswett> Are you talking about that potato I read?
04:06:12 <Sgeo|web> Well, I don't know if you've read the potato
04:08:53 <oerjan> `run quote 395 | fmt -w80 | tail -1
04:08:55 <HackEgo> knows what sequences of drinks taste the best
04:09:10 <oerjan> `run quote 395 | fmt -w80 | tail -3
04:09:12 <HackEgo> of the notes and listening to it for three minutes. <oklofok> olsner: the \ point is you don't have to be the composer yourself <oklofok> not everyone \ knows what sequences of drinks taste the best
04:09:30 <tswett> This fan fic seems good enough overall, but it has a couple of blemishes.
04:09:39 <tswett> "You fiddle through the pantry, reaching in deep, standing on one foot for balance."
04:27:55 <Sgeo|web> Gregor: you should read potatoes
04:35:00 -!- epicmonkey has joined.
04:39:25 <oerjan> potato reading, the new fad of scrying
04:47:13 -!- epicmonkey has quit (Read error: Operation timed out).
04:50:42 -!- WeThePeople has joined.
05:01:25 <shachaf> monqy: have you heard return to the neverhood
05:02:38 <HackEgo> WeThePeople: 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. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
05:02:45 <Gregor> Damn it, it's TOO FAST now.
05:03:04 <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. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
05:03:13 <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. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
05:03:19 -!- WeThePeople has left ("Leaving").
05:03:21 <Gregor> > "It's not appreciably slower than lambdabot!"
05:03:22 <lambdabot> "It's not appreciably slower than lambdabot!"
05:03:35 <lambdabot> echo; msg:IrcMessage {msgServer = "freenode", msgLBName = "lambdabot", msgPrefix = "shachaf!~shachaf@unaffiliated/shachaf", msgCommand = "PRIVMSG", msgParams = ["#esoteric",":@@ @echo @echo hi"]}
05:03:36 <lambdabot> rest:"echo; msg:IrcMessage {msgServer = \"freenode\", msgLBName = \"lambdabot\", msgPrefix = \"shachaf!~shachaf@unaffiliated/shachaf\", msgCommand = \"PRIVMSG\", msgParams = [\"#esoteric\",\":@@ @
05:03:45 <Gregor> Although apparently lambdabot becomes hyper-instantaneous on second request or something???
05:03:49 <Gregor> Or maybe I'm just lagged.
05:04:23 <shachaf> Bike: have you learned lens yet
05:04:55 <shachaf> @where+ lens https://lens.github.com/
05:05:02 <Sgeo|web> http://www.amazon.com/dp/B003L7WF7A/?tag=047-20
05:05:05 <shachaf> @where+ lens http://lens.github.com/
05:05:20 <Bike> okay well that link is - oh, no https
05:06:12 <oerjan> it means u steel awr mohnee!
05:06:22 <Sgeo|web> I got the link from http://www.thisiswhyimbroke.com/ if that's relevant, maybe the tag is some referral thing?
05:06:40 <Bike> man this doesn't even have any polynomials above the second degree does it
05:06:58 <shachaf> Bike: are you still talking about lens
05:07:09 <Sgeo|web> I'm mostly just facepalming about the 3(pi-.14) thing
05:07:32 <Bike> I don't think lens has polynomials. Am I wrong.
05:07:35 <Sgeo|web> Maybe they put that just above where the 9 normally is, in just the right spot?
05:08:13 <shachaf> Bike: It has algebraic types.
05:08:19 <Bike> Sgeo|web: bla bla Do Irrationals Really Exist?? bla bla
05:08:35 <shachaf> Well, the computable ones do.
05:08:49 <Bike> the multiple question marks are supposed to indicate that it's not meant as a serious question or worth talking about
05:08:53 <Bike> and: does type algebra have polynomials?
05:09:03 <Bike> i didn't think it did.
05:09:04 <shachaf> Bike: My answer was not completely serious either.
05:09:14 <Bike> blast, i should have known
05:09:38 <lambdabot> No instances for (GHC.Num.Num (a0 b0 c0), GHC.Num.Num (a0 b'0 c'0))
05:09:49 <Bike> what the hell does three asterisks denote?
05:10:06 <shachaf> A thing with functions on tuples.
05:10:15 <Bike> oh. i was hoping tetration for shits/giggles
05:10:27 <lambdabot> Arrow a => a b c -> a b' c' -> a (b, b') (c, c')
05:11:18 <shachaf> > (f *** g) (x,y) -- better
05:11:20 <lambdabot> Ambiguous type variable `c0' in the constraints:
05:11:32 <Bike> you're doing that just to amuse me, correct
05:11:34 <shachaf> > (f *** g) (x,y) :: (Expr,Expr)
05:11:43 <Bike> wow, what was that, me.
05:11:49 <lambdabot> `***' (imported from Control.Arrow),
05:11:49 <oerjan> ...it's some weird elementary school division symbol
05:12:02 <lambdabot> fd:9: commitBuffer: invalid argument (invalid character)
05:12:10 <oerjan> Bike: no, not that. on the clock.
05:12:14 <shachaf> ÷ works fine except that lambdabot is broken.
05:12:46 <Sgeo|web> Ok, I can't get the thing at position 11 on that clock to actually equal 11 with either obvious interpretation
05:12:48 <monqy> I think I've seen that clock
05:12:59 <monqy> oh was the clock linked in here
05:13:04 <monqy> I guess i'll see if I've seen it
05:13:05 <Bike> anyway, sgeo, obviously the point is to give it to math majors so that you can watch them explode atchu
05:13:33 <shachaf> > let f g x = g (g x) in f f f f (+1) 0
05:13:38 <shachaf> > let f g x = g (g x) in f f f f f (+1) 0
05:13:42 <oerjan> Sgeo|web: i said it's a weird division symbol
05:13:58 <Sgeo|web> Right, the thingy for long division
05:14:21 <monqy> explode in what sense
05:14:25 <Sgeo|web> I should learn to pay attention
05:15:07 <Bike> monqy: the sense ending with you covered in principia mathematica symbology written in blood
05:15:18 <monqy> oh i havent seen that clock
05:15:21 <monqy> but i've seen another clock
05:15:37 <monqy> people also buy Math Jokes 4 Mathy Folks [Paperback]
05:15:52 <Bike> oh, parse thing.
05:16:46 <Bike> «Some philosophers might take issue with such a Platonist view of the world - this belief in an absolute and eternal reality beyond human existence - but to my mind that is what makes them philosophers and not mathematicians
05:16:52 <Sgeo|web> The scary thing is that it shouldn't even LOOK like multiplication to our eyes in that context but it does
05:17:03 <Bike> why shouldn't it?
05:17:04 <monqy> i'm going to find some math jokes in this book
05:17:07 <monqy> watch out, mathy folks
05:17:30 <Sgeo|web> Bike: because Haskell doesn't have a thing where things next to eachother like that is multiplication
05:17:39 <monqy> What's the difference between an economist and a confused old man with Alzheimer's?
05:17:56 <Bike> obviously, but it's close enough
05:17:59 <monqy> The economist has a calculator.
05:18:30 <shachaf> Bike: Haskell has a thing where "x y" means "x"
05:18:52 <Bike> is that actually a haskell thing or is it a parse thing, because i'm used to parsers giving up like that
05:19:01 <Bike> also i didn't need five examples but thanks
05:19:05 <shachaf> It's a misleading lambdabot thing.
05:19:14 <Bike> makes more sense
05:19:15 <monqy> ps why does lambdabot have that thing
05:19:22 <shachaf> Actually "x y" means what "x(y)" usually means.
05:19:31 <shachaf> monqy: because cale. dont ask questions monqy!!!!!
05:19:38 <oerjan> because pointwise arithmetic is useful, in principle
05:19:42 <pikhq> monqy: Caleskell confuseth
05:19:48 <Bike> «No instance for (Num (t -> t1)) arising from the literal `3' at <interactive>:1:0-2» bullshit
05:19:55 <lambdabot> Functor f => (a -> b) -> f a -> f b
05:19:56 <monqy> remember when caleskell had a funky type signature for flip, and (.) was fmap
05:20:02 <Bike> actually can you have functions named 3
05:20:03 <lambdabot> Functor f => (a -> b) -> f a -> f b
05:20:05 <monqy> oh it's still fmap.......
05:20:06 <Bike> i would like that
05:20:15 <monqy> at least they fixed flip
05:20:25 <shachaf> 3 actually means "fromInteger (3::Integer)"
05:20:51 <Bike> :t fromInteger
05:21:03 <Bike> so, it's just a thunk that returns 3.
05:21:17 <oerjan> ...that's not the point.
05:21:50 <oerjan> > (3 :: Double, 3 :: Int, 3 :: Complex Float)
05:21:59 <Bike> ok, 3 as an integer?
05:22:11 <shachaf> instance Num MyValue where fromInteger :: Integer -> MyValue; fromInteger x = whatever
05:22:23 <oerjan> no, as whatever type you want
05:22:27 <lambdabot> Could not deduce (GHC.Num.Num (a0 -> t))
05:22:27 <lambdabot> arising from the ambiguity chec...
05:22:35 <Bike> then what's with the ::Integer in shachaf's type signature
05:22:48 <shachaf> Bike: (3::Integer) is my special syntax for the Integer value 3.
05:23:03 <shachaf> Which isn't polymorphic or anything. It's just an integer.
05:23:13 <Bike> that is what i assumed
05:23:27 <Bike> i'm pretty confused right now because i thought things made sense and then they didn't
05:24:09 <pikhq> Bike: Basically, you can define an unusual instance of Num and get functions out.
05:24:13 <Bike> maybe learning haskell from a brainfuck derivative/glasswork channel was a mistake.
05:24:42 <shachaf> Wait, which channel are you talking about?
05:24:43 <oerjan> Bike: basically, 3 means you expect it to when you use it as an Integer. for any other type, it gets converted with fromInteger.
05:24:57 <Bike> this channel. jokingly.
05:25:11 <Bike> because it's nominally about esoteric languages and more often about lenses.
05:25:14 <oerjan> this is not _necessarily_ a thunk, since it could be done at compilation.
05:25:36 <Bike> oerjan: i can't parse "means you expect it to". means you expect it to what?
05:26:57 <shachaf> This person in #haskell decided that https://en.wikipedia.org/wiki/Monad_(functional_programming) should be their introduction to Haskell.
05:26:58 <Bike> so, 3 as a literal is "polymorphic"? for what i imagine is a different definition of "polymorphic" than i remember from C++ in 21 Days
05:27:15 <pikhq> Yes, 3 is polymorphic.
05:27:20 <Bike> shoulda been Monad_(category_theory)
05:27:39 <Bike> is literal 3.0 polymorphic?
05:27:54 <shachaf> (Unless you use the GHC extension I wrote!)
05:28:00 <Bike> Only morphs to types of floats?
05:28:13 <Bike> wow, what a badly constructed thought that was
05:28:17 <shachaf> Floating points are the devil.
05:28:19 <Bike> you can use it as a ratio?
05:28:54 <Bike> boy, i hope i can look forward to a generation of programmers using float syntax and thinking accurately that they have a rational
05:28:54 <oerjan> that's the fundamental meaning, everything else is converted from that type
05:29:03 <pikhq> Floats are the devil, and should not be considered numbers.
05:29:12 <shachaf> That's not float syntax, Bike.
05:29:22 <Bike> well, in programming it usually is.
05:29:37 <shachaf> There are many well-behaved types that can express 3.1.
05:29:44 <shachaf> Floating point values are not among them.
05:29:52 <monqy> > x-- // decrement x
05:30:01 <monqy> now x is decremented
05:30:11 <Bike> i'm just imagining someone arguing bout using 3.0 in a non-haskell program and insisting that it's accurate
05:30:24 <pikhq> 0.1 does not have an exact representation as a float. Joy.
05:30:53 <Bike> what if it's a base ten float, eh, don't be so computerbound!
05:31:12 <shachaf> Bike: Floats are computerbound.
05:31:22 <pikhq> I don't deal in base 10.
05:31:46 <Bike> not necessarily, you'd just have to be entertainingly nuts to use floats outside of 'em
05:32:42 <Bike> what would "all bases are base 10" even mean
05:32:53 <pikhq> Sgeo|web: Not if you follow Postel's Law.
05:33:25 <shachaf> monqy: are you going to learn lens on 12-12-12
05:33:31 <Sgeo|web> For any base b, the string "10" in that base represents b. (Might not be true for all bases, but surely for base two, ten, sixteen, etc)
05:33:52 <monqy> we won't know until then now will we !
05:34:13 <oerjan> shachaf: no, he'll learn it on 12-21-12, which will cause the end of the world.
05:34:30 <shachaf> oerjan: edwardk's talk is on 12-12-12
05:35:20 <shachaf> what about base balanced ternary!!
05:35:43 <oerjan> balanced ternary is fine
05:35:44 <shachaf> `run allquotes | grep Jafet
05:35:44 <Bike> now i want to go read taocp2 again, thanks shachaf
05:35:46 <HackEgo> 835) <Jafet> I wonder if Red Alert 4 will use MMIX \ 860) <Jafet> The world needs better healthcare, social justice and wealth distribution, but a monads library for clojure surely won't hurt
05:35:50 <Bike> Sgeo|web: it's unary. tallymarks.
05:36:09 <shachaf> oerjan: I suppose that's still 3.
05:36:21 <shachaf> Bike: I haven't read any of it!
05:36:27 <Bike> it's pretty rad
05:36:33 <shachaf> Also should I go to http://www-cs-faculty.stanford.edu/~uno/musings.html on Friday?
05:36:35 <Bike> maybe you should wait for knuth to slightly unfuck his language though
05:36:35 <oerjan> now fibonacci base may have some trouble there
05:36:49 <Bike> anyway i mention it because he goes into floats
05:36:50 <oerjan> 10 is probably 2, i guess
05:36:57 <Bike> lots of fun stuff, like how they're not associative or whatever
05:37:04 <Bike> or even commutative? i forget
05:37:11 <shachaf> They're nothing desirable.
05:37:34 <Bike> well, they're useful in many contexts, just, as long as you know they're approximate
05:37:36 <hagb4rd> <Sgeo|web>Is base 1 even a base? <-- could be a problem with the notification of zero
05:37:44 <Bike> which most people don't
05:37:51 <oerjan> ieee floats are commutative, afair
05:38:17 <Bike> does that include snans and infinities, i wonder
05:38:40 <oerjan> (i was about to change = to == until i remembered nan :P)
05:39:19 -!- SingingBoyo has joined.
05:39:39 <oerjan> shouldn't leave the impression i actually read the standard
05:40:04 <pikhq> Not associative though.
05:41:19 <oerjan> i think that having addition be both commutative, associative and satisfy x+(-x) = 0 on a finite set of representations basically means you _must_ wrap around at some point.
05:42:19 <shachaf> Associativity is way more important than commutativity.
05:43:14 <oerjan> or even with just associativity, 1+1+1+1+...+1 must repeat at some point.
05:43:29 <oerjan> wait, who needs associativity, even.
05:44:04 <oerjan> 1+(1+(1+(...))) must repeat at some point, given a bounded size representation.
05:46:38 <oerjan> for ieee, that presumably happens once you reach 1+x == x by rounding.
05:47:26 <oerjan> while things like Word32 can wrap around back to 0
05:48:58 <oerjan> if you have the property (-1)+(1+x) == x for all x, then you are guaranteed wraparound to the beginning.
05:49:35 <Bike> "Many serious mathematicians have attempted to analyze a sequence of floating point operations rigorously, but have found the task so formidable that they have tried to be content with plausibility arguments instead." knuth you're not helping
05:50:14 <oerjan> shachaf: ok i guess undefined behavior also works
05:54:25 <Bike> hm, we do have ((u+v)-u)+((u+v)-((u+v)-u)) = u+v I guess
05:54:31 <Bike> that's pretty much as good as associativity, right
05:55:03 -!- augur has joined.
05:55:17 <shachaf> @check \u v -> ((u+v)-u)+((u+v)-((u+v)-u)) == u+(v::Double)
05:55:41 <Bike> according to knuth. the proof's maybe a paragraph if you want me to dump it.
05:56:23 <Bike> What does check do?
05:56:46 <Bike> I thought that was just lambdabot messing with shachaf.
05:56:48 -!- augur has quit (Read error: Connection reset by peer).
05:56:54 <oerjan> @check \u v -> ((u+v)-u)+((u+v)-((u+v)-u)) == u+(v::Double)
05:57:00 -!- augur has joined.
05:57:05 -!- augur has quit (Read error: Connection reset by peer).
05:57:08 <shachaf> When it's not broken, @check will generate random inputs and check that your thing holds.
05:57:12 <Bike> Lambdabot, you should be a bit nicer.
05:57:20 <Bike> Golly, that doesn't seem that rigorous.
05:57:28 -!- augur has joined.
05:57:44 <shachaf> Bike: Good enough for programmers, right?
05:58:34 <oerjan> it's good for that "not obviously false" feeling
06:00:15 <oerjan> also for that "obviously false" feeling, in other cases
06:00:40 <oerjan> (oh my poor ZipList Monad ;_;)
06:01:49 <Bike> > (\u v -> ((u+v)-u)+((u+v)-((u+v)-u))) (3.79::Double) (14::Double)
06:02:07 <Bike> > (\u v -> ((u+v)-u)+((u+v)-((u+v)-u))) (-4818::Double) (.3::Double)
06:02:08 <lambdabot> <hint>:1:58: parse error on input `::'
06:02:56 <Bike> i think one success and one parse error counts as a proof
06:03:14 -!- FreeFull has quit.
06:03:38 <Bike> relatedly, haskell doesn't allow .whatever, huh.
06:04:12 <Bike> are you some kind of decimal paladin, shachaf
06:04:56 <Bike> > (\u v -> ((u+v)-u)+((u+v)-((u+v)-u))) (-4818::Double) (0.3::Double) anyway this one works too
06:04:58 <lambdabot> Not in scope: `anyway'Not in scope: `this'Not in scope: `one'
06:05:10 <Bike> or would if i understood how lambdabot's parsey cutoff thing wored, which I don't.
06:05:17 <oerjan> for a certain value of works.
06:05:27 <shachaf> Bike: It doesn't actually do a cutoff thing.
06:05:28 <Bike> considering what "decimate" means it's appropriate, I think
06:05:45 <Bike> So what's with the > 3 4 thing.
06:05:57 <Bike> > (\u v -> ((u+v)-u)+((u+v)-((u+v)-u))) (-4818::Double) (0.3::Double) -- sing a song
06:06:01 <lambdabot> Could not deduce (GHC.Num.Num (a0 -> t))
06:06:01 <lambdabot> arising from the ambiguity chec...
06:06:02 <oerjan> Bike: that's not parsing, that's type hackery
06:06:22 <lambdabot> Could not deduce (GHC.Num.Num (a0 -> t))
06:06:22 <lambdabot> arising from the ambiguity chec...
06:06:29 <oerjan> what did shachaf do now.
06:06:30 <Bike> well, i'm confused now, but it's a lambdabot confusion and not a haskell confusion, so i'm gonna go ahead and not care
06:06:45 <shachaf> Bike: I got Cale to change it back to normal.
06:06:52 <shachaf> So now lambdabot is just a little more normal.
06:06:58 <lambdabot> Functor f => (a -> b) -> f a -> f b
06:07:28 <Bike> so, why's this channel use such an apparently weird evalbot (speaking of which i thought dot was compose, why would it be fmap)
06:07:49 * oerjan belatedly swats shachaf for the base ten pun -----###
06:08:44 <oerjan> Bike: fmap = (.) for functions.
06:09:00 <shachaf> Bike: Mapping a function over the result of another function is like composing the two functions.
06:09:00 <oerjan> so it's a simple generalization.
06:09:22 <Bike> ugh, and here i was thinking i almost maybe understood functors
06:10:15 <Bike> "(((u+v)-v)+v)-v = (u+v)-v" anyway all of knuth's identities here kind of suck
06:11:11 <oerjan> Bike: just wait until you learn how functions are a Monad.
06:11:13 <Bike> oh, and that's only even valid for certain rounding modes. lovely.
06:11:40 <Bike> they're monads because they're functors and they form a monoid, right
06:12:17 <Bike> look when i say something stupid you can say "that's fucking stupid", it'll do me more good than some ellipses
06:12:51 -!- TeruFSX has quit (Quit: Leaving).
06:13:25 <oerjan> > (do x <- sin; y <- cos; return (x^2+y^2)) 42
06:14:14 <Bike> any particular reason you wrote that as a sequence instead of just an expression?
06:15:48 <shachaf> Do demonstrate what was going on with (r ->)
06:15:52 <oerjan> > liftM2(+)((^2)<$>sin)((^2)<$>cos) 42 -- OKAY
06:16:36 <Bike> i was just wondering if using the extra variables was supposed to fuck up accuracy or something
06:17:03 <oerjan> this was not a float demonstration, it was a function monad demonstration.
06:17:36 <Bike> oh, wow. i really fucked that up!
06:18:02 <fizzie> > (sin >>= \x -> cos >>= \y -> return (x^2+y^2)) 42 -- see, it's much clearer if you don't involve a "do" in it
06:20:25 -!- Sgeo|web_ has joined.
06:20:33 <Bike> muh, in local ghci the do thing doesn't work, says functions aren't a monad I think
06:20:44 <shachaf> :m + Control.Monad.Instances
06:21:31 <Bike> oh my, it's a full version number behind the one y'all yelled at gregor bout earlier.
06:21:42 -!- Sgeo|web has quit (Ping timeout: 245 seconds).
06:22:38 <shachaf> monqy: "not the same thing"
06:22:47 <monqy> "almost the same thing"
06:23:05 <monqy> or are you doing something wacky here......
06:23:33 <Bike> "The Monad.Reader is an electronic magazine about all things Haskell. It is less formal than journal, but more enduring than a wiki-page or blog post" cool
06:25:06 -!- Yonkie has joined.
07:28:09 -!- epicmonkey has joined.
07:31:59 -!- oklopol has joined.
07:51:01 <Jafet> > (1 - 1e-18) ** 6e16
07:51:20 <Jafet> > exp (- 6e16 * 1e-18)
07:56:50 -!- Arc_Koen has quit (Quit: Arc_Koen).
08:11:00 -!- Nisstyre-laptop has quit (Ping timeout: 264 seconds).
08:11:53 -!- Yonkie has quit (Ping timeout: 252 seconds).
08:12:18 -!- epicmonkey has quit (Ping timeout: 250 seconds).
08:23:02 -!- GreyKnight has joined.
08:25:45 <Sgeo|web_> http://www.undefined.net/1/0/?strip=562
08:26:05 <Sgeo|web_> A spiral pattern that,,, also... has another form of movement
08:26:12 <Sgeo|web_> Should be sufficient for him to escape eventually
08:26:46 <Sgeo|web_> Hmm, although might be difficult to do that while panicky and scared and no reference points
08:28:19 <GreyKnight> So he could escape as long as the featureless white plain has a feature on it? :v
08:29:58 <Sgeo|web_> The idea is that he would go down into it to see how far down it goes
08:30:40 <GreyKnight> I was just wondering if I might've misread
08:31:08 <GreyKnight> (In fact you even used the word "movement")
08:31:42 <oerjan> living humans have trouble walking in a straight line without a reference point.
08:32:03 <Sgeo|web_> But if the spiral happened to be horizontal, it wouldn't work, so would also need... another direction of movement too
08:32:19 <Bike> so what you're saying is he needs to ballet through hell.
08:32:25 <oerjan> he wouldn't have a way of ensuring that he was actually moving in a spiral.
08:32:27 -!- nooga has joined.
08:33:13 <oerjan> otoh pure random movement _should_ get him back to the surface eventually :P
08:34:10 <Bike> living humans are bad at randomness too! gosh, we're so incompetent.
08:34:14 <GreyKnight> "You'll probably get back in finite time! What are you complaining about?!"
08:35:00 <Bike> wait shit wasn't he an electron
08:35:07 <Bike> they're not half bad at random
08:35:40 <shachaf> GreyKnight: Uh... oerjan does the swatting around here.
08:36:49 <Bike> hm, i wonder. in three dimensions random motion will get you away and all, but what about the direction? if hell extends infinitely downwards would he still be stuck there forever?
08:40:58 <oerjan> random motion will get you back along any one or two axes, so he should get back to the surface.
08:41:30 <oerjan> although probably not at the same point, but he can just go randomly along the surface.
08:41:54 <GreyKnight> Thus reducing the problem to a 2D random walk :-)
08:42:18 -!- GreyKnight has quit (Quit: brb).
08:42:25 <shachaf> Sgeo|web_: I was getting addicted to not knowing what you were addicted to.
08:42:28 <Bike> but then he'll return to his starting point!
08:42:29 <shachaf> But now I'm having withdrawal.
08:42:46 <oerjan> Bike: i thought that was the idea
08:42:56 <Bike> I mean, his starting point for eruption from the surface.
08:43:10 <oerjan> sure, as well as to any other point on the surface.
08:43:28 <Bike> he should just fly up and look.
08:43:31 <Sgeo|web_> fwiw, there's a large dead bear that's been converted into dirt on the surface
08:43:40 <oerjan> ...that sounds like a better idea XD
08:43:55 <Bike> dead bears are always a good idea.
08:43:58 -!- GreyKnight has joined.
08:44:32 <GreyKnight> Sgeo|web_: so you thought you'd come and get us (re)addicted too? THANKS
08:45:42 <Bike> obviously what we need is tailsteak's hamsteaks fanart instead
08:50:49 <Bike> > signum (1/0)
08:51:04 <Bike> that seems bad.
08:51:25 <oerjan> i'd assume that's correct ieee behavior?
08:52:33 <Bike> hm, so it is. bother bother
08:52:57 <GreyKnight> So it goes to float because of the infinity?
08:53:11 <Bike> :t signum (1/0)
08:53:27 <Bike> is that a float? i thought i just learned it was just a rational
08:54:18 <Bike> > (0 :+ 1) / 0
08:54:35 <oerjan> it's a Double. Rational is just the type used for interpreting decimal notation _before_ converting it to the actual type.
08:54:55 <Bike> > (1 :+ 1) / 0
08:55:19 <Bike> L is so overrated
08:55:23 <oerjan> the default default declaration is "default (Integer, Double)"
08:55:28 <lambdabot> Not in scope: data constructor `NaN'
08:55:45 <Deewiant> > map signum [1/0, -1/0, 0/0, -0/0]
08:55:47 <oerjan> except sometimes it's "default ((), Integer, Double)"
08:56:14 <Bike> > signum (-0/0) -- negative 1, hopefully
08:56:27 <oerjan> that L.hs message is essentially just a lambdabot race condition of some sort.
08:56:32 <GreyKnight> (Well, I had after the discussion above, but not previously)
08:56:45 <lambdabot> cannot mix `GHC.Real./' [infixl 7] and prefix...
08:57:48 <oerjan> wait, nan's have well-defined signs?
08:58:01 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
08:58:21 <Bike> don't think so?
08:59:04 <fizzie> IEEE nans do have signs.
08:59:10 <Deewiant> Alas, 0/0 seems to produce a negative NaN.
08:59:22 <fizzie> Whether it's "well-defined" is another matter.
08:59:45 <oerjan> it's conceivable it is comparing it to 0 in haskell
08:59:59 <oerjan> rather than using whatever the C function is
09:00:44 <lambdabot> Source not found. I feel much better now.
09:00:52 <GreyKnight> Okay, so 2/2 evaluates to a Fractional because Haskell doesn't want to have two possible result types for (/)
09:00:57 -!- Bike has quit (Quit: leaving).
09:01:02 <Deewiant> But signbit seems to give 128 for both 0.0/0 and -0.0/0 here.
09:01:27 <oerjan> GreyKnight: um Fractional isn't a type, it's a type class. there are several types it can give.
09:01:57 <shachaf> This is the best type class:
09:01:58 <lambdabot> class (Num a, Ord a) => Real a where
09:02:02 <GreyKnight> (Told you I wasn't very good at Haskell :v)
09:04:43 <GreyKnight> I am just trying to figure out why 2/2 doesn't end up as an integer
09:05:09 <oerjan> because Integer isn't a member of the Fractional type class
09:05:09 <Deewiant> Because of the type of (/) you looked at earlier.
09:05:43 <oerjan> that's integral division
09:06:15 <oerjan> > 2 `quot` 2 -- or this, different on ne... dammit Deewiant
09:06:32 <GreyKnight> Okay, so I was on the right track, just s/type/type class/ :-P
09:07:41 <oerjan> making things polymorphic over different number types was one of the main original reasons type classes were invented. then they found fancier uses.
09:11:46 <fizzie> 0xffffffff is the NaNniest (single-precision) NaN.
09:12:30 <shachaf> Do you people even read that thing?
09:14:12 -!- Yonkie has joined.
09:15:24 <fizzie> For the record, at least my ghci's signum does not actually look at the sign bit; http://sprunge.us/eUPP -- all NaNs are negative.
09:16:25 <shachaf> signum x | x == 0.0 = 0 | x > 0.0 = 1 | otherwise = negate 1
09:16:50 <Deewiant> fizzie: Methinks you're doing it wrong, or then my libc is also doing it wrong.
09:17:19 <shachaf> That's the Report's definition, of course.
09:17:45 <Deewiant> fizzie: Scratch that, I was doing it wrong.
09:19:44 <fizzie> Deewiant: http://sprunge.us/hfiP -- it even prints as -nan.
09:20:39 <Deewiant> Using 'unsigned long long' like that is also doing it somewhat wrong, though it doesn't seem to matter there.
09:21:19 -!- GreyKnight has quit (Quit: bbl).
09:22:39 <fizzie> What else except the usual things (not exactly defined representations for either unsigned long long or double) is wrong with it?
09:23:17 <fizzie> (I would've used uint64_t but was writing it in cat > tmp.c and hadn't remembered to #include <stdint.h>.)
09:24:09 <Deewiant> Hmm, I thought at least C11 would've mandated IEEE 754 but I guess not.
09:24:26 -!- epicmonkey has joined.
09:24:50 <Deewiant> In that case it's a crapshoot anyway. I thought 'double' would be guaranteed 64 bits.
09:24:55 -!- epicmonkey has quit (Remote host closed the connection).
09:25:32 <fizzie> I *could've* added #ifndef __STDC_IEC_559__ #error "uh what are you *on* there?" #endif to it.
09:26:12 <Deewiant> You still need uint64_t, making sure its sizeof is 8 and CHAR_BIT is 8.
09:26:37 <fizzie> I don't think I need those last two.
09:26:42 <Deewiant> Or I guess you can be CHAR_BIT agnostic as long as uint64_t is an exact multiple of it.
09:26:54 <Deewiant> Doesn't that avoid padding bits? Or are those included in CHAR_BIT.
09:27:16 <fizzie> uint64_t cannot have padding.
09:27:31 <Deewiant> Oh, that's mandated? Well that's convenient.
09:27:37 <fizzie> If it exists at all, it must be a multiple of CHAR_BIT.
09:27:44 <fizzie> It's not mandated to exist, though. :p
09:28:02 <Deewiant> Right, but if it doesn't it's a compilation error so that's fine.
09:28:24 <fizzie> I also don't think even __STDC_IEC_559__ mandates that byte order needs to be the same for 'double' and 'uint64_t', which would be an issue for the few systems where CHAR_BIT < 64.
09:28:51 -!- Yonkie has quit (Ping timeout: 276 seconds).
09:30:00 <Deewiant> 'double' in that case has a known order, though, so you just need to write your integer rightly.
09:31:56 <fizzie> (Two's-complement is also mandated for the fixed-width intN_t, for the record.)
09:34:50 -!- Yonkie has joined.
09:35:27 <fizzie> "The coin toss is the most platykurtic distribution" -- that's an awesome word.
09:37:14 <fizzie> Platykurtic platypus. (An Ubuntu code name?)
09:37:27 <Yonkie> vote for ubuntu, let's submit idea to them
09:37:38 <fizzie> Maybe for their next go-around; they already did a P.
09:40:15 <fizzie> Hrm. I reloaded the webmail, and the page was replaced by an otherwise-empty page except for the words "The custom error module does not recognize this error."
09:44:51 <Sgeo|web_> Help I slept for around 8 hours during the day and I can't seem to fall asleep now
09:45:10 <Sgeo|web_> Although I have a 4 page essay due on Tuesday and had plans to spend Monday working on it
09:48:04 -!- oerjan has quit (Quit: Sleep? What a ridiculous concept.).
09:55:52 -!- epicmonkey has joined.
09:57:06 -!- epicmonkey has quit (Remote host closed the connection).
10:07:31 <hagb4rd> sgeo: you could start working on it now, till you get tired
10:08:05 <hagb4rd> the best method to get sleepy is still to try staying awake
10:12:31 -!- epicmonkey has joined.
10:13:00 -!- epicmonkey has quit (Remote host closed the connection).
10:29:06 -!- micahjoh1ston has joined.
10:29:09 -!- nortti_ has joined.
10:29:23 -!- elliott_ has joined.
10:31:51 -!- augur_ has joined.
10:34:02 -!- augur has quit (*.net *.split).
10:34:02 -!- ion has quit (*.net *.split).
10:34:02 -!- elliott has quit (*.net *.split).
10:34:02 -!- nortti has quit (*.net *.split).
10:34:02 -!- micahjohnston has quit (*.net *.split).
10:41:20 -!- ion has joined.
10:43:07 -!- epicmonkey has joined.
10:44:57 -!- epicmonkey has quit (Remote host closed the connection).
10:49:00 -!- copumpkin has joined.
10:55:04 -!- epicmonkey has joined.
11:06:02 -!- evitable has joined.
11:11:50 -!- yiyus_ has changed nick to yiyus.
12:06:54 -!- Jafet has quit (Ping timeout: 240 seconds).
12:07:22 -!- Jafet has joined.
12:19:13 <fizzie> @tell zz038 Remember when you wanted { union { float f; unsigned u; }; f = 1.0f; dosomething(u); } be valid C, or at least a GCC extension? Turns out it in fact *is* valid C++.
12:21:28 -!- nortti_ has changed nick to nortti.
12:22:09 <fizzie> "An union of the form [thing like that] is an anonymous union. -- For the purposes of name lookup, the members of the anonymous union are considered to have been defined in the scope in which the anonymous union is declared."
12:22:52 <shachaf> Oh, I thought you meant using one value of the union after setting a different one.
12:23:06 <fizzie> It even gives an example of void f() { union { int a; char *p; }; a = 1; p = "Jennifer"; } "Here a and p are used like ordinary (nonmember) variables, but since they are union members they have the same address."
12:24:00 <fizzie> No, just the scoping; but using one value after setting a different one is legal C99 and C11, assuming reinterpreting the representation does not end up with a trap representation. (Don't know about C++ in that case.)
12:27:00 <fizzie> (Ref. C11 footnote 95: "If the member used to read the contents of a union object is not the same as the member last used to store a value in the object, the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type as described in 6.2.6 (a process sometimes called ‘‘type punning’’). This might be a trap representation." ...
12:27:06 <fizzie> ... Footnotes are non-normative, but the footnote is the only thing they added (in C99 TC-something, I think), so clearly they believe it's already deducible from the normative text. C99 did remove the explicit mention of it being undefined that C89 had.)
12:27:52 <shachaf> Oh, C89 is the one true C.
12:29:10 <fizzie> shachaf: http://www.iso.org/iso/catalogue_detail.htm?csnumber=17782 "Status: X Withdrawn"
12:30:13 -!- SingingBoyo has quit (Ping timeout: 248 seconds).
12:31:18 -!- epicmonkey has quit (Ping timeout: 264 seconds).
12:33:03 <fizzie> Maybe I should clarify, though.
12:33:08 <fizzie> @tell zzo38 That is, the name lookup is done the way you wanted, with the members being considered defined in the scope in which the union is declared. I have not checked whether C++ makes it undefined to read an union member that was not the one last written to.
12:38:06 -!- Sgeo|web has joined.
12:41:18 -!- Sgeo|web_ has quit (Ping timeout: 245 seconds).
12:45:47 -!- epicmonkey has joined.
12:54:57 -!- sebbu has quit (Read error: Connection reset by peer).
12:55:26 -!- sebbu has joined.
12:56:57 -!- boily has joined.
13:01:32 -!- carado has joined.
13:33:59 -!- ion has quit (Ping timeout: 240 seconds).
13:34:42 -!- ion has joined.
13:50:40 -!- variable has quit (Ping timeout: 240 seconds).
13:51:09 -!- variable has joined.
14:01:35 -!- augur_ has quit (Remote host closed the connection).
14:29:18 -!- epicmonkey has quit (Ping timeout: 252 seconds).
14:32:19 -!- augur has joined.
14:55:16 -!- evitable has quit (Ping timeout: 245 seconds).
15:24:23 -!- FreeFull has joined.
15:27:14 -!- Taneb has joined.
15:31:39 -!- ogrom has joined.
15:31:57 <Taneb> But yeah, I've had about 120% of my recommended daily sugar intake in the past 5 minutes
15:34:14 <Taneb> And I'm not good at sugar
15:34:28 <kmc> why did you do a thing like that
15:34:52 <Taneb> I really fancied some coke
15:35:16 <Taneb> And now this 1.5L bottle is 2/3 empty
15:35:31 * Fiora prepares the insulin shots
15:37:10 <Taneb> I probably ought to modernize the family-tree library I wrote
15:39:42 <Taneb> Except I don't have Cabal here
15:40:26 <fizzie> I've heard there is no cabal.
15:40:57 <Taneb> Which will certainly explain why it isn't here
15:41:17 <Taneb> It's going to get creepy here soon
15:41:26 <Taneb> Like, deserted school creepy
15:43:16 -!- mroman has quit (Ping timeout: 240 seconds).
15:43:19 -!- Sgeo|school has joined.
15:43:23 -!- mroman has joined.
15:43:35 <Sgeo|school> I'm suddenly having visions of code I write being used by tryclj.com
15:44:07 <kmc> Sgeo|school joins and immediately says something about clojure
15:44:08 <kmc> take a shot
15:44:23 <Taneb> kmc, but I've already had too much coke!
15:44:30 <Taneb> And I don't have a shot glass
15:44:36 <kmc> alcohol balances out sugar/caffeine, everyone knows that
15:44:42 <kmc> [nb: not actually true]
15:46:12 <Fiora> if my experience generalizes I can imagine you conking out in about 1 hour :P
15:46:42 <Taneb> Okay, that will give me 17 minutes to wake up again
15:47:15 -!- elliott_ has changed nick to elliott.
15:51:24 -!- Sgeo|school has quit (Quit: Page closed).
15:53:50 -!- elliott has set topic: apparently people did dumb things to the topic so here's a new one http://codu.org/logs/_esoteric/.
16:00:36 -!- FreeFull has set topic: apparently people did dumb things to the topic so here's a new one | Why not just have +t | http://codu.org/logs/_esoteric/.
16:07:52 -!- elliott has set topic: apparently people did dumb things to the topic so here's a new one http://codu.org/logs/_esoteric/.
16:08:26 <elliott> `run echo -e '\003 14test'
16:09:33 <monqy> 3 according to a thing i found online
16:11:06 <elliott> how'd i do \003 without the 1 getting included after tho
16:11:10 <elliott> if only this was haskell and i had \&
16:12:23 <monqy> `run echo -e '\000314test'
16:16:27 <Fiora> http://www.extremetech.com/computing/142881-ibm-creates-first-cheap-commercially-viable-silicon-nanophotonic-chip hmm, nanophotonics
16:17:34 <lambdabot> No instance for (GHC.Num.Num (GHC.Types.Int, GHC.Types.Int))
16:17:51 <monqy> was did there used to be an instance
16:26:08 <elliott> `run hg diff -c 1002 | patch
16:26:12 <HackEgo> patching file quotes \ Reversed (or previously applied) patch detected! Assume -R? [n] \ Apply anyway? [n] \ Skipping patch. \ 1 out of 1 hunk ignored -- saving rejects to file quotes.rej
16:26:28 <elliott> `run hg diff -c 1002 | patch -R
16:26:51 <HackEgo> changeset: 1017:b1a219757d6a \ tag: tip \ user: HackBot \ date: Mon Dec 10 16:26:33 2012 +0000 \ summary: <elliott> hg diff -c 1002 | patch -R \ \ changeset: 1016:e960263d7a5f \ user: HackBot \ date: Mon Dec 10 16:26:27 2012 +0000 \ summary: <elliott> rm quotes.rej \ \ changeset: 1015:1cef8e6fa7e9
16:31:36 <elliott> Gregor: oh right I was going to ask if hackego could support ansi colours but it already does???
16:31:54 <Gregor> The only characters it rejects now are \x00 and \x01.
16:32:06 <elliott> you should remove the dumb botloo pprefix thing imho
16:32:12 <Gregor> I keep forgetting what we're talking about.
16:32:26 <Gregor> ANSI colors it doesn't filter, but it's not like they'll work for most IRC clients.
16:32:49 <Taneb> Don't remove the botloo prefix!
16:32:59 <Taneb> We'll end up with botpoo all over the channel
16:34:36 -!- Arc_Koen has joined.
16:35:12 <elliott> Gregor: right I meant mIRC
16:35:17 <elliott> Gregor: P.S. please remove the botloop thing it's so dumb
16:49:53 <elliott> ok but how about change your mind
16:50:14 <Gregor> I'll CONSIDER scheduling a change of heart.
17:04:13 -!- Taneb has quit (Ping timeout: 245 seconds).
17:06:02 -!- sebbu has quit (Read error: Connection reset by peer).
17:06:29 -!- sebbu has joined.
17:10:09 -!- nooga has quit (Ping timeout: 252 seconds).
17:23:00 -!- GreyKnight has joined.
17:44:50 <GreyKnight> headache + train with screeching brakes = headache^2
17:50:37 -!- nooga has joined.
17:58:11 -!- nooga has quit (Ping timeout: 252 seconds).
18:02:17 -!- Bike has joined.
18:34:23 <hagb4rd> hm..headache + train with no screeching brakes = no head
18:36:30 <hagb4rd> but i guess i know what you're talking about.. have some trails directly in front of my window
18:36:43 <hagb4rd> just waiting for the right train to jump on
18:39:44 -!- Phantom_Hoover has joined.
18:45:28 <lambdabot> <cbeust_> says: Looks more like lenses reinvented Java Beans.
18:46:03 <elliott> @forget <cbeust_> Looks more like lenses reinvented Java Beans.
18:46:27 <nortti> does anyone here know where to find gcc 0.9 or 1.0?
18:47:45 <elliott> depends on how much haskell you know
18:47:58 <GreyKnight> All I know is they have something to do with getting a stab
18:51:13 -!- Phantom__Hoover has joined.
18:51:36 <elliott> do you know about functors and applicative functors
18:54:02 <shachaf> You don't need to "know about functors and applicative functors" to understand lenses.
18:54:16 <elliott> you need to know about fucntors and applicative functors to understand lens
18:54:18 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
18:54:24 <elliott> maybe GreyKnight was referring to lenses in general though
18:55:41 <GreyKnight> Hm I did not know there was a difference
18:56:36 <elliott> well you can think of a lens from a to b as a getter and setter pair
18:57:03 <elliott> you have (a,b) -> b, (a,b) -> b -> (a,b)
18:57:24 <elliott> so you have a SimpleLens (a,b) b
18:57:47 <elliott> that's all there is to regular old lenses, really
18:57:57 <elliott> plus some obvious laws like get (set x y) = y
18:58:14 <elliott> you can, e.g. create a lens for each field of a record, which can both get the value in that field from a record and set it to something else
18:58:29 <GreyKnight> Does the name "lens" have some significance I'm not grasping?
18:58:46 <elliott> data SomeRecord = SomeRecord { a :: Int, b :: Int }
18:58:56 <elliott> data SomeRecord = SomeRecord { a :: (Int,Int), b :: Int }
18:59:25 <elliott> let's say you have a lens for the a field of that record (here you have get rec = a rec; set rec newA = rec { a = NewA })
18:59:36 <elliott> you can compose that with the lens for the second element of a tuple (which I showed above)
19:00:05 <elliott> and get the resulting lens acts like: get (SomeRecord { a = (1,2), b = 3 }) --> 2
19:00:19 <elliott> set (SomeRecord { a = (1,2), b = 3 }) 4 = SomeRecord { a = (1,4), b = 3 }
19:00:42 <elliott> you can just use this representation: data Lens a b = Lens { get :: a -> b, set :: a -> b -> a }
19:00:52 <elliott> then get :: Lens a b -> a -> b, set :: Lens a b -> a -> b -> a
19:01:18 <GreyKnight> And presumably you could construct lenses to access the other Ints in SomeRecord in the obvious fashion
19:01:26 <shachaf> GreyKnight: It lets you "focus" on some particular part of a structure.
19:01:44 <hagb4rd> or just any computed function of that field..right?
19:01:50 <elliott> compose :: Lens a b -> Lens b c -> Lens a c; compose lens1 lens2 = Lens { get = \x -> get lens2 (get lens1 x); set = \x y -> ...try writing this... }
19:01:57 <elliott> (I want you to try writing it because I'm too lazy to.)
19:02:03 <kmc> shachaf: my new laptop has shipped after all
19:02:08 <kmc> and the charge is back on the card
19:02:10 <kmc> so no free laptop :(
19:02:25 <elliott> Anyway the lens library itself uses the same basic ideas, but it uses a fancier representation that lets you write a lot of operations on them more nicely and compose them more conveniently and stuff.
19:02:48 <elliott> But lenses in general are very simple, you can just think of them as a getter-setter pair.
19:03:59 <elliott> if a lens is: (a -> b, a -> b -> a), you can think of a prism as: (b -> a, a -> Maybe b)
19:04:05 <elliott> they're actually more closely related than it looks
19:04:17 <elliott> but showing that involves slightly more complicated types
19:04:33 <elliott> a prism is basically a first class "constructor"... you can put a value in a constructor and possibly take it out
19:04:37 <elliott> data Foo = A Int | B String
19:04:42 <elliott> you have Prism Foo Int, Prism Foo String
19:04:53 <elliott> (A, \x -> case x of A y -> Just y; _ -> Nothing)
19:04:59 <elliott> and (B, \x _> case x of B y -> Just y; _ -> Nothing) respectively
19:06:38 <GreyKnight> Hm how come prisms use a -> Maybe b whereas lenses use a -> b ?
19:07:18 <elliott> you can't really see that they're related with those definitions
19:07:41 <GreyKnight> Lost my train of thought, stupid headache
19:08:27 <hagb4rd> yea, it's still not clear but thank for the kickstart elliott
19:09:05 <hagb4rd> at least i have basic idea now
19:09:30 <GreyKnight> Also they really do look like Haskell's answer to JavaBeans :-)
19:10:01 -!- nooga has joined.
19:10:50 <hagb4rd> they seem to be the fashion of this winter
19:11:19 <kmc> tomorrow is the ceremonial ground breaking on the boston Green Line Extension
19:11:45 <kmc> they are going to spend 7 years and one billion dollars to extend an existing light rail line about 6km along an existing rail corridor
19:12:03 <kmc> assuming there are no additional delays or cost overruns, of course
19:14:24 -!- monqy has quit (Quit: hello).
19:14:53 -!- GreyKnight has changed nick to apparently.
19:15:13 -!- apparently has changed nick to GreyKnight.
19:17:24 -!- nooga_ has joined.
19:20:54 -!- nooga has quit (Ping timeout: 256 seconds).
19:21:19 <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
19:26:00 -!- nooga_ has quit (Ping timeout: 256 seconds).
19:26:00 <GreyKnight> Hm we have Lens and Prism... what about Mirror?
19:26:23 <GreyKnight> It could implement reflection-like abilities :-)
19:27:00 * elliott sort of likes the idea of renaming Iso to Mirror
19:27:12 <elliott> it avoids the abbreviation and analogises well with Lens/Prism
19:28:54 <hagb4rd> we should talk with the marketing guys to change this
19:34:06 <hagb4rd> anyway..you may swat me hard, i'm still not really convinced haskell could be used to implement bigger software projects.. at least while not employing a bunch of scientists as programmers
19:34:25 <kmc> i think the 'lens' logo should be http://upload.wikimedia.org/wikipedia/en/thumb/3/3b/Dark_Side_of_the_Moon.png/220px-Dark_Side_of_the_Moon.png
19:35:45 <elliott> Haskell is already used to implement bigger software projects by non-scientists though
19:35:53 <elliott> so your claim is too absurd to even need rebutting
19:38:41 <hagb4rd> the reference list litarature is a small time
19:41:10 <hagb4rd> elliott are you a student of computer science or sth?
19:41:18 <arcatan> personally, i'm not really convinced c++ could be used to implement bigger software projects...
19:41:40 <kmc> i'm not really convinced that bigger software projects can be implemented
19:41:48 <elliott> hagb4rd: depends on your definition of "student"
19:42:01 <arcatan> on second thought, yes, kmc, i'm not convinced of that either
19:42:04 <elliott> I think the idea of implementing bigger software projects in C is more unthinkable than doing so in Haskell anyway, and evidently that happens
19:43:58 <hagb4rd> no i'm really not into some religious war or sth..it's just that 70 to 80 percent of software-costs is mostly spent on maintance
19:44:18 <hagb4rd> and the code i've seen so far seems not be easy maintained
19:44:49 <elliott> and your average Haskell program can well be more easily maintainable than your average C program, assuming competent people for both tasks
19:45:16 <elliott> it is very easy to get lots of things wrong in C that just aren't possible to get wrong in Haskell, and experts get these things wrong all the time
19:45:22 <elliott> hence the existence of segfaults for reasons other than compiler bugs
19:45:22 <olsner> this discussion is quite elucidating
19:48:27 <hagb4rd> yep the experts you are talking about are at first not easy to get, and for this reason not very cheap.. i guess the technique u choose to implement a software solution cannot be decided in general for all time
19:50:10 <kmc> it's not impossible to get those things wrong in haskell either
19:50:31 <kmc> but you are only exposed to those errors in a small subset of the code you write
19:50:42 <elliott> kmc: well it is impossible for a Haskell 2010 program, compiled with a non-buggy compiler, that does not use the FFI, to segfault
19:50:59 <kmc> sure but real programs use the FFI
19:51:03 <elliott> admittedly, those conditions are not usually true
19:51:12 <elliott> but it's nothing compared to the fact that a C program uses the FFI every line :p
19:52:21 <Deewiant> It is quite possible for said Haskell 2010 program to terminate saying e.g. "head: empty list" or "fromJust: Nothing"
19:52:46 <Deewiant> Which is hardly better than a segfault
19:52:53 <Gregor> This is why I think JavaScript made a mistake in not letting you dereference or call undefined.
19:52:54 <kmc> it is better
19:53:01 <elliott> Deewiant: that is better in several ways
19:53:10 <Gregor> If they'd just made those return undefined, then it would barrel on endlessly no matter what you did :)
19:53:11 <kmc> a segfault is just a lucky outcome of undefined behavior
19:53:15 <elliott> for one, there is no security risk
19:53:22 <elliott> at least not the kind segfaults imply
19:53:41 <Deewiant> Right, that can matter in some contexts
19:53:47 <elliott> for two, you know that program will always output that under those conditions -- it is "reasonable behaviour", not just stuff going wrong
19:54:01 <elliott> for three you get a useful error message :P
19:54:16 <elliott> of course, that doesn't mean partial functions are a good thing
19:54:22 <elliott> but they're a lot less bad of a thing
19:54:39 <kmc> it's weird to pick Haskell as the exemplar memory safe language
19:54:56 <Deewiant> Re. two: in practice you usually know the other program will always segfault as well :-P
19:55:02 <elliott> I was just using memory unsafety as an obvious, universal example of something C does really badly
19:55:05 <kmc> no no no no no no
19:55:09 <kmc> Deewiant: no no no no no no no
19:55:34 <hagb4rd> last but not least if youthe everyday software programming is that sophisticated.. (it's almost boring) as many of
19:55:34 <arcatan> i wonder what are the biggest headaches experienced by the real maintenance programmers working on e.g. C++ or Java projects
19:55:37 <olsner> elliott: C does unsafety very *well*, you mean?
19:55:40 <kmc> a segfault is a lucky outcome of undefined behavior
19:55:43 <kmc> sometimes you don't get lucky
19:55:48 <arcatan> and how much programming language features affect that
19:56:08 <kmc> sometimes you get slightly wrong results
19:56:12 <kmc> sometimes you get permanent data corruption
19:56:17 <kmc> sometimes you get exploitable security holes
19:56:19 <Deewiant> kmc: In practice if it segfaulted once it usually will segfault the second time as well
19:56:27 <Deewiant> Or I don't know, usually in my programs
19:56:28 <kmc> C programmers who treat segfaults as the worst case outcome scare the fuck out of me
19:56:44 <kmc> sure "usually" meaning 99% of the time
19:56:50 <kmc> but now run that program in production for 10 years
19:56:55 <kmc> and also expose it to adversarial attackers
19:57:02 <kmc> some weird shit will happen
19:57:12 * elliott bets that 99% is more like 50% in the presence of pthreads.
19:57:12 <Deewiant> That's a situation I wouldn't want to put a C program in
19:57:30 <kmc> so you would not use C in production or for anything with security requirements
19:57:30 <elliott> Deewiant: sounds like an argument Haskell's failure conditions are better
19:57:31 <Deewiant> Re. three: there are more tools for finding the cause of segfaults than for "fromJust: Nothing" :-P
19:57:40 <Deewiant> elliott: I'd say it's situational
19:57:59 <Deewiant> Sometimes you care about not segfaulting, sometimes it's not that big a deal
19:58:11 <Deewiant> not having the possibility of segfault*
19:58:20 <kmc> again "segfault" is the symptom and it's the mildest of all symptom
19:58:31 <Deewiant> I'm not disagreeing with you on that
19:58:33 <elliott> if a segfault isn't a problem I don't see how head [] can be
19:58:35 <kmc> it's like if i said it's ok to get AIDS because having a cough is not so bad
19:58:53 <kmc> hella sequitur
19:58:56 <hagb4rd> exactly.. i'm sure haskell has its advatages.. in many use cases
19:59:09 <elliott> can we just say "invalid memory access" instead of "segfault" instead
19:59:19 <Deewiant> elliott: I'd rather see a C segfault than a Haskell 'head []' when developing something unless GHC's debugging facilities have improved to the point that I can find the latter quickly
19:59:30 <elliott> you can use -xc to get a backtrace these days
19:59:48 <elliott> another point is that it's a lot easier to write Haskell that doesn't use partial functions than it is to write a C program that has no risk of segfault
19:59:48 <kmc> it's a RTS flag
20:00:04 <Deewiant> ghc: the flag -xc requires the program to be built with -prof
20:00:16 <Deewiant> That's a bit annoying but oh well
20:00:24 <kmc> again it's weird that this discussion of memory safety is "C vs Haskell" and not "C vs almost every other language"
20:00:36 <elliott> well it was a C vs. Haskell thing
20:00:42 <kmc> i agree that GHC's debugging and error-finding tools are shitty
20:00:44 <elliott> just the subject ate the ject
20:00:53 <elliott> originally said the subsubject ate the subject but decided that was redundant
20:00:55 <Deewiant> elliott: And yes, it is, but it's not easy :-P Now you have to be very careful about all library code etc
20:00:58 <arcatan> if we're still talking about long-term software projects started today, I don't think that C will be the language of choice for many of them
20:01:09 <kmc> a lot of Haskell tools suck even though these problems should be easier in Haskell
20:01:12 <kmc> just because it is a niche language
20:01:12 <elliott> Deewiant: I'm like 10x more paranoid of C libraries than Haskell libraries
20:01:57 <Deewiant> kmc: Right, much (all? I forget) of my argument regards the tooling
20:02:14 <Deewiant> elliott: Sure, I didn't say C is any easier :-)
20:02:51 -!- ogrom has quit (Read error: Connection reset by peer).
20:04:13 -!- Sgeo|web has quit (Ping timeout: 245 seconds).
20:04:32 <elliott> anyway I would rather maintain a badly-written Haskell program than a badly-written C program at the very least
20:05:12 <kmc> i don't necessarily agree with that elliott
20:05:32 <Deewiant> If they're equally large, I'm not so sure either
20:05:59 <kmc> my idea of a badly-written Haskell program is that 10 people worked on it, and each one thought they were super clever, but also fundamentally misunderstood at least one aspect of the language
20:06:13 <kmc> and so it will be full of excessively clever things that don't quite make sense and don't fit together
20:06:27 <kmc> in other words more like C++ than C
20:07:12 <kmc> C has a lot of problems and badly written C code is a nightmare, but it doesn't have this problem in particular
20:07:17 <kmc> it does depend on context though
20:07:41 <kmc> if security is extremely important, and the program will be exposed to lots of malicious input, i will still prefer the badly written haskell code
20:07:49 <elliott> I think it's generally easier to make a Haskell program less dumb.
20:07:58 -!- fungot has quit (Ping timeout: 246 seconds).
20:08:04 <elliott> if security is extremely important I'd rather not be maintaining the program whatever language it's in :P
20:08:06 <kmc> or else treat the C program as untrusted and heavily sandbox it
20:08:38 <hagb4rd> it's that code should be understood and basically easy read if possible.. so putting 10 lines of code into one that makes you look pretty clever is the one of the worst case scenarios when it comes to maintenance
20:10:09 <kmc> and haskell doesn't have to be written that way, but it often is
20:10:20 <kmc> because most people writing haskell are excited beginners and not seasoned professionals
20:10:58 -!- lambdabot has quit (Ping timeout: 245 seconds).
20:11:32 <elliott> well you can do exactly the same in C
20:11:33 <kmc> however 1 really clever function that gets used 50 times is better than 50 separate simple functions
20:11:46 <elliott> and I'd prefer to refactor the Haskell
20:11:54 <hagb4rd> and i admit my first impression of haskell was that there are ways to express things shorter without loosing readability
20:12:51 <hagb4rd> especially handling data stuff
20:14:06 <hagb4rd> thanks to the guys that implemented the lambda calculus in c#.. that would be the next i miss in c
20:15:00 <hagb4rd> i'm sure the one thing elliott hates more than c is c#
20:15:14 <kmc> C# is a pretty good language
20:15:16 <kmc> it is memory safe
20:15:35 <kmc> it supports many styles well, including expressive functional programming
20:16:07 <kmc> it has LINQ
20:16:28 <hagb4rd> and mono is evolving pretty well so far
20:16:52 <kmc> that's good
20:20:30 -!- nooga has joined.
20:40:43 -!- GreyKnight has quit (Quit: You hit the grey light. It explodes!).
20:44:12 -!- boily has quit (Read error: Connection reset by peer).
20:49:53 -!- sebbu2 has joined.
20:49:53 -!- sebbu2 has quit (Changing host).
20:49:53 -!- sebbu2 has joined.
20:50:11 -!- boily has joined.
20:50:17 * hagb4rd puts some self-made xmas cookies into the channel
20:53:06 -!- variable has quit (Quit: I found 1 in /dev/zero).
20:53:37 -!- sebbu has quit (Ping timeout: 265 seconds).
20:58:20 -!- boily1 has joined.
21:01:13 -!- augur has quit (Remote host closed the connection).
21:01:41 -!- boily has quit (Ping timeout: 255 seconds).
21:01:58 -!- boily1 has changed nick to boily.
21:03:31 -!- Sgeo|web has joined.
21:05:24 -!- variable has joined.
21:11:57 <kmc> "Apple Maps 'is life-threatening' to motorists lost in Australia heat"
21:14:22 <elliott> it's not life-threatening, just 'life threatening'
21:17:04 <fizzie> A Finnish paper had that (well, similar) headline today too.
21:17:15 <fizzie> Guns don't kill people, Apple Maps kill people.
21:17:24 <olsner> Australia kills people
21:17:24 <fizzie> (That wasn't the headline.)
21:18:32 <elliott> I think fizzie should write the headlines
21:19:05 -!- ais523 has joined.
21:20:14 <fizzie> We just bought Helsinki-Imatra-Helsinki train tickets (that's about 250 km one way) for two, and they cost substantially less than the local regional traffic tickets we'll need to get to the Helsinki Central Railway Station.
21:21:06 <kmc> with ryanair and such, you can spend less on a plane ticket than on getting to the airport :)
21:21:13 <kmc> i've also taken a $2.50 metro ride to a $1 intercity bus
21:21:24 <fizzie> They're running this "advent calendar" thing where there's every day a new (A, B) pair and a set of particular trains between those points, and it costs fixed 1.50 eur/person.
21:22:05 <fizzie> And of course it's only valid if bought during that day.
21:22:07 <fizzie> (The local traffic trip is something like 3.37 eur or thereabouts when bought with the RFID card dealie.)
21:22:53 <kmc> so you have to go on the day of purchase? do they list the city pairs ahead of time?
21:23:35 <fizzie> No, you just have to purchase today; the travel times vary a bit, but for today's deal it was something like January 7th to January 31st.
21:24:09 <fizzie> (And therefore the routes aren't revealed in advance, of course.)
21:24:18 -!- augur has joined.
21:24:52 <Gregor> elliott: Heeeeeeeeeeeeeeeeeeeeeeeey here's a thought.
21:25:05 <Gregor> elliott: http://phantomjs.org/ + some glue code = modern textmode browser.
21:25:09 -!- augur has quit (Remote host closed the connection).
21:25:10 <fizzie> We did have to take the 07:12am train instead of the more human-friendly 10:12am one since the other one was already sold out (it's 11:25pm here so today's deal was quite old), but still.
21:25:15 -!- augur has joined.
21:25:33 <elliott> quite far away from any thought I was expecting you to tell me
21:25:48 <kmc> by "local traffic tickets" do you mean a local train or something else?
21:25:50 <elliott> "PhantomJS is an optimal solution for" not sure they know what "optimal" means
21:25:51 <Gregor> elliott: Probably over a year ago we (or perhaps not you at all) were discussing how shitty text mode browsers are ;)
21:26:07 <kmc> a beautiful, elegant, awesome browser that celebrates craftsmanship
21:26:32 <elliott> Wait, what is that referencing? I thought I knew but now I don't.
21:27:35 <olsner> internet explorer, right?
21:28:46 <kmc> https://addons.heroku.com/bonsai
21:29:47 <fizzie> kmc: The Helsinki/Espoo/Vantaa/Kauniainen regional area has pretty much just one type of tickets for trains/subway/buses/trams, so I mean those. (There's one price for in-city traffic, and another for the four-city zone... and then it gets more confusing, since the regional traffic... conglomeration sells bus-and-train tickets also for the neighbour municipalities, while the railway company ...
21:29:53 <fizzie> ... sells train-only tickets for those places, with completely different pricing schemas; but that's not really relevant any longer; and anyway who'd want to go there?)
21:30:17 <fizzie> (Uh, and Kauniainen counts as Espoo for the purposes of local traffic, because it's an enclave city kind of thing. Finland's last one, in fact.)
21:31:06 <elliott> fizzie: did you count where you'd need to put those ...s
21:31:18 <fizzie> I think by 2015 they have a new thing where they set up new fare zones and forget the actual city boundaries, since they're not terribly logical. (The new zones are roughly circular bands around the Helsinki centrum.)
21:31:24 <fizzie> elliott: No, it was splitlong.pl.
21:32:08 <fizzie> Well, it puts what you /set splitlong_line_end to the end, and splitlong_line_start to the start.
21:32:20 <fizzie> But they default to " ..." and "... ". (Or maybe the spaces are implicit.)
21:32:31 <fizzie> (No, they're explicit.)
21:33:12 <fizzie> You could have splitlong_line_end of "\" and splitlong_line_end of "" for a kind of a programmer's approach.
21:34:04 <elliott> splitlong_line_end = "HEY WAIT A SECOND JUST GONNA INSERT A LINEBREAK HERE"
21:34:12 <elliott> splitlong_line_end = "OK AS I WAS SAYING: "
21:34:22 <elliott> I copied the mistake from fizzie's line
21:35:18 <Gregor> Wow, elliott, that's a HEY WAIT A SECOND JUST GONNA INSERT A LINEBREAK HERE
21:35:23 <Gregor> OK AS I WAS SAYING: great idea.
21:35:42 <fizzie> OK AS I WAS SAYING: HEY WAIT A SECOND JUST GONNA INSERT A LINEBREAK HERE
21:35:43 <fizzie> OK AS I WAS SAYING: HEY WAIT A SECOND JUST GONNA INSERT A LINEBREAK HERE
21:35:43 <fizzie> OK AS I WAS SAYING: HEY WAIT A SECOND JUST GONNA INSERT A LINEBREAK HERE
21:35:47 <fizzie> You want that kind of a loop.
21:36:12 <fizzie> (I don't know what happens if you do set them long enough to result in that.)
21:36:21 <fizzie> (I suspect it's going to explode.)
21:39:36 -!- SingingBoyo has joined.
22:18:36 -!- Nisstyre-laptop has joined.
22:27:39 -!- Gregor has quit (Excess Flood).
22:27:47 -!- Gregor has joined.
22:30:29 -!- boily has quit (Quit: Poulet!).
22:31:49 <kmc> "Sundown is a zero-dependency library composed of 3 .c files and their headers. No dependencies, no bullshit."
22:31:52 <kmc> yeah fuck that "code reuse" bullshit
22:32:13 <kmc> real hackers etc
22:32:39 <elliott> I see kmc has never tried to install an edwardk package
22:34:22 <shachaf> kmc: Does it still depend on a C compiler?
22:34:38 <kmc> Real Hackers can compile C by hand
22:34:45 <kmc> otherwise how would you know it's secure?!?!?
22:36:11 <hagb4rd> one more and i start to think it was ironic :p
22:36:23 <shachaf> kmc: Did you hear NumInstances is out of lambdabot?
22:37:29 <shachaf> It was confusing someone in here.
22:37:32 <shachaf> I told Cale it was confusing.
22:37:52 <shachaf> And now 14:32 <edwardk> man shachaf is the death of fun in #haskell ;)
22:42:12 -!- SingingBoyo has quit (Ping timeout: 264 seconds).
22:43:48 <FireFly> Is Caleskell documented anywhere?
22:44:55 <olsner> documented only in the cries of horrified and confused beginners
22:45:13 <kmc> just avoid lambdabot on Malbolge Mondays
22:45:20 <kmc> when @run runs Malbolge instead of Haskell
22:54:58 <HackEgo> Finnish suomalaiset ei Perkeleistä on hakkapeliittaan. Ei saa peittää. Parasta ennen!
22:55:21 <shachaf> Did you write the new `quote?
22:57:44 <olsner> 120 lines! for adding a line of text to a text file?
23:00:38 -!- oerjan has joined.
23:13:26 <oerjan> `addquote <GreyKnight> headache + train with screeching brakes = headache^2 <hagb4rd> hm..headache + train with no screeching brakes = no head <GreyKnight> On the plus side, no headache anymore
23:13:29 <HackEgo> 862) <GreyKnight> headache + train with screeching brakes = headache^2 <hagb4rd> hm..headache + train with no screeching brakes = no head <GreyKnight> On the plus side, no headache anymore
23:20:20 -!- epicmonkey has joined.
23:21:54 <oerjan> `addquote [after discussing Haskell lenses] <hagb4rd> they seem to be the fashion of this winter <<GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:21:57 <HackEgo> 863) [after discussing Haskell lenses] <hagb4rd> they seem to be the fashion of this winter <<GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:22:18 <oerjan> `addquote [after discussing Haskell lenses] <hagb4rd> they seem to be the fashion of this winter <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:22:21 <HackEgo> 863) [after discussing Haskell lenses] <hagb4rd> they seem to be the fashion of this winter <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:22:36 <elliott> oerjan: "discussing lens", surely.
23:22:41 <elliott> well, I guess it was just lenses in general
23:22:45 <elliott> but they're not Haskell-specific!
23:23:06 <oerjan> perhaps that should go in lam... oh it's not here
23:23:35 <HackEgo> *poof* [after discussing Haskell lenses] <hagb4rd> they seem to be the fashion of this winter <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:24:10 <oerjan> `addquote [after discussing lens] <hagb4rd> they seem to be the fashion of this winter <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:24:13 <HackEgo> 863) [after discussing lens] <hagb4rd> they seem to be the fashion of this winter <GreyKnight> hagb4rd is wearing this season's Lens, a stunning little ensemble with functor trim
23:26:59 <Gregor> JEEZ guys, double space.
23:27:48 <oerjan> <elliott> but it's nothing compared to the fact that a C program uses the FFI every line :p <-- that darn C-to-C ffi, so convenient but dangerous
23:28:21 <oerjan> hm? no double space around [...] in..cisions
23:29:29 <elliott> Gregor: that quote follows the standards.
23:29:55 <olsner> cuts in the quote = incisions, makes sense
23:29:58 * oerjan wasn't entirely sure himself
23:30:29 <Gregor> `echo HALP GUYS I'M TOO FAST
23:30:39 <elliott> Gregor: want me to de-optimise hackego?
23:30:44 <olsner> who cares if it's the right word if it means something vaguely similar to what you mean
23:31:00 <Gregor> It would be cool if UML could be made to blow up if you try to write.
23:31:02 <shachaf> echo 'echo sleep 0.1 >> .bashrc' >> .bashrc
23:31:20 <Gregor> Blow-up-on-write is clearly the best write policy.
23:31:55 <elliott> shouldn't be very long with FUSE
23:32:18 <elliott> Gregor: in fact you could unionfs the normal FS and a FUSE empty-but-stops-everything-on-any-write FS
23:33:05 <Gregor> I'm not sure whether the current slowdown is mostly launching UML or `hg status` though. If it's the former, then there's not much point to piling more on that ;)
23:33:10 <elliott> presumably the latter would send a message to the hackego supervisor stuff
23:33:31 <elliott> Gregor: well it should be easy to time them with python
23:33:48 <elliott> Gregor: I forget, what does your UML use as init?
23:33:49 <Gregor> But I'm sooooo laaaaazy :(
23:34:07 <Gregor> init just mounts some shit then runs what you asked.
23:34:22 <elliott> Right, I was wondering what the init itself is
23:34:25 <elliott> So I could micro-optimise it
23:34:53 <Gregor> I doubt that it's the problem, probably the kernel is, but: https://bitbucket.org/GregorR/umlbox/src/802cc63695cab6922b1b1f8c7815612c4f8dc3a4/init.c?at=default
23:35:26 <elliott> Gregor: Oh right, you could probably save a good amount of time by stripping down the kernel
23:35:52 <Gregor> I was trying to figure out if I can remove the bogomips calculation.
23:35:56 <Gregor> That's pretty retarded and takes time.
23:36:04 <Gregor> Or rather, can't find an option for it.
23:38:01 <elliott> Gregor: it occurs to me that you don't necessarily need to use hg status
23:38:12 <elliott> you could compare the dir trees with diff or something
23:38:16 <elliott> I suspect hg status is not super-optimised
23:38:36 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.1294
23:38:56 <Gregor> | `-- \357\274\267\357\274\245\357\274\254\357\274\243\357\274\257\357\274\255\357\274\245 lolwut
23:38:57 <elliott> Gregor: in fact... it may be that how UML/UMLBox works means files always change inode on being modified?
23:39:04 <oerjan> fizzie: found fungot failure, fix fast!
23:39:06 <elliott> that would let you check whether anything changed superfast
23:39:28 <elliott> Gregor: Why is all the EgoBot stuff in HackEgo...
23:39:34 <Gregor> elliott: I'm working on merging them.
23:39:57 <elliott> You could at least put them in a separate bin directory so the `/! separation could be maintained and `ls bin` didn't give a bunch of crap
23:40:11 -!- fungot has joined.
23:40:48 <Gregor> (Note: I don't WANT to maintain the `/! separation)
23:41:04 <elliott> well you can still separate the paths
23:41:11 <olsner> how is fungot's twitter stream doing these days?
23:41:11 <fungot> olsner: this is prob a premature question... but what would it do? where were you from?
23:41:19 <FireFly> Gregor: maybe that's your unicode goat in UTF-8
23:41:30 -!- epicmonkey has quit (Ping timeout: 264 seconds).
23:41:35 <Gregor> FireFly: 's not that many characters...
23:41:38 <fizzie> olsner: I keep forgetting to restart the poster script.
23:41:39 <elliott> that should speed things up
23:42:30 <elliott> Gregor: by the way what should I call hg diff -c "$1" | patch -R
23:43:14 <Gregor> elliott: backout is the mercurial name for a similar operation.
23:43:54 <oerjan> <elliott> probably not a good idea <-- wait why not
23:44:07 <HackEgo> /hackenv/bin/perl: 3: Cannot fork
23:44:08 <elliott> Gregor: I bet HackEgo would be faster if it used git
23:44:14 <Gregor> elliott: Quite probably.
23:44:16 <oerjan> elliott: are the logs in paste/ ?
23:44:21 <elliott> Gregor: I like how you broke "perl".
23:44:27 <Gregor> elliott: But I'm still not sure if hg is even the slow part.
23:44:40 <Gregor> I was wondering wtf was going on there X-D
23:44:40 <oerjan> oh you mean references from the logs to paste/
23:44:49 <HackEgo> FIREFLY: WELCOME TO THE INTERNATIONAL HUB FOR ESOTERIC PROGRAMMING LANGUAGE DESIGN AND DEPLOYMENT! FOR MORE INFORMA
23:45:00 <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/
23:45:03 <FireFly> I'll make sure to check out that wiki
23:45:11 <elliott> Gregor: P.S. nice Unicode failure pls fix?
23:45:23 <Gregor> I don't have any clue why that happened X-D
23:45:29 * elliott thinks rm bin/perl is a bit of an incomplete solution to this problem...
23:45:38 <elliott> I note that this is a good argument for the !/` distinction :P
23:45:44 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/WELCOME
23:46:01 <elliott> Gregor: The Unicode failure is on HackEgo's part
23:46:05 <olsner> rm bin/perl must be a step in the right direction though
23:46:14 <elliott> You should .decode('utf-8') before length-limiting
23:46:28 <elliott> I guess you need a loop since IRC's bounds are probably byte-based
23:46:31 <Gregor> No, I just want Python to treat it as raw, 8-bit crap.
23:46:31 <olsner> (but beware, there may be more copies of perl)
23:46:46 <elliott> Gregor: ...so you want that to be fucked up?
23:47:04 <Gregor> elliott: Cutting off mid-character is not a significant problem.
23:47:34 <Gregor> OHWAIT is it displaying like that because it cut off mid-character so my client went “ehhhh Latin-1”
23:48:33 <Gregor> `run WELCOME Gregor | head -c 3
23:48:52 <olsner> ah, I guess that's why it's broken for me too
23:49:12 <Gregor> I was kinda hoping that output wouldn't have to be valid UTF-8 though...
23:49:40 <Gregor> elliott: I will, but not whilst at work.
23:50:02 <Gregor> I'll try to make it so that if it fails to decode as UTF-8, it just does bytewise limiting.
23:50:31 <elliott> by "that" I meant LANG being unset
23:50:43 <Gregor> LANGuage is for losers though.
23:50:51 <elliott> it'd fix the head -c 3 thing
23:51:05 <Gregor> I chose 3 precisely so it'd output what I expected X-D
23:51:22 <elliott> problem with limiting UTF-8ly is that it's hard to maintain byte bounds without just chopping off one char at a time until it's fixed
23:52:41 -!- zzo38 has joined.
23:54:14 <Gregor> elliott: I'm thinking, (1) decode as UTF-8. If it doesn't decode, just use bytes. (2) Cut it off to a byte limit, then decode in a mode I'm hoping Python provides, “throw bad shit away”, (3) Re-encode and send
23:55:09 <elliott> Gregor: That sounds much worse than just while len(encoded) < limit: str = str[:-1]; encoded = str.encode('utf-8')
23:55:33 <elliott> (After you do pre_decoded_str = pre_decoded_str[:limit]; str = pre_decoded_str.decode('utf-8'))
23:55:39 <elliott> (So most of the time it'll never even get into that loop)
23:55:56 <Gregor> elliott: I want to preserve incorrect strings.
23:56:04 <fizzie> It does have that mode, though, unless I misremember.
23:56:11 <Gregor> Ohwait, no, you mean for (2).
23:56:13 <zzo38> What are you trying to decode?
23:56:15 <Gregor> No, mine is considerably more efficient.
23:56:23 <elliott> after you do str = str[:limit]
23:56:35 <elliott> Gregor: Throwing bad shit away is so gross :(
23:57:22 <Gregor> elliott: Bad shit only occurs at the end of the string because you cut it off.
23:57:30 <Gregor> I only run (2) if the whole string is valid.
23:58:51 <HackEgo> LANG=zh_TW.UTF-8 \ LANGUAGE= \ LC_CTYPE="zh_TW.UTF-8" \ LC_NUMERIC="zh_TW.UTF-8" \ LC_TIME="zh_TW.UTF-8" \ LC_COLLATE="zh_TW.UTF-8" \ LC_MONETARY="zh_TW.UTF-8" \ LC_MESSAGES="zh_TW.UTF-8" \ LC_PAPER="zh_TW.UTF-8" \ LC_NAME="zh_TW.UTF-8" \ LC_ADDRESS="zh_TW.UTF-8" \ LC_TELEPHONE="zh_TW.UTF-8" \ LC_MEASUREMENT="zh_TW.UTF-8" \ LC_IDENTIFICATION="zh_TW
23:59:27 -!- sebbu has joined.
23:59:46 -!- sebbu has quit (Changing host).
23:59:46 -!- sebbu has joined.