←2011-11-28 2011-11-29 2011-11-30→ ↑2011 ↑all
00:02:28 <pikhq_> Not really.
00:02:34 <elliott_> :'(
00:05:28 <Vorpal> elliott_, benchmark it?
00:05:34 <Vorpal> (okay that is a LOT of work I know)
00:06:09 <Vorpal> elliott_, anyway I'm pretty sure hypervisor is more expensive than syscall. Or at least as expensive.
00:06:28 <Vorpal> anything else would greatly surprise me
00:10:56 <elliott_> :(
00:22:50 -!- kmc has joined.
00:32:36 -!- kmc has quit (Quit: Leaving).
00:49:25 <elliott_> hmm
01:00:49 -!- elliott has joined.
01:00:49 -!- elliott_ has quit (Read error: Connection reset by peer).
01:07:56 -!- SimonRC has quit (Ping timeout: 260 seconds).
01:09:27 -!- SimonRC has joined.
01:27:42 <itidus21> "The operating system was "inspired by the literary heritage of Dante Alighieri (particularly the Divine Comedy)"? What kind of sense does that make? I challenge anybody to tell me what it was about Dante's philosophy, politics, writing style or anything else that inspired this operating system."
01:38:24 <elliott> hi.
01:42:33 -!- Vorpal has quit (Ping timeout: 248 seconds).
01:49:23 <Jafet> x86 rings are not unlike the circles of hell
01:59:45 -!- kmc has joined.
02:04:18 <quintopia> elliott: hlep
02:04:28 <elliott> Jafet: :D
02:04:31 <elliott> quintopia: one cannot be hlepped
02:04:38 <quintopia> sad day
02:06:44 <elliott> quintopia: but go on
02:07:49 <quintopia> sam is crouched behind a desk with two guns pointed at him. he has a tiny revolver with four bullets. he has two guns pointed at him. his girlfriend is tied up with an enemy pointing another gun at her head. save him without a deus ex machina. she can die.
02:08:05 <quintopia> but she can't die by brains blowing cuz she has to say stuff before she dies
02:09:44 <Jafet> Uhhh
02:09:52 <Jafet> Can we see sam's character sheet first?
02:10:32 <elliott> quintopia: shoot the girlfriend, use element of surprise to escape
02:10:57 <elliott> not brains blowing, shoot the heart instead or w/e
02:11:01 <quintopia> he wouldn't shoot his girlfriend...
02:11:05 <quintopia> or would he...
02:11:07 <quintopia> hmmm
02:11:07 -!- kmc has quit (Remote host closed the connection).
02:11:19 <elliott> quintopia: that wasn't one of the requirements
02:11:27 <quintopia> it's his girlfriend!!!!!
02:11:30 <Jafet> She asks him to shoot her, he shoots her, and escapes
02:11:36 <Jafet> There, all criteria met
02:11:45 <elliott> quintopia: won't be his girlfriend if he dies, will she?
02:11:45 -!- kmc has joined.
02:11:46 <quintopia> she's pregnant. why would she ask him to shoot her?
02:11:50 <elliott> so he's basically fucked on the girlfriend front, either way
02:12:08 <quintopia> yes, but he i don't want him to do anything out of character
02:12:25 <elliott> quintopia: shoot a precisely-aimed bullet at the girlfriend so that her womb bursts open; grab baby and escape
02:12:26 <Jafet> Sam hypnotizes the enemies
02:12:27 <elliott> 100% realistic
02:12:35 <elliott> happens all the time
02:12:53 <Jafet> If you're Tarantino, shoot her in the side of the head.
02:12:53 <elliott> happened to me the other week, someone shot me and my baby escaped
02:12:54 <quintopia> she's only like 2 mos preggo
02:12:58 <quintopia> no baby yet just fetus
02:13:08 <elliott> quintopia: sam believes that life begins at conception.
02:13:10 <quintopia> walking fetus!
02:13:48 <elliott> quintopia: so what is the uh
02:13:49 <elliott> context here
02:13:59 <quintopia> a novel i'm writing?
02:14:22 <Jafet> It starts in media res
02:14:50 <elliott> quintopia: i suggest not getting sam in that situation
02:15:03 <Jafet> Novels with guns are shitty anyways
02:15:28 <elliott> quintopia: yeah they should be using uh
02:15:31 <elliott> bows 'n arrows instead
02:15:36 <quintopia> lol
02:15:42 <elliott> archery II: this time it's personal
02:15:46 <quintopia> but it's more exciting to have him in that situation
02:15:55 <quintopia> but i have an idea
02:16:02 * quintopia thinks text adventure
02:16:04 <quintopia> >look
02:16:09 <Jafet> Cloaks 'n daggers
02:16:12 <elliott> quintopia: have him start just like
02:16:13 <elliott> dancing
02:16:21 <elliott> he just starts dancing
02:16:23 <elliott> with the people with guns
02:16:31 <elliott> and he does a jig over to his girlfriend
02:16:33 <elliott> and kicks her out the window
02:16:35 <elliott> and then jumps after her
02:16:38 <elliott> but there's a trampoline underneath
02:16:38 <quintopia> YES
02:16:39 <elliott> so he bounces back up
02:16:41 <elliott> and shoots the bad guys
02:16:43 <quintopia> lul
02:16:45 <quintopia> best
02:17:07 <quintopia> i forgot about that patio outside!
02:17:38 <quintopia> he pulls the deskk drawer out
02:17:51 <quintopia> throws its contents at the guy with the girlfriend
02:18:15 <elliott> but the other dudes will just shoot him...
02:18:37 <Jafet> Desks are bulletproof, man.
02:18:55 <elliott> ah
02:19:33 <quintopia> this is a *big* desk
02:20:13 -!- pikhq has joined.
02:20:23 -!- pikhq_ has quit (Ping timeout: 252 seconds).
02:20:39 <quintopia> so then he jumps over the desk and runs at him with the other dudes shooting at him. but he shields himself with the desk drawer.
02:20:46 <quintopia> yep. it could happen.
02:21:09 <Jafet> Hollywood in writing
02:21:44 <quintopia> i know...its all so cliche :P
02:22:00 <Jafet> Actually that sounds more like a John Woo thing
02:22:19 <quintopia> so then he gets shot some when they figure out to shoot low...
02:22:46 <quintopia> and then...
02:22:50 <quintopia> rocks fall, everyone dies
02:22:57 <Jafet> Sam looks behind him and sees a fire extinguisher. He grabs it and uses it to lay down a smoke screen
02:23:05 <quintopia> oh shit good idea
02:24:12 <Jafet> Not knowing where he is, they start shooting at random and hit each other
02:24:15 <Jafet> The end
02:25:13 <Jafet> So, you have two days to finish the novel?
02:28:17 <elliott> this novel is terrible
02:31:45 <quintopia> it doesn't matter if it is terrible
02:31:47 <quintopia> it is fun
03:11:14 <itidus21> hmm
03:11:39 <itidus21> they really need to do an fps crossed with secondlife
03:12:03 <itidus21> not specifically secondlife but something like that
03:26:36 -!- elliott has quit (Quit: Leaving).
03:27:05 -!- elliott has joined.
03:27:11 <elliott> Gregor: Have you used Emscripten?
03:38:46 -!- kmc has quit (Quit: Leaving).
03:40:00 -!- zzo38 has joined.
03:46:17 -!- Nisstyre has quit (Ping timeout: 248 seconds).
03:56:00 -!- kmc has joined.
04:01:34 <kallisti> hey
04:04:13 <elliott> hi
04:05:53 <kallisti> 11 PM is an interesting time to wake up.
04:06:40 <elliott> yes
04:13:04 <kallisti> @tell Vorpal so in one of the earlier missions of Magicka there's this dude that freaks out about goblins and says a bunch of hilarious gibberish; is any of that Swedish?
04:13:05 <lambdabot> Consider it noted.
04:21:24 <Sgeo> Goblins?
04:21:47 <Sgeo> I don't seem to recall any goblins
04:22:23 <kallisti> ..
04:22:28 <kallisti> you lie.
04:23:04 <Sgeo> ..?
04:23:22 <Sgeo> I didn't say no goblins were ever mentioned, just that I don't remember goblins being mentioned
04:23:35 <Sgeo> We are talking about Puella Magi Madoka Magica, right?
04:23:37 <zzo38> What does it mean "Note: this does not yield a monad unless the argument monad is commutative. "
04:24:40 <kallisti> zzo38: in the context of what?
04:24:51 <kallisti> Sgeo: yes of course.
04:24:52 <kallisti> that thing
04:24:54 <kallisti> that I don't know of.
04:25:24 <zzo38> kallisti: ListT
04:25:55 <monqy> hi #esoteric
04:26:05 <monqy> good job sgeo
04:26:08 <Sgeo> zzo38, that's just the standard implementation that has that issue, I think?
04:26:16 <Sgeo> Although I don't understand it either.
04:26:20 <Sgeo> monqy, hm?
04:26:39 <monqy> pretty sure magicka is a game kallisti plays
04:26:43 <Sgeo> Oh
04:27:00 <kallisti> monqy smart
04:29:01 <monqy> Sgeo: does ListT mean anything other than the "standard implementation"?
04:29:19 <Sgeo> monqy, "ListT done right"?
04:32:04 <monqy> how should I know
04:33:28 -!- Sgeo has left ("Leaving").
04:33:31 -!- Sgeo has joined.
04:33:40 <kallisti> There is no need to keep referencing/commenting on the past to validate the present and future as a sort of musical emollient for the masses. All artists plunder from everywhere, so did Simon and Garfunkel but to put Fleetfoxes into a neat box of "our generations Simon and Garfunkel" is really missing the point in a major way and quite insulting to FFs. I'm listening carefully to music 30 years, and I've never heard anyt
04:33:47 <kallisti> youtube comments are great.
04:34:11 <monqy> yes
04:40:18 -!- augur has quit (Remote host closed the connection).
04:40:37 <elliott> coppro: Ping
04:41:49 <zzo38> Is there another kind of ListT?
04:42:36 <elliott> http://www.haskell.org/haskellwiki/Amb :-)
04:43:14 <coppro> elliott: pong
04:43:31 <kallisti> help I'm too dead to read this code.
04:43:34 <elliott> coppro: I thought I had a question, but then I realised that clang almost certainly does -m32, so I lost my question
04:44:12 <kallisti> well, I can read cut
04:44:18 <kallisti> it clears the state list.
04:44:18 <coppro> oh
04:44:21 * kallisti smart.
04:48:32 -!- pumpkin has changed nick to copumpkin.
04:52:04 <Jafet> Fleet Foxes are so authentic, they use reverb effect on every track
04:52:45 <elliott> Jafet: true authenticity comes from having reverb right in your SOUL
04:54:10 <Sgeo> copumpkin, are you a dual?
04:58:20 <kallisti> Jafet: elliott: lolwhat
05:07:49 <Sgeo> elliott, kallisti: UPDATE
05:08:25 <monqy> cool
05:12:47 -!- MDude has changed nick to MSleep.
05:20:33 -!- augur has joined.
05:34:32 -!- TheJimmyJames1 has joined.
05:47:14 -!- kmc has quit (Quit: Leaving).
05:52:50 <zzo38> What should a function be called: BarrierT f b m t -> BarrierT (f, b -> BarrierT f b m t) (BarrierT f b m t) m t and Barrier f b t -> Barrier (f, b -> Barrier f b t) (Barrier f b t) t
05:55:30 -!- kmc has joined.
06:02:26 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
06:05:59 -!- Jafet has quit (Quit: Leaving.).
06:09:33 <elliott> @tell Gregor pachelbel
06:09:33 <lambdabot> Consider it noted.
06:11:59 -!- Vorpal has joined.
06:14:37 <zzo38> Do you know what such functions and there inverse would be called? I don't know.
06:15:44 -!- TheJimmyJames1 has quit (Quit: Leaving.).
06:23:00 <Vorpal> wtf my dns is broken
06:23:01 <lambdabot> Vorpal: You have 1 new message. '/msg lambdabot @messages' to read it.
06:23:50 <zzo38> The DNS breaks sometimes in my computer, and then later it is fixed.
06:24:17 <Vorpal> kallisti: I don't remember which part you refer to. But in general the voiced over dialogue is mostly made up language with some English and Swedish words thrown in.
06:24:30 <Vorpal> brb going to restart my bouncer
06:24:38 <Vorpal> it's dns is broken for most other networks
06:24:41 <Vorpal> (wtf...)
06:24:46 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
06:25:24 -!- Vorpal has joined.
06:25:57 <Vorpal> actually it is routing to half the internet that is broken
06:27:10 <Vorpal> wtf ping works but connecting does not?
06:27:16 <Vorpal> and nor does traceroute
06:27:46 -!- Vorpal has quit (Client Quit).
06:28:22 -!- Vorpal has joined.
06:28:55 <Vorpal> actually not that either. Everything works fine from my laptop...
06:29:15 <zzo38> I don't know??????
06:30:03 -!- kmc has quit (Quit: Leaving).
06:31:06 <zzo38> Do you have any suggestions of the names of the functions I have described?
06:35:03 -!- kmc has joined.
06:35:42 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
06:36:17 -!- Vorpal has joined.
06:38:16 -!- TheJimmyJames has joined.
06:44:44 -!- oerjan has joined.
06:46:38 <elliott> hi oerjan
06:47:50 -!- TheJimmyJames has quit (Read error: Operation timed out).
06:49:27 -!- TheJimmyJames has joined.
06:49:33 <oerjan> dammit why must the godel's letter comment feed be limited to 10 comments
06:49:59 <elliott> goedel's letter. not goedel's last letter. not goedel's first letter
06:49:59 <elliott> just
06:50:01 <elliott> goedel's letter
06:50:14 <oerjan> *+lost
06:50:38 <oerjan> every time the two MrX and Pelotom trolls and counter-trolls post i lose messages and end up hunting around recent posts
06:57:03 -!- augur_ has joined.
06:57:54 -!- augur has quit (Ping timeout: 255 seconds).
06:58:18 -!- TheJimmyJames has quit (Read error: Connection reset by peer).
06:58:21 -!- elliott has quit (Ping timeout: 255 seconds).
06:59:06 <zzo38> Someone tried to answer my questions but seems as they did not understand this question. Did you even understand that?
07:03:00 <zzo38> Do any NSF music files use the track numbers to specify different variations (such as repeat vs non-repeat, equal temperament vs just intonation, etc) instead of another song?
07:05:58 -!- Jafet has joined.
07:06:02 -!- Jafet has quit (Changing host).
07:06:02 -!- Jafet has joined.
07:12:59 * oerjan braces for embarrasment by commenting on the issue on the blog again.
07:13:41 <oerjan> (as in "why don't you just do this" embarassment)
07:18:27 <oerjan> *+s
07:22:14 -!- kmc has quit (Quit: Leaving).
07:29:07 -!- zzo38 has quit (Remote host closed the connection).
07:35:50 <kallisti> hmmm
07:35:53 <kallisti> I need a new username for things.
07:36:05 <oerjan> bad_apple
07:36:15 <kallisti> oerjan: one must never be afraid of embarassment
07:36:22 <oerjan> O KAY
07:36:27 <kallisti> WE ARE ALL FOOLS
07:36:34 <kallisti> it is foolish to pretend you are not.
07:36:35 <oerjan> one should also learn to fly by flapping one's arms.
07:36:46 <kallisti> well, no...
07:37:08 <oerjan> kallisti: why not? it's approximately as easy.
07:37:21 <kallisti> http://www.youtube.com/watch?v=_F9RJSPnf8A
07:37:23 <kallisti> because this is better.
07:41:45 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
07:41:50 <oerjan> That's not flying, that's falling with style.
07:42:21 -!- Vorpal has joined.
07:42:23 -!- Vorpal has quit (Remote host closed the connection).
07:43:26 <kallisti> oerjan: I want to do this, but I know I'd just crash into some rocks
07:44:30 <kallisti> . The United States Parachute Association (USPA) requires in the Skydivers Information Manual that any jumper flying a wingsuit for the first time have a minimum of 200 freefall skydives, made within the past 18 months, and receive one-on-one instruction from an experienced wing suit jumper, or 500 jumps experience to go without an instructor.[16] Requirements in other nations are similar. Wingsuit manufacturers offer train
07:45:57 -!- Vorpal has joined.
07:46:01 -!- Vorpal has quit (Changing host).
07:46:01 -!- Vorpal has joined.
07:46:43 <Vorpal> [ 0.585378] pci_root PNP0A08:00: address space collision: host bridge window [mem 0x000c8000-0x000dffff] conflicts with Video ROM [mem 0x000c0000-0x000cffff]
07:46:44 <Vorpal> gnh
07:52:04 <kallisti> oerjan: I want to jump off a skyscraper in one of those wingsuits
07:52:16 <kallisti> and then follow.... a carefully planned route so I doubt crash into anything.
07:52:57 <oerjan> i'd be worried about turbulence.
07:53:18 <oerjan> well, if there were any chance of getting beyond my immense fear of heights, that is.
07:53:36 <kallisti> oerjan: I'd be worried about a stray gust of wind.
07:53:41 <kallisti> presumably they only fly when there's no wind?
07:54:13 <oerjan> i thought that was more or less the same thing.
07:54:33 <kallisti> turbulence is a more abrupt change
07:54:35 <kallisti> in most contexts
07:54:43 <kallisti> These techniques include the orientation relative to the aircraft and the airflow while exiting, and the way in which the flier will spread his legs and arms at the proper time so as not to hit the aircraft or become unstable in the relative wind.
07:54:51 <kallisti> ah yeah, they could just decrease surface area if they need to
07:55:48 <Jafet> http://www.pbfcomics.com/28/
07:57:34 <kallisti> With body shape manipulation and by choosing the design characteristics of the wingsuit, a flier can alter both his forward speed and fall rate. The pilot manipulates these flight characteristics by changing the shape of his torso, arching or bending at the shoulders, hips, and knees, and by changing the angle of attack in which the wingsuit flies in the relative wind, and by the amount of tension applied to the fabric wing
07:57:40 <kallisti> I wonder how they like
07:57:43 <kallisti> make themselves rotate.
07:58:36 <kallisti> While still very experimental, powered wingsuits, often using small jet engines strapped to the feet[13] or a wingpack set-up, allow for even greater horizontal travel and even ascent.
07:58:40 <kallisti> wtf
07:58:40 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
07:59:20 <Jafet> The proper term is "holy wtf batman".
07:59:26 -!- Vorpal has joined.
08:02:12 -!- nooga has joined.
08:05:29 <oerjan> to the batwingsuit
08:07:52 <kallisti> http://www.youtube.com/watch?v=h4arnATc04U
08:07:54 <kallisti> this is so good
08:09:32 <Vorpal> kallisti: I bet being in the jet is more comfortable :P
08:10:11 <Vorpal> also those jets are flying rather slowly (for jets that is)
08:10:33 <kallisti> well, yeah...
08:12:42 <kallisti> still his power to weight ratio is going to be pretty high because... well it's just a carbon-fiber wingspan and a person.
08:13:03 <kallisti> he just lacks much fuel I'd imagine.
08:14:11 <Vorpal> kallisti: and the human body can only take so much...
08:14:46 <Vorpal> wrt air speed and so on
08:20:23 * kallisti watches a man fly over the English Channel in a JETPACK
08:21:16 <Vorpal> personally it is not how I would chose to commute
08:22:13 <kallisti> that's because you're boring.
08:25:28 <Vorpal> kallisti: got a link to the video though?
08:26:14 <Vorpal> brb
08:26:41 <kallisti> it's not as interesting as the grand canyon vid
08:27:42 <kallisti> http://www.youtube.com/watch?v=WgdIE2t8QkM
08:30:22 <kallisti> he does some neat stunts in that one.
08:38:44 <Vorpal> kallisti: obviously you don't do stunts when commuting :P
08:40:52 * kallisti zzzzzzs
08:41:15 <Vorpal> kallisti: creeper with dyslexia?
08:41:27 <kallisti> wat?
08:41:31 <Vorpal> kallisti: that sound
08:41:45 <kallisti> wat?
08:41:57 <kallisti> it's like a thing
08:41:59 <kallisti> that indicates sleeping
08:42:01 <Vorpal> kallisti: you never played minecraft?
08:42:13 <kallisti> ..
08:42:18 <kallisti> ugh
08:42:19 <kallisti> no
08:42:21 <Vorpal> kallisti: oh
08:42:21 <kallisti> I have better things to do
08:42:23 <Vorpal> ...
08:42:26 <Vorpal> come on it is fun
08:42:37 <kallisti> I disagree.
08:42:43 <Vorpal> kallisti: have you tried it?
08:42:51 <Vorpal> and I don't mean the free classic version
08:42:51 <kallisti> I've seen people play it.
08:42:57 <kallisti> I actually have a pretty good imagination
08:42:58 <kallisti> so like
08:43:01 <kallisti> I can imagine playing it
08:43:03 <kallisti> without even having to
08:43:05 <kallisti> it's the neatest thing.
08:43:10 <Vorpal> kallisti: well at least it isn't like starcraft. I watched people play that. Seems utterly boring.
08:43:19 <kallisti> ...that is where you are wrong.
08:43:29 <kallisti> starcraft is like real-time chess on crack.
08:43:38 <Vorpal> kallisti: which is utterly boring
08:44:20 <Vorpal> kallisti: I tried many RTS, but so far I only found one fun to play: darwinia.
08:44:41 <kallisti> http://www.youtube.com/watch?v=tbwG63KVQz4
08:44:44 <kallisti> this game is good.
08:45:01 <Vorpal> kallisti: is there any jargon in it?
08:45:12 <kallisti> maybe.
08:45:19 <kallisti> but Husky is pretty good at explaining what is happening
08:45:20 <kallisti> if you like
08:45:24 <kallisti> know starcraft basics
08:45:34 <Vorpal> not really
08:45:47 <kallisti> he says "macro"
08:45:51 <kallisti> which isn't really very jargony
08:45:59 <Vorpal> kallisti: meaning like autohotkey?
08:46:02 <kallisti> no.
08:46:04 <kallisti> macromanagement
08:46:07 <Vorpal> I see
08:46:13 <kallisti> it refers to how you produce and spend money.
08:46:14 <kallisti> your economy.
08:46:16 <kallisti> unit production
08:46:17 <kallisti> etc
08:46:35 <Vorpal> kallisti: he has an annoying voice IMO
08:46:47 <kallisti> when you expand to new bases, when you research new tech, and what units you produce... are basically the three important points of macro.
08:46:51 <Vorpal> anyway I need to leave for university soon, won't be able to watch the whole thing now
08:46:53 <kallisti> Vorpal: you get used to it :P
08:47:22 <kallisti> there's also "micro" which is micromanagement... which is movement of individual units / multitasking
08:47:43 <Vorpal> I know about micromanagement. I played dwarf fortress. Which is not exactly RTS. Still fun though.
08:47:48 <Vorpal> kallisti: ever played dwarf fortress?
08:47:55 <kallisti> yep
08:47:57 <kallisti> it's fun.
08:47:59 <Vorpal> yeah
08:48:05 <kallisti> Vorpal: micro has a more specific meaning than it's usual meaning.
08:48:06 <kallisti> in sc2
08:48:09 <Vorpal> I see
08:49:34 <Vorpal> kallisti: anyway, I prefer sandbox games. Like minecraft and dwarf fortress.
08:49:37 <Vorpal> or RPGs
08:49:46 <Vorpal> open world RPGs are especially fun
08:49:57 <kallisti> me too, I just don't like minecraft because it's not a fun game. :P
08:50:13 <kallisti> but I also like strategy/competitive real-time games
08:50:17 <Vorpal> kallisti: it sure is. Sure the combat is meh. I prefer creative.
08:50:31 <kallisti> some FPSes, super smash bros, magicka, starcraft,
08:50:46 <Vorpal> I kind of suck at aiming at moving objects :P
08:50:54 <Vorpal> I'm okay with stealth based FPS
08:50:59 <Vorpal> like deus ex
08:51:06 <kallisti> my favorite FPS game is zombies mod in CoD actually. don't really like the multiplayer but the zombies mode is very fun.
08:51:15 <kallisti> *mode
08:51:15 <Vorpal> mhm
08:51:58 <kallisti> my max round is 32 on the kino der toten map
08:52:02 <kallisti> solo
08:52:08 <Vorpal> kallisti: The only FPSes I found fun to play are ones that are RPG-FPS mixes really. Like Deus Ex Human Revolution. Or Fallout New Vegas (haven't played Fallout 3)
08:52:24 <kallisti> opposite for me on the fallout stuffs
08:52:28 <kallisti> I played fallout 3
08:52:36 <Vorpal> well, the mechanics are pretty similar
08:52:41 <Vorpal> just different setting and story
08:52:46 <kallisti> I've seen it.
08:52:56 <kallisti> the mechanics are a little different also. they changed some skills around.
08:53:03 <Vorpal> right
08:53:07 <kallisti> and the crafting stuff
08:53:09 <Vorpal> the VATS system is interesting
08:53:18 <kallisti> the vats system is boring. :(
08:53:27 <Vorpal> oh?
08:53:30 <Vorpal> I disagree
08:53:32 <Vorpal> but whatever
08:53:35 <kallisti> especially with all the vats-related perks.
08:53:40 <Vorpal> hm
08:53:52 <kallisti> you basically just vats everything and..... continue vatsing everything
08:53:52 <Vorpal> anyway I need to leave. Cya
08:53:56 <kallisti> mmk
08:53:57 <Vorpal> kallisti: actually no
08:54:15 <Vorpal> kallisti: VATS isn't realistic for sniper rifle over long distance at a large unmoving target
08:54:24 <Vorpal> VATS underestimate the chance to hit then
08:54:25 <Vorpal> bbl
08:54:37 <kallisti> oh... kAY? :p BYE
08:55:17 <Jafet> The chance to hit depends on your screen resolution, too
08:56:55 <kallisti> UNFAIR!
08:56:58 <kallisti> ..
08:57:43 <Jafet> And the bullets are instantaneous rays anyway, so it doesn't matter if they're moving
08:58:05 <kallisti> well I don't think vats is based on your screen res.
08:58:22 <Jafet> No, but manual aiming can be
08:58:37 <Jafet> If you max out your character so that there's no sway
08:58:58 <kallisti> HD TVS ARE OVERPOWERED. QQ
08:59:10 <Jafet> Uh, they have only HD resolution.
08:59:22 <Jafet> Nothing on my 2560x1440
09:00:04 <Jafet> Hm, did Bethesda really use the same game engine for four games?
09:00:18 <Jafet> That just feels like they pulled something on the world
09:01:06 -!- GreaseMonkey has quit (Quit: The Other Game).
09:03:03 <kallisti> Jafet: sort of.
09:03:15 <kallisti> Jafet: they used a new AI for the NPCs in skyrim
09:03:23 <kallisti> I'm sure there have been improvements.
09:03:31 <Jafet> Shiny rocks
09:03:44 <kallisti> graphics, yes. shiny interfaces.
09:04:34 <kallisti> oh, and, uh, giant fucking worlds filled with towns, caves, dungeons, random encounters, every NPC having voice-overs, multiple options for quests, etc.
09:04:55 <Jafet> The new AI isn't any more believable than the Oblivion ones, though
09:04:57 <kallisti> it's not like they're getting away with anything.
09:05:02 <Jafet> It's the NPC animations doing the most of the work
09:05:04 <kallisti> Jafet: well yeah, but it's new nonetheless
09:05:30 <kallisti> nothing was pulled, I think. I believe they've put plenty of work into each game.
09:05:32 <Jafet> The NPCs tilting their heads actually goes a long way to create realism
09:05:44 <kallisti> it's better than before, certainly
09:06:34 <Jafet> Well, when you set out to create a game on the scale that Bethesda does, you normally wouldn't want to release it in a rough, bug-ridden state like Bethesda does.
09:08:51 -!- oerjan has quit (Quit: leaving).
09:13:31 <nooga> what
09:13:33 <nooga> skyrim
09:13:37 <nooga> oh yeah
09:14:14 <nooga> that reminded me of my second pc which runs the game constantly for 3 days
09:28:06 <kallisti> @tell elliott amb is interesting. It does something similar to what I have in mind for my graph language, except that in the graph language it will be implicit to every change of state.
09:28:06 <lambdabot> Consider it noted.
09:29:00 <nooga> lambdabot - the Siri of IRC
09:30:39 <kallisti> @tell kallisti to stop using @tell
09:30:39 <lambdabot> You can tell yourself!
09:30:45 <kallisti> lambdabot: thanks
09:39:10 <kallisti> hmm
09:39:21 * kallisti checks out Oz to see how it efficiently does constraint programming.
09:42:11 <kallisti> I'm not really sure if any of this is relevant though
09:50:55 <kallisti> but basically the syntax would look something like....
09:51:21 <kallisti> constraint { node -> replacement; node -> replacement; ... }
09:51:31 <kallisti> the symbols can be changed later if desired.
09:53:01 <kallisti> and if the same node is replaced by two rules then this essentially creates two nodes with past edges that point back to the original node.
09:53:16 <kallisti> a sort of non-deterministic split.
09:54:21 <kallisti> so, the somewhat annoying problem of determining the order of execution of graph rewriting rules
09:54:24 <kallisti> is.. no longer a problem.
09:57:16 <kallisti> so I guess I should start working on a) what constraints look like b) how to define predicates to use in constraints c) how to define functions in general d) some built-in operations e) how to refer to nodes
09:57:29 <kallisti> I guess the constraint would have variables... so like
09:57:54 <kallisti> X > 2 { X -> X+1 }
09:58:29 <kallisti> X here refers to any node. if a node satisfied the constraint, then it's replaced by the node that's produced from adding one to the node's value.
10:00:21 <kallisti> X > Y { X -> null }
10:00:27 <kallisti> this would delete every node but the smallest.
10:01:21 <kallisti> (delete is kind of the incorrect word, as you can still backtrack)
10:06:07 -!- monqy has quit (Quit: hello).
10:06:15 <kallisti> monqy: hello
10:06:44 <kallisti> but I also want things like....
10:07:00 <kallisti> X > Y { X -> past(X) }
10:07:10 -!- hagb4rd has joined.
10:07:42 <kallisti> which would replace X with a past node of itself. since there could possibly be more than one past node this is non-deterministic.
10:08:07 <kallisti> hmmm okay I could just have sets.
10:08:18 <kallisti> X > Y { X -> [X, X+1] }
10:08:43 <kallisti> replace all non-minimum nodes with both itself and itself plus 1
10:09:02 <kallisti> and then have a | which applys constraints to sets.
10:10:20 <kallisti> something like...
10:11:07 <kallisti> X > Y { X -> e in past(X) | e = e^2 }
10:12:21 <kallisti> or....
10:13:27 <kallisti> X > Y { X -> a,b in past(X) | distance(X,a) > distance(X, b) }
10:13:37 <kallisti> to revert to the most recent past node.
10:14:55 <kallisti> minimum(X) := a,b in X | distance(X, a) > distance(X, b)
10:15:22 <kallisti> X > Y { X -> minimum(past(X)) }
10:15:34 <kallisti> er...
10:15:34 <kallisti> no
10:15:35 <kallisti> wait
10:15:46 <kallisti> that doesn't work :P
10:16:06 <kallisti> you need something like...
10:16:37 <kallisti> minimum(X) := b where a,b in X | distance(X, a) > distance(X, b)
10:16:56 <kallisti> (will improve the syntax of these things at some point)
10:20:55 <kallisti> > let x = [1..5] in [b | a <- x, b <- x, a > b]
10:20:55 <lambdabot> [1,1,2,1,2,3,1,2,3,4]
10:20:59 <kallisti> lol
10:21:38 <nooga> whoa
10:24:21 -!- azaq23 has joined.
10:24:37 -!- azaq23 has quit (Max SendQ exceeded).
10:27:10 -!- nooga has quit (Ping timeout: 255 seconds).
10:29:30 -!- ais523 has joined.
10:30:38 -!- nooga has joined.
10:40:57 <kallisti> > let x = [1..5] in [b | let s = join(liftA2(,))x, (a,b) <- s, a > b]
10:40:58 <lambdabot> [1,1,2,1,2,3,1,2,3,4]
10:41:00 <kallisti> :(
10:41:13 <kallisti> same thing.
10:42:01 <Deewiant> > concat . init . inits $ [1..5]
10:42:03 <lambdabot> [1,1,2,1,2,3,1,2,3,4]
10:42:54 <Vorpal> kallisti, weren't you going to sleep?...
10:44:12 <ais523> :t init
10:44:12 <lambdabot> ais523: You have 4 new messages. '/msg lambdabot @messages' to read them.
10:44:13 <lambdabot> forall a. [a] -> [a]
10:44:17 <Vorpal> ais523, hello
10:44:19 <ais523> hi
10:44:23 <kallisti> Vorpal: no
10:44:29 <ais523> > init [1,2,3,4,5]
10:44:30 <lambdabot> [1,2,3,4]
10:44:32 <ais523> backwards tail?
10:44:37 <Vorpal> kallisti, pretty sure you said like "zzzzzs" or something
10:44:37 <kallisti> I was actually zzzzzing because you were putting me to sleep. :P
10:44:42 <Vorpal> kallisti, oh
10:44:50 <kallisti> Vorpal: ha ha ha
10:45:24 <Vorpal> hm that is some interesting xmas decoration in the window to the robotics lab here at university
10:45:35 <kallisti> anyway how do you implement minimum on a set without doing something like a fold
10:45:52 <ais523> kallisti: well, you could do an associative fold
10:45:57 <ais523> which isn't the same as foldl or foldr
10:46:03 <ais523> but you might still consider it as being like a fold
10:46:22 <Vorpal> basically LEDs mounted on a fan, rotating. The LEDs are synced to the rotation so they spell out a word
10:46:27 <Vorpal> gnh, did that get through? Just lost wlan for a bit
10:46:29 <Vorpal> ("God Jul", Swedish for "Merry Christmas")
10:46:48 <Vorpal> fuck microwave ovens.
10:46:51 <kallisti> or I guess actually what I'm asking
10:46:54 <Vorpal> they mess up wlan badly
10:47:08 <kallisti> is how do you use universal quantification to get the minimum of a set.
10:47:19 <kallisti> oh...
10:47:20 <kallisti> duh
10:47:43 <kallisti> exists a. forall b. a < b
10:47:46 <Vorpal> hm and the time too
10:47:48 <Vorpal> on the fan
10:48:20 <kallisti> hmmm my mother seems to be under the impression that second-hand hookah vapor is somehow going to be bad for her because she has asthma.
10:48:27 <kallisti> which I think is probably not true.
10:52:55 <kallisti> because I'm on the other side of the house
11:41:35 -!- ais523_ has joined.
11:41:59 -!- ais523 has quit (Disconnected by services).
11:42:01 -!- ais523_ has changed nick to ais523.
11:42:05 <ais523> X just exited for no obvious reason…
11:44:16 <kallisti> ais523: I love when that happens.
11:47:12 <ais523> hmm, there's garbage on tty2
11:48:25 <kallisti> ais523: data has feelings too. just because no one's using it doesn't mean it's not data.
11:48:39 <kallisti> garbage is insulting to those poor bits. :(
11:48:52 <ais523> *desert login: 1*41*41*41*41*4Password: HHHHHHHHHHHPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPHHHHQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPUbuntu 10.04.3 LTS desert tty2
11:48:54 <ais523> desert login:
11:49:03 <ais523> (note: that isn't actually my password)
11:49:09 <kallisti> good password
11:51:15 <ais523> (nor my username)
12:22:22 -!- nooga has quit (Ping timeout: 255 seconds).
12:37:07 -!- augur_ has changed nick to augur[afk].
12:44:24 -!- ais523 has quit (Ping timeout: 244 seconds).
12:46:30 -!- sebbu2 has joined.
12:46:31 -!- sebbu2 has quit (Changing host).
12:46:31 -!- sebbu2 has joined.
12:47:27 -!- Phantom_Hoover has joined.
12:47:31 -!- ais523 has joined.
12:48:09 -!- sebbu has quit (Ping timeout: 248 seconds).
12:49:32 <kallisti> can anyone explain why you would said "pairwise distinct" instead of "all elements are unique"
12:51:02 -!- ais523 has quit (Excess Flood).
12:52:40 -!- ais523 has joined.
13:01:03 <kallisti> what the hell
13:01:07 <kallisti> about a week ago
13:01:25 <kallisti> I was commenting on how warm it is in November
13:01:27 <kallisti> and today
13:01:28 <kallisti> it's snowing.
13:02:01 <kallisti> I don't even think it's below freezing. no, it's not.
13:10:39 <itidus21> erss kapakassa ja vakioasiakas ehdotti hnelle
13:15:59 -!- ais523 has quit (Ping timeout: 252 seconds).
13:18:54 <kallisti> itidus21: don't pretend you're not American.
13:19:19 <itidus21> http://s3.amazonaws.com/data.tumblr.com/tumblr_l99k91VcPO1qdpbleo1_1280.jpg?AWSAccessKeyId=AKIAJ6IHWSU3BX3X7X3Q&Expires=1322659120&Signature=ZADFaT4zuI5XQjZSiuliUVob0VQ%3D
13:20:04 <kallisti> ah, this must be what Sweet Bro and Hella Jeff is parodying.
13:20:16 -!- ais523 has joined.
13:24:36 <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/mt83n/dear_sociologists_why_do_black_people_not_enjoy/
13:24:37 <lambdabot> Phantom_Hoover: You have 9 new messages. '/msg lambdabot @messages' to read them.
13:24:38 <Phantom_Hoover> This, wow.
13:26:36 -!- ais523 has quit (Ping timeout: 244 seconds).
13:27:25 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
13:27:32 <Phantom_Hoover> @tell elliott why why why this was a good day
13:27:32 <lambdabot> Consider it noted.
13:28:17 <kallisti> Phantom_Hoover: you're so popular.
13:31:35 <kallisti> interesting, so pistachio seeds actually split open like that because of artificial selection.
13:39:12 -!- nooga has joined.
14:11:19 <kallisti> http://pics.kuvaton.com/kuvei/there_is_no_censorship_in_us.jpg
14:22:08 <Phantom_Hoover> kallisti, that's a significantly more complex thing than straight "censorship".
14:26:59 <kallisti> yes I agree.
14:27:32 <kallisti> it seems to strange to me that for some reason the US needs different information/stuff from the rest of the world.
14:28:13 <Phantom_Hoover> It'll mainly be a combination of culture, world prominence and the size of the market.
14:30:49 -!- olsner has quit (*.net *.split).
14:36:47 -!- olsner has joined.
14:48:58 -!- ais523 has joined.
14:59:47 -!- Zuu has quit (Read error: Connection reset by peer).
15:01:51 -!- copumpkin has joined.
15:03:53 -!- Zuu has joined.
15:17:37 <Phantom_Hoover> http://www.dalnefre.com/wp/2011/11/fexpr-the-ultimate-lambda/
15:17:47 <Phantom_Hoover> This looks exceptionally stupid from a cursory glance.
15:18:04 <Phantom_Hoover> "Application of a Lambda causes evaluation of its operands, producing arguments which are combined as specified by a body expression."
15:18:16 <Phantom_Hoover> Yes, yes it is.
15:19:42 <kallisti> that doesn't make sense to me.
15:19:44 <kallisti> producing arguments?
15:19:59 <kallisti> oh
15:20:12 <kallisti> ...that's... stupid.
15:20:48 <Phantom_Hoover> It appears he's reinvented lazily-evaluated lambdas.
15:23:47 <kallisti> "application of a lambda causes evaluation of its operands" sounds pretty unlazy to me.
15:32:21 -!- mrgaddy has joined.
15:33:16 <mrgaddy> hello to all esoterics!
15:33:54 <Phantom_Hoover> `? welcome
15:34:02 <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
15:35:52 -!- mrgaddy has quit (Client Quit).
15:36:40 <Phantom_Hoover> Another neopagan sent packing.
15:39:00 -!- MSleep has changed nick to MDude.
15:40:23 -!- copumpkin has quit (Remote host closed the connection).
15:40:48 -!- copumpkin has joined.
15:43:59 <kallisti> Phantom_Hoover: sometimes I wish we were a joint channel between neopagans and amateur language designers.
15:44:18 <Phantom_Hoover> Hey, oklopol's a professional language designer.
15:45:07 <kallisti> I guess Gregor kind of is too?
15:45:08 <kallisti> well, no
15:45:19 <kallisti> unless he wrote a paper about Plof?
16:02:48 -!- pikhq has quit (Ping timeout: 244 seconds).
16:02:57 -!- pikhq has joined.
16:05:17 -!- ais523 has quit (Remote host closed the connection).
16:24:34 -!- elliott has joined.
16:26:50 <kallisti> !perl print "\n" =~ /\s/
16:26:53 <EgoBot> 1
16:26:57 <kallisti> whew. sanity.
16:29:33 -!- elliott has set topic: The IOCCC is back on! http://www.ioccc.org | http://codu.org/logs/_esoteric/.
16:29:41 * elliott now proceeds to find out why oerjan did that.
16:29:41 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
16:33:26 <kallisti> !perl my $x = "hi hi ho hi"; while ($x =~ /hi/g) {print $&}
16:33:27 <EgoBot> hihihi
16:33:33 <kallisti> whew. sanity.
16:33:38 <kallisti> sometimes I have to check when I'm writing perl.
16:34:24 <elliott> isn't loss of sanity the standard perl coding state
16:34:42 <kallisti> yes.
16:34:57 <kallisti> actually it's the loss of sanity that makes me check all of these dumb things.
16:35:15 * kallisti cannot remember like 3 million special cases of stuff all the time.
16:37:10 -!- sebbu2 has changed nick to sebbu.
16:44:50 <oklopol> i wasn't accepted in stacs :(
16:45:09 <Phantom_Hoover> Oh noklopol?
16:45:51 <oklopol> if you look at accepted papers in http://stacs2012.lip6.fr/, you'll see why
16:45:53 <oklopol> they are idiots.
16:46:28 <elliott> oklopol is dum lol
16:54:01 -!- ais523 has joined.
17:03:52 -!- kallisti has quit (Ping timeout: 258 seconds).
17:05:56 <ais523> elliott: here? if you're reading this live and not logreading, here's a hilariously breakage of a phpBB webforum: http://mafiascum.net/forum/viewtopic.php?f=8&t=14360&start=50
17:06:00 <ais523> everyone's panicking, obviously
17:06:13 <ais523> (creating new posts works, incidentally, it's just that all existing information seems to be badly messed up)
17:06:14 <elliott> hi
17:06:21 <elliott> ha
17:06:29 <ais523> my favourite bit is the "Jump to" box at the bottom
17:06:35 -!- kallisti has joined.
17:06:43 <ais523> oh, and half the pages fail with an internal error, the others are like that
17:07:04 * Sgeo was vaguely considering playing on MS once
17:07:10 <Sgeo> Not sure I have the patience though
17:07:19 <ais523> if you're not sure, you don't
17:07:47 <ais523> elliott: as a bonus, none of the site admins are online, but one of the art people is, and tried to fix the problem by changing the default style to be one that they were working on as a joke
17:07:58 <ais523> (or at least, that had amsuing placeholder graphics in)
17:08:02 <elliott> heh
17:08:10 <ais523> so everyone assumed that it was some sort of hack attempt
17:08:16 <ais523> (they changed it back after it was clear that it did nothing useful)
17:08:29 <ais523> but now everyone is blaming the tigers
17:08:41 <Sgeo> ais523, where can you see what anyone is actually saying?
17:08:53 <Sgeo> Oh, is there an IRC channel?
17:09:08 <ais523> Sgeo: any thread which was created after this happened
17:09:09 <ais523> like http://mafiascum.net/forum/viewtopic.php?f=8&t=19711
17:09:23 <Sgeo> Ah
17:09:47 <kallisti> hmm, I /might/ actually end up using the state variable declaration in PErl
17:09:47 <kallisti> for my IRC bot
17:12:13 <ais523> elliott: any idea of what could cause that sort of breakage?
17:12:20 <ais523> it seems to be some sort of systematic corruption
17:14:10 -!- monqy has joined.
17:14:25 -!- kallisti has quit (Ping timeout: 255 seconds).
17:14:30 -!- kallisti has joined.
17:14:30 -!- kallisti has quit (Changing host).
17:14:30 -!- kallisti has joined.
17:15:36 <elliott> ais523: hmm, reordering of table columns?
17:15:41 <elliott> or inserting a new one in the wrong place
17:15:53 <kallisti> @help
17:15:54 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
17:15:56 <kallisti> @help help
17:15:57 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
17:16:04 <ais523> perhaps, but it pretty clearly involves more than one table with any sensible architecture
17:16:09 <ais523> e.g. everyone's showing as having joined on the epoch
17:16:17 <elliott> weird
17:16:30 <ais523> (I'm not assuming that phpBB's arch is sensible, but I don't think it'd be /that/ crazy)
17:16:36 <elliott> "Who the Eff are you and how did you join in 1969"
17:16:50 <ais523> hmm, unless join dates are calculated from the posts table
17:16:59 <elliott> ais523: they're not
17:17:07 <elliott> I know a /very slight/ amoutn about phpBB
17:17:13 <ais523> good to know
17:17:20 <ais523> there's definitely an index on (user, thread, date)
17:17:23 <ais523> in the posts table
17:17:39 <ais523> so it wouldn't be impossible to assume there's one on (user, date) too; it'd just be wrong
17:19:35 <elliott> ais523: well, join date can't be calculated from date of first post
17:19:47 <ais523> yes, that's what I meant by "wrong"
17:19:56 <ais523> oh, everyone's avatar vanished too
17:20:09 <ais523> (but changing avatars worked and put them back to normal, or alternatively tiger-themed)
17:20:14 <ais523> and that can't be related to the posts table, surely
17:20:37 <elliott> ais523: well, IIRC avatar info is stored in a table, just not the files themselves
17:21:05 <ais523> right, but it wouldn't be the same table as posts unless the database was normalized in a really crazy way
17:21:17 <ais523> typically, changing avatar changes it on all posts, you don't want to go back over all the posts and update it by hand
17:21:29 <ais523> thus, it's stored in a separate table, almost certainly
17:21:30 <elliott> lol
17:21:35 <elliott> i think it's stored in the user table
17:21:51 -!- kallisti has quit (Ping timeout: 240 seconds).
17:22:05 -!- kallisti has joined.
17:22:05 -!- kallisti has quit (Changing host).
17:22:05 -!- kallisti has joined.
17:22:15 <kallisti> help I'm in wlan limbo
17:22:44 <elliott> "The tigers are unrelated to the problem at hand."
17:23:27 <elliott> ais523: this xalxe person sure does post a lot
17:23:33 <kallisti> elliott: I wonder how long "pretentious hipster" has been cool.
17:23:44 <ais523> elliott: he's not a top poster site-wide, he's just interested in the whole tigers incident
17:23:44 <kallisti> at least since like the 50s right?
17:23:55 <elliott> Tiger Incident(tm)
17:24:32 <ais523> well, it has to be called something
17:24:43 <elliott> ais523: the blognomic dynasty is still going?
17:24:58 <ais523> elliott: it's the one after the one that started during the Agoran invasion
17:25:03 <elliott> yep, I know
17:25:10 <ais523> the last one was very short
17:25:14 <ais523> this one seems a more usual length
17:25:15 <elliott> it's been on this one the last like ten times i've checked :P
17:25:19 <ais523> although it's in need of a win condition
17:25:40 <kallisti> you know what would be awesome
17:25:42 <ais523> elliott: btw, I realised that Braid's time travel model is a superset of Feather's; e.g. the first puzzle in world 3 is pretty much exactly a <<= operation, giving the key to the player
17:25:49 <elliott> haha
17:25:58 <ais523> and world 2 should serve as a big demonstration of why timeloops are so easy to make by mistake in Feather
17:26:06 <kallisti> little balls of soft pretzel, filled with mozzarella. one day I shall make that.
17:26:10 <ais523> it's actually a good visualisation tool
17:26:20 <elliott> has it solved any feather problems yet?
17:26:26 <ais523> no, I don't think so
17:26:40 <ais523> in Braid, things can just have a glowy green outline and be outside the usual flow of time
17:26:46 <ais523> that's like the Feather version of unsafePerformIO
17:26:48 <elliott> cheating!
17:26:53 <monqy> did someone say feather
17:26:58 <elliott> can you play the game without that?
17:27:20 <ais523> you can't cause things to do that; some puzzles (all in world 3, and many elsewhere) have them naturally on the map, thouhg
17:27:21 <ais523> *though
17:27:56 <ais523> each world has its own gimmick (apart from 2, whose gimmick is not having a gimmick)
17:28:06 <ais523> btw, the worlds are numbered starting from 2; it's an effect of the pretentiousness
17:28:07 <ais523> 2 is first
17:28:26 <elliott> the end is 1, right?
17:28:43 <ais523> yep
17:29:01 <ais523> well, or beginning depending on how you look at it, the game's plot is time-reversed (probably inevitably)
17:29:35 <ais523> but it's the level you play last
17:29:45 <elliott> ais523: a video title on YouTube you might find amusing: "55 Bugs in 3 Minutes (Minecraft 1.0.0)"
17:29:56 <ais523> indeed
17:30:05 <ais523> is it single-segment, or IL?
17:30:14 <elliott> ?
17:30:37 <ais523> are there discontinuities in the action, like saving and then loading elsewhere, or cutting with things done during the cut?
17:31:06 <ais523> (if it repeatedly saves and loads in the same place, it's segmented, but that seems really unlikely for that sort of video)
17:31:23 <elliott> oh, there's a cut after every bug
17:31:31 <elliott> demonstrating them all with one large contraption would be... impressive
17:32:10 <ais523> single-segments are much more impressive than ILs for that reason
17:32:14 <Phantom_Hoover> Project for Pyralspite?
17:32:16 <elliott> "in single player, arrows don't affect a pressure plate until a particle effect intersects the pressure plate"
17:32:32 <ais523> although ILs are generally much faster, to make up for it
17:32:37 <elliott> still can't get over how unlikely that bug is
17:32:38 <Phantom_Hoover> That bug still amazes me.
17:33:06 <elliott> ais523: (What is that terminology from? TASes?)
17:33:07 <Phantom_Hoover> Boosters, I can get. Water ladders, I can get. Boatvators, I can get. But that?
17:33:14 <ais523> elliott: unassisted speedruns
17:33:22 -!- TheJimmyJames has joined.
17:33:23 <ais523> TASes are really heavily segmented by definition
17:33:38 <ais523> although there's been one attempt I know of at an IL TAS, TASvideos wouldn't accept it
17:34:05 <ais523> as they verify that the whole run is continuous using emulators, and ILs aren't continuous by definition
17:34:09 <elliott> ais523: well, TASes are indistinguishable from someone playing ridiculously well without save-scumming, no?
17:34:17 <elliott> I mean, the end result
17:34:23 <ais523> elliott: right, indeed
17:34:27 <elliott> oh, I had the terminology the wrong way aroudn
17:34:29 <ais523> so they look like single-segments when played back
17:34:33 <kallisti> Phantom_Hoover: all creative sandboxy games need perpetual motion machines.
17:34:36 <elliott> what does IL stand for?
17:34:39 <ais523> or occasionally, single-segment with resets
17:34:41 <ais523> individual level
17:34:43 -!- TheJimmyJames has quit (Client Quit).
17:34:51 <ais523> because you have to play the whole game a level at a time in any order
17:35:07 <elliott> heh
17:35:17 <ais523> it's typically used for things like racing games
17:35:28 <ais523> where the levels are all independent, and any ordering of the levels is entirely arbitrary
17:35:48 <ais523> (and continuity is thus not required; SDA even allows the levels of an IL to be done by different people, and just adds together the best time achieved for each level)
17:36:00 <elliott> "A half-block with ice underneath it is slippery."
17:36:03 <elliott> Phantom_Hoover: we are using this
17:36:13 <Phantom_Hoover> Yes.
17:36:17 <Phantom_Hoover> Yes we are.
17:37:47 <kallisti> elliott: I think I would play minecraft if it were more CAy
17:38:11 <kallisti> Conway's Game of Life: the Game!
17:38:45 <kallisti> I guess redstone is kind of like wireworld???? kind of???????
17:38:52 <ais523> kallisti: Elliottcraft (the game I'm not really working on but am designing, and that's named after elliott to cause confusion) is basically a bully automaton
17:38:55 <ais523> with only a few individual components
17:39:00 <ais523> being 3D rather than 2D means only a few are needed
17:39:07 <ais523> and I think it's TC, although haven't proven it
17:39:23 <kallisti> ais523: import state: ground
17:39:26 <kallisti> *important
17:39:36 <kallisti> assuming you walk around in it
17:39:51 <ais523> kallisti: there is a possible content for a cell that is solid and does nothing
17:40:03 <kallisti> good.
17:40:06 <ais523> two, in fact, one that falls and can be pushed around, and one that's immobile and just hangs there in midair
17:40:14 <kallisti> excellent.
17:40:26 <elliott> ais523: So, sand and stone? :-)
17:40:34 <kallisti> stupid minecraft and its IMPOSSIBLY FLOATING STRUCTURES which are SOMETIMES NOT WANTED.
17:40:38 <kallisti> but OTHERTIMES KIND OF COOL.
17:40:41 <elliott> ais523: (in Minecraft, sand and gravel alone are affected by gravity)
17:40:44 <ais523> elliott: I don't think they have names yet, other than really descriptive names
17:40:57 <ais523> but the moveable one acts rather more solid than sand
17:41:05 <elliott> ais523: sand is solid in MC
17:41:10 <ais523> oh, right
17:41:22 <kallisti> I read MC as mind control.
17:41:24 <ais523> well, the game isn't going to make much sense real-worldly, but it should make at least more sense than /that/
17:41:44 <ais523> I've even vaguely envisaged it working as an MMO
17:42:02 <kallisti> ais523: glider guns are a must.
17:42:03 <ais523> and I'm trying to work out how easily you could attack people by building walls around them or sending lots of factory blocks at them
17:42:11 <ais523> kallisti: oh, don't worry about that
17:42:21 <ais523> there's a block whose purpose is to be a glider with side effects, and it's quite easy to create
17:42:46 <kallisti> reflecty mirror things that move gliders around?
17:42:54 <kallisti> also: portals
17:42:58 <kallisti> every game benefits from portals.
17:43:15 <kallisti> for example see: portal
17:43:19 <elliott> ais523: I've always liked the idea of games that are basically single-player MMOs
17:43:25 <ais523> let's see… we have air, ground-like blocks (mobile/levitating), conveyor blocks (mobile/levitating), factory blocks
17:43:35 <ais523> conveyor blocks and factory blocks both have six possible orientations
17:43:38 <kallisti> elliott: that sounds horrible kind of. almost as horrible as regular MMOs
17:43:55 <ais523> none of the blocks can self-propel; but factory blocks can repeatedly create conveyor blocks beneath themselves
17:44:05 <ais523> which effectively gives you a side-effecting glider
17:44:13 <kallisti> ais523: you could eliminate the diffusion of mobile and levitating by just putting block on a single kind of levitating block.
17:44:17 <elliott> i.e., the only mode is online server play
17:44:18 <elliott> /but/
17:44:23 <elliott> everyone spawns like miles and miles away from each other
17:44:34 <elliott> so you never know unless you like accidentally cross the path of someone exploring far out
17:44:35 <ais523> kallisti: that'd make severe differences from the way computation worked
17:44:39 <elliott> or make plans to meet up with someone
17:44:40 <ais523> elliott: but then, how would you play it offline?
17:44:48 <ais523> also, someone would probably make some sort of space-filling machine before long
17:44:54 <ais523> and everyone would come across it eventually
17:44:58 <elliott> ais523: you don't (bonus points if it doesn't tell you it's connecting to the network before you realise it yourself)
17:45:15 <ais523> elliott: then it's effectively malware
17:45:19 <elliott> ais523: AWESOME malware
17:45:23 <kallisti> ais523: peano curves: the game?
17:45:24 <ais523> well, yes, but still malware
17:45:31 <ais523> elliott: more to the point, my network connection is often very unreliable
17:45:41 <ais523> so I'd notice the game repeatedly crashing
17:45:43 <elliott> ais523: well, it helps to dilute the world of malware with fun malware
17:45:47 <elliott> a world with fun malware > a world with unfun malware
17:46:42 <kallisti> a world with fun malware + a world with unfun malware = a world with unfun malware
17:46:46 <kallisti> therefore, a world with fun malware = 0
17:47:20 <kallisti> ...
17:47:36 * kallisti good math
17:47:37 <ais523> therefore, a world with unfun malware < 0
17:47:48 <ais523> (and <0 < <3)
17:48:25 <kallisti> > (<0) < (<3)
17:48:26 <lambdabot> *Exception: (==): No overloading for function
17:49:06 <ais523> hmm, I wonder why that's erroring on (==)
17:49:15 <kallisti> a large part of me wishes that functions were orderable and equatable.
17:49:33 <monqy> then define ordering and equality on functions
17:49:35 <kallisti> ais523: I wonder why that's a runtime error.....
17:49:40 -!- nooga has quit (Ping timeout: 245 seconds).
17:49:48 <elliott> because
17:49:58 <elliott> > (sin + cos) pi
17:49:59 <lambdabot> -0.9999999999999999
17:50:10 <ais523> elliott: some library, presumably?
17:50:18 <ais523> also, what?
17:50:20 <elliott> library for what
17:50:22 <ais523> > cos pi
17:50:22 <lambdabot> -1.0
17:50:26 <ais523> > sin pi
17:50:26 <lambdabot> 1.2246467991473532e-16
17:50:30 <ais523> oh, I see
17:50:32 <kallisti> ais523: num instance for functions
17:50:41 <ais523> elliott: defining + on functions
17:50:44 <monqy> sin pi.....
17:50:50 <elliott> ais523: it's just a Num instance
17:50:55 <elliott> but Num requires Eq and Show
17:50:56 <elliott> because bad
17:51:00 <ais523> oh, aha
17:51:14 <kallisti> elliott: does Eq requite Ord?
17:51:20 <elliott> erm
17:51:22 <elliott> but Num requires Ord and Show
17:51:23 <Sgeo> Ord requires Eq
17:51:24 <elliott> or does it
17:51:25 <elliott> @src Num
17:51:25 <lambdabot> class (Eq a, Show a) => Num a where
17:51:25 <lambdabot> (+), (-), (*) :: a -> a -> a
17:51:25 <lambdabot> negate, abs, signum :: a -> a
17:51:25 <lambdabot> fromInteger :: Integer -> a
17:51:26 <kallisti> oh...
17:51:27 <kallisti> okay.
17:51:29 <elliott> no Ord isn't required
17:51:31 <elliott> I wonder why they defined it
17:51:42 <kallisti> me too.
17:52:04 <ais523> and I wonder why they defined it in terms of ==
17:52:13 <ais523> @src (a->b) <
17:52:13 <lambdabot> Source not found. BOB says: You seem to have forgotten your passwd, enter another!
17:52:22 <kallisti> > ((+3) > (+4)) 5
17:52:23 <lambdabot> Couldn't match expected type `t1 -> t'
17:52:23 <lambdabot> against inferred type `GHC.B...
17:52:36 <kallisti> ..
17:52:38 <kallisti> yeah
17:52:38 <ais523> it'd be great if the rest of the error was printed
17:52:45 <ais523> :t ((+3) > (+4))
17:52:45 <lambdabot> Bool
17:52:48 <Sgeo> Pretty clearly GHC.BOol or siome..
17:52:50 <ais523> ah, there we go
17:52:59 <ais523> in retrospect, that was inevitable
17:53:03 <kallisti> ..heh, indeed.
17:54:03 <kallisti> elliott: does caleskell do any other stuff with function instances that would require Ord?
17:54:11 <elliott> don't think so
17:54:48 <Sgeo> @info (->)
17:54:48 <lambdabot> Parse error at "->)" (column 2)
17:54:57 <Sgeo> @help info
17:54:58 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
17:55:05 <Sgeo> @help @info
17:55:05 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
17:55:10 * Sgeo facepalms
17:56:42 <kallisti> ais523: I imagine one of the tests of the compare function or <= (whichever they defined for (->)) involves equality somewhere.
17:56:56 <kallisti> and then < etc are defined from that.
17:57:26 <Sgeo> Um, why would they define Ord Num with compare or <= being anything other than error?
17:57:29 <kallisti> but that doesn't really explain why there is a completely useless Ord instance of (->)
17:57:35 <Sgeo> Erm, I mean, Ord (->)
17:58:13 <kallisti> maybe they were lazy and just used the same error message they use with (==) to make their shitty useless instance.
18:00:30 <kallisti> perhaps it's actually a bug and no one realized that the Ord instance isn't actually needed.
18:00:47 <kallisti> ,,
18:01:00 <kallisti> ...
18:03:19 * Sgeo gets the discussion going in #haskell
18:08:29 <ais523> Sgeo: it's Ord (a->b), right? (->) is quite different from (a->b)
18:08:36 <Sgeo> Oh
18:09:01 <kallisti> ais523: probably.
18:09:16 <kallisti> > () > ()
18:09:17 <lambdabot> False
18:09:19 <elliott> ais523: people often abbreviate instances for (->) in that way, it's kinda gross though
18:09:21 <kallisti> ...bah
18:09:29 <ais523> elliott: does the language accept it?
18:09:33 <kallisti> no.
18:09:36 <elliott> no, but we're not talking in haskell
18:09:40 <ais523> well, OK
18:09:49 <ais523> but that's like abbreviating int* to int in C
18:10:00 <kallisti> not really
18:10:06 <ais523> even if you're not talking in C, it's still going to be really confusing
18:10:20 <kallisti> it's definitely obvious that you're saying (make functions do stuff) in much the same way as saying something like "an instance for monads"
18:11:04 <Sgeo> Oh
18:11:12 <Sgeo> There is a sensible definition of Ord for a->b
18:11:17 <Sgeo> Well, actually
18:11:22 <Sgeo> Don't know about sensible, but
18:11:30 <elliott> no there isn't
18:11:34 <Sgeo> :t max
18:11:35 <lambdabot> forall a. (Ord a) => a -> a -> a
18:12:04 <elliott> ais523: not really, since Ord (->) is totally invalid, and there's only one possible "expansion" to validity
18:12:08 <elliott> as opposed to Ord Int vs. Ord (Ptr Int)
18:12:14 <Sgeo> > max (+2) (+3) $ 5
18:12:15 <lambdabot> 8
18:12:24 <Sgeo> Well, not "sensible"
18:12:25 <elliott> Sgeo: ...and?
18:12:27 <elliott> :t compare
18:12:28 <lambdabot> forall a. (Ord a) => a -> a -> Ordering
18:12:30 <elliott> @src Ord
18:12:30 <lambdabot> class (Eq a) => Ord a where
18:12:30 <lambdabot> compare :: a -> a -> Ordering
18:12:30 <lambdabot> (<), (<=), (>), (>=) :: a -> a -> Bool
18:12:30 <lambdabot> max, min :: a -> a -> a
18:12:33 <ais523> elliott: Ord (a->a)?
18:12:36 <elliott> How do you implement compare
18:12:37 <Sgeo> But max and min are defined
18:12:46 <elliott> So? The others aren't
18:12:50 <kallisti> elliott: with guards.
18:12:53 <kallisti> and stuff
18:12:53 <elliott> But ah, I guess that's why
18:12:58 <copumpkin> I wrote a consistent compare for functions
18:12:59 <kallisti> or something.
18:13:02 <elliott> ais523: (a -> b), Ord (a -> a) isn't valid and wouldn't work if it did
18:13:04 <copumpkin> it was kind of slow though
18:13:13 <elliott> s/did$/was/
18:13:16 <kallisti> ais523: for example: "an Ord instance for monads" when you actually mean an Ord instance for (Monad m, Ord a) => m a or something.
18:13:24 <elliott> uh
18:13:25 <ais523> aha, you can define <= in terms min as (<=) a b = min a b == a
18:13:32 <copumpkin> kallisti: not sure how you'd define that
18:13:32 <elliott> kallisti: that instance would be terrible and not work
18:13:32 <ais523> that's where the call to == is coming from, probably
18:13:34 <elliott> and
18:13:36 <elliott> nobody says that
18:13:40 <ais523> *in terms of min
18:13:41 <elliott> and nobody would know what you meant if you said that :P
18:13:49 <elliott> ais523: right
18:13:56 <ais523> that's actually a plausible definition of <= for functions, it's just uncomputable
18:14:10 <ais523> (and non-transitive)
18:14:16 <copumpkin> I had a valid definition of it for functions
18:14:43 <elliott> copumpkin: What did it do
18:14:53 <elliott> Try the entire argument space?
18:15:03 <copumpkin> yeah, but it's not that simple
18:15:16 <elliott> That sounds fairly non-terminating :P
18:15:46 <ais523> copumpkin: does "valid" here imply "computable"?
18:16:05 * ais523 tries to work out if sorting functions lexicographically by what they map the entire argument space to makes any sort of sense
18:16:25 <ais523> I think it does with restrictions on the functions; differentiability is probably enough, but too strong
18:16:36 <Sgeo> WTF
18:16:38 <Sgeo> >deriv abs 0
18:16:42 <Sgeo> > deriv abs 0
18:16:43 <lambdabot> 0
18:16:46 <ais523> (that is, it's meaningful, but impossible to compute without more information)
18:16:47 <Sgeo> > deriv abs (-1)
18:16:48 <lambdabot> -1
18:16:59 <ais523> > deriv abs 20
18:17:00 <lambdabot> 1
18:17:03 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
18:17:10 <ais523> Sgeo: I bet it's just taking the average of left-derivative and right-derivative
18:17:14 <Sgeo> > deriv abs x
18:17:15 <lambdabot> signum x * 1
18:17:17 <kallisti> elliott: I'm pretty sure I've heard the phrase "instance for monads" used before. also: I wasn't anticipating my example would be reviewed for its plausibility of implementation. :P
18:17:25 <ais523> ah no, doing it symbolically
18:17:28 <Sgeo> @src deriv
18:17:28 <lambdabot> Source not found. Where did you learn to type?
18:17:28 <ais523> >deriv sin
18:17:32 <ais523> > deriv sin
18:17:33 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a)
18:17:33 <lambdabot> arising from a use of `...
18:17:44 <ais523> > deriv sin x
18:17:45 <lambdabot> 1 * cos x
18:17:51 <ais523> yep, symbolically all right
18:18:10 <kallisti> @hoogle (Monad m) => m a -> a
18:18:11 <lambdabot> Prelude (>>) :: Monad m => m a -> m b -> m b
18:18:11 <lambdabot> Control.Monad (>>) :: Monad m => m a -> m b -> m b
18:18:11 <lambdabot> Control.Monad.Instances (>>) :: Monad m => m a -> m b -> m b
18:18:11 <elliott> :t deriv
18:18:12 <lambdabot> forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b
18:18:21 <copumpkin> elliott, ais523: it only worked on finitely enumerable domains, and it would create a list of all functions
18:18:23 <elliott> ais523: not symbolically, I don't think
18:18:23 <kallisti> oh come on, Haskell, no breakMonads function?
18:18:25 <elliott> although it might be
18:18:27 <copumpkin> and then find who appeared first in that list
18:18:32 <elliott> I think it's AD
18:18:34 <copumpkin> it was awesome
18:18:36 <elliott> and the symbolicness comes from the Expr stuff
18:18:39 <elliott> which comes in because of x
18:18:41 <elliott> > deriv sin 99.4
18:18:42 <lambdabot> 0.4257869286693041
18:18:45 <elliott> :t deriv sin 99.4
18:18:46 <lambdabot> forall a. (Floating a) => a
18:18:47 <elliott> yeah
18:18:50 <ais523> elliott: how does it differentiate sin to cos without doing it symbolically?
18:18:54 <ais523> and actually say the result is cos
18:19:02 <ais523> is it just guessing that the result acts like cos?
18:19:03 <elliott> ais523: that's part of the definition of sin
18:19:03 <elliott> :t sin
18:19:04 <lambdabot> forall a. (Floating a) => a -> a
18:19:10 <elliott> it's part of the Floating instance for Dif
18:19:20 -!- zzo38 has joined.
18:19:23 <ais523> > deriv (\a -> sin a * sin a) x
18:19:24 <lambdabot> 1 * cos x * sin x + sin x * (1 * cos x)
18:19:24 <kallisti> tl;dr typeclass hacks.
18:19:32 <elliott> it's not a typeclass hack
18:19:52 <ais523> elliott: it has to know that the input is sin, surely?
18:19:56 <elliott> ais523: what
18:20:02 <ais523> otherwise it's comparing functions and we already know that's impossible
18:20:10 <elliott> no it's not
18:20:13 <zzo38> @messages
18:20:14 <lambdabot> You don't have any new messages.
18:20:20 <elliott> :t deriv
18:20:21 <lambdabot> forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b
18:20:30 <elliott> instance Blah (Dif a) where sin = ...
18:20:45 <ais523> elliott: right, symbolic
18:20:48 <elliott> no
18:20:49 <elliott> not symbolic
18:21:03 <ais523> the definition of sin will be something that says "this is sin"
18:21:13 <ais523> thus, it's symbolic
18:21:17 <elliott> no
18:21:17 <elliott> not symbolic
18:21:19 <ais523> unless you're using a really weird definition of the term
18:21:24 <elliott> ais523: the reason it says cos
18:21:26 <elliott> is because you used "x"
18:21:27 <elliott> :t x
18:21:28 <lambdabot> Expr
18:21:30 <elliott> > sin x
18:21:30 <lambdabot> sin x
18:21:31 <elliott> > cos x
18:21:32 <ais523> you're just saying lots of stuff that proves it's symbolic
18:21:32 <lambdabot> cos x
18:21:39 <ais523> you are still doing stuff that says it's symbolic
18:21:45 <elliott> ais523: you're just saying lots of stuff that proves you don't know wtf it's doing
18:21:47 <elliott> THE EXPR STUFF IS SYMBOLIC
18:21:50 <elliott> the deriv stuff isn't
18:22:06 <ais523> elliott: it's printing the result symbolically because I used x, indeed
18:22:18 <ais523> but it was symbolic all along, because you can't go backwards from numerical to symbolic, in general
18:22:18 -!- elliott has left ("ragequit").
18:22:56 <Sgeo> elliott rageparts easily.
18:23:01 <kallisti> ais523: presumably it has to do some maths
18:23:04 <Sgeo> I'm not used to elliott rageparting
18:23:07 <kallisti> ais523: on top of being symbolicish
18:23:27 <ais523> symbolic differentiation basically means that it's using some sort of AST or similar representation of the functions, and operating on that
18:23:33 <ais523> rather than evaluating the functions and operating on the resulting values
18:23:40 -!- elliott has joined.
18:23:44 <ais523> and then somehow making them back into functions
18:23:55 <elliott> ais523: I suggest you look up automatic differentiation
18:23:59 <elliott> rather than arguing from incredulity
18:24:59 <ais523> elliott: I've just looked it up; Wikipedia says that it isn't symbolic differentiation, then goes on to define it, with a definition that shows that it clearly is symbolic after all
18:25:11 <ais523> unless "symbolic differentation" refers to something other than differentiation which is symbolic
18:25:13 <elliott> you are incorrect
18:25:21 <zzo38> ais523: Then, go there and fix it if it is wrong?
18:25:25 <elliott> http://blog.sigfpe.com/2005/07/automatic-differentiation.html
18:25:36 <elliott> the fact that the operations are defined with variables
18:25:38 <elliott> does not make them symbolic
18:25:40 <zzo38> Or, put a note on the Talk page to notify them in case someone has reasons to keep it how it is?
18:25:46 <elliott> because there are no symbols at runtime
18:25:49 <elliott> and no symbol manipulation at runtime
18:25:55 <elliott> the only thing involving symbols or symbol manipulation is Expr
18:26:00 <elliott> which is completely distinct from the automatic differentiation code
18:26:07 <elliott> and unrelated to it
18:27:26 * elliott tries to find sigfpe's longer post.
18:28:24 <ais523> elliott: OK, so automatic differentiation there is an optimization of an optimization of symbolic differentiation where you're superstrict
18:28:30 <elliott> no
18:28:33 <ais523> it's basically a specialiser
18:28:36 <elliott> no
18:28:50 <ais523> elliott: if you give in x as the argument, then you don't get any specialisation hapening
18:28:52 <ais523> *happening
18:28:53 * elliott will just keep saying "no" every time you make an incorrect statement, since you don't actually listen to the corrections.
18:28:58 <elliott> ais523: you can't give x in as an argument. x is not a number.
18:29:04 <elliott> > deriv (sin :: Double -> Double) pi
18:29:07 <ais523> elliott: nor is d
18:29:12 <elliott> you cannot pass x to that sin
18:29:15 <elliott> because it only takes Doublse
18:29:16 <elliott> Doubles
18:29:19 <elliott> oh wait, type error
18:29:22 -!- quintopia has quit (Ping timeout: 244 seconds).
18:29:24 <elliott> sigh
18:29:25 <elliott> anyway
18:29:28 <ais523> automatic differentiation works because it redefines * on d
18:29:30 <ais523> such that d*d = 0
18:29:32 <elliott> no
18:29:53 <lambdabot> Couldn't match expected type `Data.Number.Dif.Dif a'
18:29:53 <lambdabot> against inferr...
18:29:55 <ais523> elliott: the type error there is /mandatory/
18:30:00 <ais523> because, d is not a Double
18:30:10 <elliott> yes, it is, it was a trivial mistake and irrelevant because you don't actually understand how AD works
18:30:17 <Sgeo> > deriv (sin :: Dif Double -> Dif Double) pi
18:30:18 -!- Phantom_Hoover has joined.
18:30:18 <lambdabot> -1.0
18:30:31 <Sgeo> I presume a Dif Double accepts d
18:30:33 <elliott> and also, are not interested in understanding, as opposed to just telling me I'm wrong and apparently Wikipedia and everyone else on the planet too based on misunderstandings
18:30:35 <elliott> so I'm done
18:30:46 <ais523> elliott: I've read the page, and I understand AD pretty well, by now
18:30:53 <ais523> it's orthogonal to symbolic versus not symbolic
18:31:11 <ais523> however, it requires redefining terms in the original expression
18:31:20 <ais523> and thus, you need a symbolic version of the input
18:31:46 <elliott> no you don't, you just need a polymorphic function
18:32:25 <Sgeo> Is there an instance (Num a) => Num (Dif a)?
18:32:35 <kallisti> I would hope so.
18:32:46 <elliott> > let f :: forall a. (Floating a) => a -> a; f x = sin x + cos x {- haskell has no facility for "inspecting" this function symbolically -} in (f (pi :: Double), deriv f (pi :: Double))
18:32:47 <lambdabot> (-0.9999999999999999,-1.0000000000000002)
18:33:32 <ais523> elliott: actually, Haskell /can/ inspect that function symbolically
18:33:38 <elliott> incorrect
18:33:45 <ais523> create a new type, of typeclass Floating, that builds an AST
18:33:48 <ais523> and defines sin, +, cos
18:33:54 <ais523> (which it does, as it's of typeclass Floating)
18:34:00 <elliott> that is not "inspecting the function symbolically"
18:34:06 <elliott> also, types aren't "of typeclasses".
18:34:07 <ais523> how is it not?
18:34:15 <ais523> well, with an instance of that typeclass
18:34:20 <elliott> ais523: by that argument, map is "symbolic"
18:34:24 <ais523> I didn't mean to imply that a type could only belong to one typeclass
18:34:30 <elliott> > map (\x -> "f " ++ show x) [1,2,3,4]
18:34:31 <lambdabot> ["f 1","f 2","f 3","f 4"]
18:34:35 <ais523> elliott: but, umm, it is?
18:34:35 <elliott> OMG SYMBOLIC!
18:34:54 <kallisti> > cycle ["yes no "] --tl;dr
18:34:56 <lambdabot> ["yes no ","yes no ","yes no ","yes no ","yes no ","yes no ","yes no ","yes...
18:34:59 <kallisti> oops
18:35:02 <elliott> > foldr (\a b -> a ++ " `f` (" ++ b ++ ")") "z" ["a","b","c","d"]
18:35:03 <lambdabot> "a `f` (b `f` (c `f` (d `f` (z))))"
18:35:04 <kallisti> > cycle "yes no " --tl;dr
18:35:05 <elliott> OMG FOLDR IS SYMBOLIC
18:35:05 <lambdabot> "yes no yes no yes no yes no yes no yes no yes no yes no yes no yes no yes ...
18:35:12 <ais523> elliott: again, why would you expect it to not be?
18:35:16 <elliott> EVERYTHING IS SYMBOLIC DESPITE THERE BEING NO SYMBOLIC SEMANTICS IN HASKELL OR CODE IN GHC
18:35:16 <ais523> it doesn't need to evaluate anything
18:35:26 <elliott> ais523: it's true that if you define every function as symbolic, then AD is symbolic, yes.
18:35:39 <elliott> maybe there are even two people on the planet stupid enough to take such a view
18:35:41 <ais523> wait, actually, no
18:35:54 <ais523> hmm
18:36:27 <elliott> ais523: btw, I think you'll find that most implementations of AD look like data Dif a = Dif a a, which has a conspicuous lack of symbolic d.
18:36:41 <elliott> (d = Dif 0 1, _not_ symbolic at all, _not_ handled specially by the Num instance at all)
18:36:43 <ais523> elliott: right, that's a specialization
18:36:55 <elliott> no, that's the definition
18:37:00 <kallisti> > deriv (const 4) pi
18:37:02 <lambdabot> 0
18:37:05 <elliott> http://en.wikipedia.org/wiki/Dual_number
18:37:13 <ais523> ah, I know why map isn't symbolic, despite everything; it's because it doesn't try to provide definitions for any of the subexpressions of the original
18:38:36 <Phantom_Hoover> AD is that differentiation thing— yep.
18:39:35 -!- quintopia has joined.
18:39:35 -!- quintopia has quit (Changing host).
18:39:35 -!- quintopia has joined.
18:39:53 <Sgeo> > deriv (\x -> x^x) x
18:39:54 <lambdabot> No instance for (GHC.Real.Integral
18:39:54 <lambdabot> (Data.Number.Dif.Dif...
18:39:54 <Phantom_Hoover> Are you discussing whether it counts as symbolic derivation or not.
18:39:58 <Sgeo> > deriv (\x -> x**x) x
18:39:58 <elliott> oh, forgot Conal has a serise of posts about it: http://conal.net/blog/posts/what-is-automatic-differentiation-and-why-does-it-work
18:39:59 <lambdabot> (1 * recip x * x + log x * 1) * exp (log x * x)
18:40:00 <zzo38> What should I name the function to put the barrier monad into the other form?
18:40:01 <ais523> elliott: hmm, I think you'll agree with the following statement: "Any function that doesn't mention Dif and is valid input to dif is also valid input to \f -> f x"
18:40:06 <elliott> Phantom_Hoover: no, ais is blindly claiming it is without justification
18:40:18 <ais523> do you?
18:40:43 <ais523> (where x is Expr's x, there)
18:40:44 <elliott> ais523: no, (Dif a) could easily have instances that Expr doesn't
18:40:55 <kallisti> Replace every number X with the number x + x'ε, where x' is a real number, but ε is nothing but a symbol with the property ε^2 = 0. Using only this, we get for the regular arithmetic
18:40:58 <ais523> elliott: does it?
18:40:59 <kallisti> elliott: IT'S JUST A SYMBOL DUDE
18:41:02 <kallisti> elliott: SYMBOLIC
18:41:02 <ais523> and would it make sense for it to?
18:41:02 <Phantom_Hoover> It's... kind of symbolic, in that it only works for functions that only use + and *, but that's not really symbolic in the conventional sense.
18:41:09 <ais523> and couldn't the same instances be added to Expr too?
18:41:16 <elliott> kallisti: moron
18:41:25 <elliott> Phantom_Hoover: Uhh, it works for functions that use plenty other than + and *.
18:41:32 <Phantom_Hoover> elliott, hmm, like?
18:41:37 <elliott> Phantom_Hoover: AD is widely used to differentiate entire procedural algorithms written in C.
18:41:44 <elliott> Phantom_Hoover: Like anything?
18:41:47 <elliott> Any operator.
18:41:55 <kallisti> elliott: (note: sarcasm)
18:41:57 <elliott> ais523: I don't know whether it does
18:42:01 <ais523> elliott: but they need either the source code or the resulting binary to work, presumably
18:42:05 <Phantom_Hoover> Sorry, I meant to clarify, that doesn't use any numerical operations other than + and *.
18:42:21 <elliott> ais523: if you made your question precise -- "any f :: (Num a) => a -> b can have be applied to (x :: Expr) where instance Num Expr"... no shit?
18:42:28 <elliott> Phantom_Hoover: ...no?
18:42:41 <ais523> so, I think by "symbolic", I mean "there is enough polymorphism present that you can just give a lot of AST-building definitions of the operators and end up with a parse tree of the function"
18:42:46 -!- zzo38 has quit (Remote host closed the connection).
18:42:47 <kallisti> > deriv sin (x :: Expr)
18:42:48 <ais523> which is clearly different from your definition, thus the argument
18:42:49 <lambdabot> 1 * cos x
18:42:57 <Phantom_Hoover> elliott, how would you use it on, say, ln x.
18:43:04 <kallisti> I notice a distinct lack of + and *
18:43:08 <elliott> ais523: your definition is ridiculous: every polymorphic function becomes symbolic
18:43:17 <Phantom_Hoover> Without using the series expansion; that's just expressing it in terms of + and *.
18:43:23 <kallisti> > deriv log (x :: Expr)
18:43:24 <lambdabot> 1 * recip x
18:43:29 <elliott> > deriv log (pi :: Double)
18:43:30 <lambdabot> 0.3183098861837907
18:43:35 <ais523> elliott: hmm, I suppose they are
18:43:36 <elliott> Using Expr just confuses things.
18:43:39 <ais523> and that's probably a good thing
18:43:43 <kallisti> elliott: I think it clarifies.
18:43:48 <elliott> it doesn't
18:43:51 <elliott> because Expr only works for a small subset
18:44:05 <elliott> iirc it fucks up on abs or something, I forget exactly what I ran into when I tried to use AD with Expr
18:44:05 <ais523> well, because it's missing instances, but right
18:44:13 <elliott> no
18:44:14 <kallisti> > abs x
18:44:15 <elliott> because the types don't work out
18:44:16 <lambdabot> abs x
18:44:22 <kallisti> > deriv abs (x :: Expr)
18:44:23 <lambdabot> signum x * 1
18:44:32 <ais523> > deriv signum (x :: Expr)
18:44:32 <lambdabot> 0
18:44:35 <elliott> <elliott> iirc it fucks up on abs or something, I forget exactly what I ran into when I tried to use AD with Expr
18:44:42 <elliott> "I forget exactly what I ran into"
18:44:50 <ais523> indeed
18:45:00 <ais523> and I'm currently trying to work out what leads to the sin -> cos case
18:45:21 <kallisti> Floating instance for dual numbers.
18:45:23 <kallisti> I think?
18:45:29 <elliott> ais523: the definition of sin for Diff references cos, obviously
18:45:35 <elliott> ais523: as the definition of sin for dual numbers /involves/ cos
18:45:40 <elliott> because of the infinitesimal part
18:45:49 <elliott> ais523: but the sin and cos referenced are those of the underlying numeric type
18:45:54 <ais523> aha, of course
18:45:59 <elliott> and for Expr, that consists of prepending "cos " (roughly)
18:46:40 <Phantom_Hoover> elliott, but, um, seriously, the proof of AD uses a polynomial; how do you use it on things that aren't polynomials?
18:46:53 <kallisti> magic.
18:47:03 <ais523> Phantom_Hoover: well, all the things that it's being tried on are polynomials
18:47:14 <ais523> in the case of sin/cos, they're infinite-degree, but still polynomials
18:47:26 <ais523> and in general, working on all polynomials means it works on anything that has a Taylor expansion
18:47:35 <ais523> and things that don't are unlikely to be meaningfully differentiable anyway :)
18:47:55 <elliott> Note that the standard ad libraries don't actually define things via Taylor expansions.
18:48:04 <Phantom_Hoover> elliott, yes, so how do they do it?
18:48:07 <ais523> no, because it would be stupid to do so
18:48:17 <ais523> they're only relevant in proving that the technique works
18:48:23 <kallisti> Phantom_Hoover: they use basic calculus.
18:48:30 <Phantom_Hoover> Um, no?
18:48:38 <elliott> Phantom_Hoover: sin = liftAD sin cos
18:48:56 <elliott> for instance
18:49:01 <elliott> the ad library has
18:49:07 <elliott> lift1 :: Num a => (a -> a) -> (D t a -> D t a) -> t a -> t a
18:49:08 <Phantom_Hoover> What does liftAD do?
18:49:19 <elliott> where sin = lift1 sin cos
18:49:25 <elliott> Phantom_Hoover: Depends on which type you use
18:49:29 <elliott> for the simple
18:49:29 <elliott> data Forward a = Forward !a a deriving (Show, Data, Typeable)
18:49:30 <elliott> it's
18:49:33 <elliott> lift1 f df (Forward b db) = Forward (f b) (dadb * db)
18:49:34 <elliott> where
18:49:34 <elliott> Id dadb = df (Id b)
18:49:42 <elliott> (where
18:49:42 <elliott> type D Forward = Id
18:49:42 <elliott> )
18:50:58 -!- oerjan has joined.
18:51:21 <elliott> oerjan: why did you put the tunes logs in the topic? I logread but didn't see anything about it :P
18:51:43 <oerjan> elliott: it was while glogbot was crashed
18:51:52 <kallisti> elliott: that's a lot of glue code..
18:51:52 <elliott> ah
18:51:58 <elliott> kallisti: because it's generic
18:52:01 <elliott> kallisti: it has all kinds of AD types
18:52:12 <elliott> including like
18:52:13 <elliott> -- | A @Tape@ records the information needed back propagate from the output to each input during 'Reverse' 'Mode' AD.
18:52:13 <elliott> data Tape a t
18:52:13 <elliott> = Lift !a
18:52:13 <elliott> | Var !a {-# UNPACK #-} !Int
18:52:14 <elliott> | Binary !a a a t t
18:52:16 <elliott> | Unary !a a t
18:52:17 <kallisti> elliott: right. I think probably a simple example would be easier to follow though?
18:52:18 <elliott> deriving (Show, Data, Typeable)
18:52:20 <elliott> -- | @Reverse@ is a 'Mode' using reverse-mode automatic differentiation that provides fast 'diffFU', 'diff2FU', 'grad', 'grad2' and a fast 'jacobian' when you have a significantly smaller number of outputs than inputs.
18:52:23 <elliott> newtype Reverse a = Reverse (Tape a (Reverse a)) deriving (Show, Typeable)
18:52:25 <elliott> that uses StableNames and observable sharing and shit
18:52:26 <elliott> kallisti: I was giving an actual example
18:52:30 <kallisti> elliott: yes I know.
18:52:32 <elliott> to show something that actually works
18:53:01 <elliott> big :: Nat -> Bool
18:53:01 <elliott> big (S (S (S (S (S (S (S (S (S (S _)))))))))) = True
18:53:01 <elliott> big _ = False
18:53:02 <elliott> what a swell function
18:53:36 <kallisti> but you could also just say sin (Dif x dx) = Dif (sin x) (dx * cos x)
18:53:39 <kallisti> to demonstrate the basic idea.
18:53:48 <elliott> sure
18:53:51 <Phantom_Hoover> elliott, hangonhangonhangon, is liftAD just /defining/ the derivative?
18:54:07 <elliott> Phantom_Hoover: sin on the dual numbers inherently involves cos.
18:54:13 <elliott> It's not "defining" the derivative.
18:54:26 <elliott> Computing sin on the dual numbers involves computing sin on the underlying number type, and cos on the same dual number type.
18:54:39 <elliott> You could also define "sin x = x+1", it just wouldn't be sin.
18:54:50 <elliott> Similarly, the only sin for the dual numbers is lift1 sin cos.
18:55:02 <Phantom_Hoover> Oh, OK.
18:57:10 <kallisti> elliott: the formal definition of dual numbers is oddly similar to complex numbers.
18:57:22 <elliott> kallisti: it's not really odd
18:57:22 <Phantom_Hoover> Well nawww.
18:57:26 <elliott> kallisti: complex numbers is adding i^2 = -1
18:57:29 <elliott> kallisti: dual numbers is adding d^2 = 0
18:57:39 <elliott> they're both gonna end up looking pretty similar :P
18:57:44 <kallisti> right that is the similarity I was talking about. :P
18:58:10 <kallisti> it's basically just a different complex number algebra.
18:58:44 <Phantom_Hoover> A different complex number algebra?
18:58:45 -!- derrik has joined.
18:59:12 <elliott> oh you can do second derivatives like this also you just need a second level
18:59:13 <elliott> or more generally
18:59:19 <elliott> data Diff a = Diff a (Diff a)
18:59:24 <Phantom_Hoover> The complex numbers are just ((R,R), +, *); change + or * and you don't have the complex numbers any more.
18:59:27 <elliott> but some things stop terminating if you do it like /that/ :P
19:00:01 <kallisti> Phantom_Hoover: you can't take square roots, sins, and cosines of complex numbers?
19:00:17 <kallisti> well, scratch square roots actually
19:00:27 <Phantom_Hoover> kallisti, those are all derived from the stuff I stated.
19:01:13 <kallisti> oh right division.
19:01:15 * elliott wishes there was Automatic Integration. :p
19:01:20 <elliott> Codual numbers!
19:01:31 <kallisti> elliott: make them
19:01:42 <kallisti> publish paper
19:01:43 <kallisti> get rich
19:03:31 <Phantom_Hoover> kallisti, we can already do integration on polynomials really easily.
19:04:07 <kallisti> but not with codual numbers!
19:04:25 <elliott> Phantom_Hoover: --Phantom "Help runge kutta" Hoverboard
19:04:49 <Phantom_Hoover> elliott, hey, I found highly contradictory information on what it could be applied to!
19:05:13 <elliott> Phantom_Hoover: (Wait what if we just rewrote Newtonian physics with polynomials?)
19:05:19 <elliott> Phantom_Hoover: (THINK ABOUT IT)
19:05:28 <kallisti> Phantom_Hoover: are you sure you don't need like triangles or something to define sine?
19:05:30 <Phantom_Hoover> elliott, they tried that, turns out it's impossible.
19:05:42 <elliott> Phantom_Hoover: Maybe they didn't try hard enough?
19:05:48 <elliott> Phantom_Hoover: Maybe they used the wrong foundation.
19:05:52 <Phantom_Hoover> kallisti, sin x = x - x^3/3! + x^5/5! - ...
19:05:53 <elliott> Let's try it with THE POWER OF TYPE THEORY AND UNSAFECOERCE.
19:05:58 -!- azaq23 has joined.
19:06:02 -!- azaq23 has quit (Changing host).
19:06:02 -!- azaq23 has joined.
19:06:32 <Phantom_Hoover> kallisti, this definition is demonstrably equivalent to the triangle one, although it's pretty circuitous to actually show it.
19:06:45 <kallisti> Phantom_Hoover: oh okay. but then you forgot the infinite paper.
19:06:52 <olsner> elliott: aren't those two opposite powers?
19:06:52 <elliott> Phantom_Hoover: 3/3! = 1! = 1 idiot dummy
19:07:04 <elliott> sin x = x - x^1 + x^1 - ...
19:07:05 <elliott> ===
19:07:08 <elliott> sin x = x - x + x - ...
19:07:10 <elliott> .Q.E.D
19:07:10 <Phantom_Hoover> olsner, yes, they fight crime.
19:07:24 <kallisti> elliott "bad at teaching" hird
19:07:28 <Phantom_Hoover> You've proven that sin x doesn't converge for all x?
19:07:35 <Phantom_Hoover> Well, all nonzero x.
19:07:41 <elliott> Phantom_Hoover: no we just need to use
19:07:42 <olsner> ooh, TYPE CRIME, it's like thoughtcrime
19:07:44 <elliott> ZETA FUNCTION REGULARISATION
19:07:49 <elliott> it solves all summing problems
19:07:57 <Phantom_Hoover> elliott, I think fax may have been a bad influence on you.
19:08:00 * kallisti has never had a problem summing.
19:08:23 <elliott> Phantom_Hoover: OK I have determined that sin(x) = 1/4e^pi + (x*0.0000000000014) for all x apart from 3.
19:08:30 <elliott> sin(3) = god.
19:08:53 <Phantom_Hoover> Is that what zeta function regularisation actually says.
19:09:05 <elliott> Yes. It has helped us find god.
19:09:12 <elliott> Thanks, zeta function regularisation. Theta function regularisation.
19:09:52 <elliott> Phantom_Hoover: I really want to believe in string theory because one kind of string theory involves using zeta function regularisation to work out a sum for actual physical things???
19:10:02 <elliott> I want to believe that God is awesome enough to put that into physics.
19:10:11 <Phantom_Hoover> elliott, check out the WP article?
19:10:20 <kallisti> elliott: too bad that's bad because string theory ew
19:10:31 <elliott> Phantom_Hoover: ?
19:10:45 <Phantom_Hoover> The first example is bog-standard QFT.
19:11:00 <elliott> Phantom_Hoover: Is it? YESSSSSSSSSSSSS
19:11:04 <elliott> THANKS GOD
19:11:12 <elliott> kallisti: Aw c'mon, everyone likes string theory, it's so elegant!
19:11:34 <elliott> (Before Phantom_Hoover rips into me: it's a joke.)
19:12:15 <Phantom_Hoover> elliott, wait, how much do you actually know about zeta function regularisation beyond "you can use it to prove mad things about infinite sums".
19:12:29 <kallisti> elliott: sometimes I feel like have a superpower to recognize jokes.
19:12:33 <kallisti> unless they're just incredibly deadpan.
19:12:41 <elliott> Phantom_Hoover: I am like the world's foremost expert of zeta function regularisation?
19:12:55 <Phantom_Hoover> elliott, what's the zeta function.
19:13:05 <elliott> Phantom_Hoover: RIEMANNIAN
19:13:22 <olsner> elliott: of all the people I know you seem to know the most about it, so that's a yes
19:13:29 <kallisti> Riemann, mon.
19:13:36 <Phantom_Hoover> olsner, you knew fax, no?
19:14:22 <elliott> Zeta-Function Regularization is Uniquely Defined and Well
19:14:24 <elliott> E. Elizalde
19:14:26 <elliott> (Submitted on 6 Aug 1993)
19:14:28 <elliott> Hawking's zeta function regularization procedure is shown to be rigorously and uniquely defined, thus putting and end to the spreading lore about different difficulties associated with it. Basic misconceptions, misunderstandings and errors which keep appearing in important scientific journals when dealing with this beautiful regularization method ---and other analytical procedures--- are clarified and corrected.
19:14:33 <elliott> Q.E.D. bitchen
19:14:46 <olsner> Phantom_Hoover: nope, I've never used fax
19:15:11 <Phantom_Hoover> elliott, is E. Elizalde you in a previous life.
19:15:17 <elliott> Phantom_Hoover: Yes.
19:15:27 <elliott> Phantom_Hoover: I revived two years later.
19:15:56 <Phantom_Hoover> I should probably learn some analysis sometime, it seems cool.
19:16:52 <elliott> Phantom_Hoover: Yes then you will know 1 thing, ha ha ha
19:17:05 <elliott> <Phantom_Hoover> :'(
19:17:15 <oerjan> <kallisti> oh come on, Haskell, no breakMonads function? <-- it makes very little sense to do that for an arbitrary monad
19:17:46 <oerjan> because different monads need different kind of setup to get started
19:17:52 <Sgeo> elliott, update
19:17:55 <elliott> oerjan: some can't get started at all
19:18:01 <elliott> kallisti: dupdog
19:18:02 <Phantom_Hoover> What does breakMonads do.
19:18:17 <oerjan> Phantom_Hoover: <kallisti> @hoogle (Monad m) => m a -> a
19:18:28 <oerjan> would be its type
19:18:56 <Phantom_Hoover> Ah, yes, the classic "help i want out" response to a monad.
19:19:33 <Sgeo> Don't most useful monads have a function like that, except with more arguments?
19:19:37 <oerjan> i mean, _even_ if you admit unsafePerformIO it still doesn't make sense for every monad.
19:19:54 <elliott> oerjan: unsafePerformIO is in the report :)
19:19:59 <oerjan> Sgeo: yeah. except sometimes the output too has more arguments.
19:20:05 <elliott> Sgeo: not necessarily
19:20:09 <oerjan> e.g. lists
19:20:15 <elliott> I mean, the function monad doesn't, except it does if you consider the input "more arguments"
19:20:18 <Phantom_Hoover> Sgeo, and there's the crux of the matter: m a isn't associated with any particular value of a.
19:20:30 <kallisti> 14:17 < elliott> kallisti: dupdog
19:20:33 <kallisti> elliott: what about it?
19:20:33 <Sgeo> elliott, why shouldn't I?
19:20:45 -!- sebbu2 has joined.
19:20:45 -!- sebbu2 has quit (Changing host).
19:20:45 -!- sebbu2 has joined.
19:20:49 <kallisti> oerjan: well you could always add it as a method to Monad, with the default definition of undefined
19:20:58 <elliott> Sgeo: well you are basically just defining "useful monad" as "something which can be turned into a function from something else to something with an a in it"
19:21:01 <kallisti> so that it still breaks arbitrary monads. :>
19:21:14 <oerjan> kallisti: yeah fail needs company in its brokenness
19:21:15 <elliott> But yes, like Phantom_Hoover said.
19:21:18 <elliott> I think (a -> Bool) is a monad.
19:21:22 <elliott> (pure sets)
19:21:30 <elliott> oh, for Eq a
19:21:46 -!- sebbu has quit (Ping timeout: 248 seconds).
19:21:58 <elliott> er hm
19:21:59 <oerjan> elliott: Cont r may be a better example
19:22:02 <Sgeo> elliott, what's wrong with that as a definition of a useful monad?
19:22:02 <elliott> how do you do join
19:22:08 <elliott> Sgeo: (a -> Bool) -> a
19:22:11 <elliott> can you write that?
19:22:12 <oerjan> you just cannot get an a result out of that
19:22:38 <Phantom_Hoover> elliott, least value of a such that the function results in true, for some arbitrary well-ordering.
19:22:42 <oerjan> assuming r and a are not allowed to depend on each other
19:22:44 <Sgeo> oerjan, even with applying id?
19:22:46 <elliott> Phantom_Hoover: you only have (Eq a)
19:22:49 <elliott> Sgeo: um
19:22:51 <Phantom_Hoover> ZFC'd.
19:22:52 <elliott> newtype PS a = PS (a -> Bool)
19:22:54 <Sgeo> erm, using id
19:22:58 <elliott> run :: (Eq a) => PS a -> a
19:23:08 <oerjan> Sgeo: id doesn't give you Cont r a -> a
19:23:12 <elliott> oh
19:23:13 <elliott> for Cont, ok
19:23:21 -!- nooga has joined.
19:23:21 <Sgeo> :t runCont
19:23:22 <lambdabot> forall r a. Cont r a -> (a -> r) -> r
19:23:40 <elliott> oerjan: oh PS isn't a monad
19:23:41 <elliott> unfortunately
19:23:41 <Sgeo> You... get an r?
19:23:45 <oerjan> obviously that shows id works if a = r
19:23:48 <elliott> because it's not a functor, it's a contrafunctor
19:24:07 <elliott> er, hmm
19:24:09 <elliott> that seems wrong
19:24:14 <elliott> because Set /is/ a monad, modulo Ord constraint
19:24:16 <elliott> so what's up?
19:24:24 <oerjan> Sgeo: note that breakMonad was supposed to have the type forall m a. Monad m => m a -> a
19:24:37 <elliott> fmap :: (a -> b) -> (a -> Bool) -> (b -> Bool)
19:24:37 <oerjan> *breakMonads
19:24:41 <elliott> wtf
19:24:46 <elliott> oerjan: how is Set a monad again? that makes no sense
19:25:01 <oerjan> elliott: it's not
19:25:07 <elliott> oerjan: MODULO ORD CONSTRAINT
19:25:42 <elliott> ugh
19:25:47 <elliott> it's because Set can access its inner "list of values"
19:26:22 <oerjan> elliott: apply f to that list, then nub . sort, i presume
19:26:40 <elliott> oerjan: yes, but it's really gross because it means Set is nothing like a set :(
19:26:44 <oerjan> oh, and set union somewhere
19:26:51 <kallisti> elliott: yes the set monad is basically the same as the list monad, modulo ord constraint
19:27:03 <elliott> oerjan: even worse: you can't define contramap for Set
19:27:09 <elliott> but you /can/ for (-> Bool)
19:27:14 <elliott> Sets are like the opposite of sets :P
19:28:53 <Sgeo> contramap?
19:28:59 -!- sebbu2 has changed nick to sebbu.
19:29:49 <elliott> Sgeo: see contravariant package
19:31:26 <Sgeo> contramap scares me
19:31:32 <oerjan> -> Bool is a contravariant functor, yes. also it's its own adjoint functor, and when you compose those you get Cont Bool as the monad.
19:32:08 <elliott> oerjan: yes, i'm just annoyed that (Set a) and (a -> Bool) are almost opposites
19:32:14 <elliott> Set has fmap, (-> Bool) has contramap
19:32:41 <elliott> I would think of the former as the latter except (a) faster and (b) you can get a magic ordered list of values out of it, but that doesn't affect what you can actually "do" to it :P
19:33:16 <oerjan> elliott: it may be somewhat analogous to how a finite dimensional vector space is its own dual, but the isomorphism is not natural (you need to pick an arbitrary basis)
19:33:24 <elliott> heh
19:33:55 <elliott> oerjan: I'm trying to think of monads that you can't "run" apart from data Trivial a = Trivial (or was it data Trivial a) and Cont...
19:34:04 <elliott> having a hard time of it :P
19:34:25 <kallisti> elliott: hmmm.. what is "run" for lists?
19:34:40 <elliott> kallisti: head :P
19:34:46 <kallisti> ah
19:34:47 <elliott> but more relevantly,
19:34:50 <elliott> [a] -> Maybe a
19:34:57 <elliott> Sgeo probably considers that close enough to "running"
19:35:02 <elliott> since (Maybe a) sometimes has an a in it
19:35:20 <kallisti> elliott: at least you know when it doesn't run.
19:35:55 <kallisti> so wait is Sgeo arguing in favor of breakMonads or something? I haven't been paying attention
19:36:44 <oerjan> come to think of it, inner products are what you add to _make_ that self-dualism natural for vector spaces, maybe there's an analogue for Set a and a -> Bool
19:39:11 <Sgeo> safeIndex would probably be better
19:39:30 <Sgeo> fsvo "better"
19:39:47 <elliott> FSVO IS MINE
19:39:48 <elliott> MIIIIIIIINE
19:41:10 <kallisti> elliott: friendship fsvo
19:41:22 <olsner> elliott: ... fsvo fsvo
19:41:30 <elliott> iouhfjkhflsd
19:41:36 <kallisti> elliott: hi friendship fsvo help
19:41:46 <elliott> monqy: HELP
19:41:50 <kallisti> monqy: hlep
19:41:51 <Phantom_Hoover> fsvo friendship
19:42:58 <kallisti> :t Expr
19:42:59 <lambdabot> Not in scope: data constructor `Expr'
19:43:02 <kallisti> @hoogle Expr
19:43:03 <lambdabot> Text.Parsec.Expr module Text.Parsec.Expr
19:43:03 <lambdabot> Text.ParserCombinators.Parsec.Expr module Text.ParserCombinators.Parsec.Expr
19:43:03 <lambdabot> Text.ParserCombinators.Parsec.Expr buildExpressionParser :: OperatorTable tok st a -> GenParser tok st a -> GenParser tok st a
19:43:19 <kallisti> hmm is there a SimpleReflect type that has a parameter?
19:44:10 <elliott> http://hackage.haskell.org/packages/archive/show/0.4.1.1/doc/html/SimpleReflect.html
19:45:47 <kallisti> so no
19:46:07 <kallisti> would a... simple-reflect monad be possible?
19:46:15 <oerjan> heh
19:46:44 <monqy> elliott, kallisti: hi
19:46:51 <elliott> monqy: stop kallisti
19:46:57 -!- sebbu2 has joined.
19:46:57 -!- sebbu2 has quit (Changing host).
19:46:57 -!- sebbu2 has joined.
19:47:01 <elliott> kallisti: no. return :: a -> Reflect a
19:47:02 <monqy> qhat did kallisti do
19:47:03 <elliott> what string do you use?
19:47:09 <elliott> <Sgeo> fsvo "better"
19:47:09 <elliott> <elliott> FSVO IS MINE
19:47:09 <elliott> <elliott> MIIIIIIIINE
19:47:09 <elliott> <kallisti> elliott: friendship fsvo
19:47:09 <elliott> <olsner> elliott: ... fsvo fsvo
19:47:10 <elliott> <elliott> iouhfjkhflsd
19:47:12 <elliott> <kallisti> elliott: hi friendship fsvo help
19:47:14 <elliott> <elliott> monqy: HELP
19:47:16 <elliott> <kallisti> monqy: hlep
19:47:26 <monqy> kallisti: :(
19:49:52 <kallisti> :)
19:49:58 -!- Klisz has joined.
19:51:06 -!- sebbu has quit (Ping timeout: 248 seconds).
19:52:57 <elliott> https://github.com/ghc/testsuite/commit/dfdb979305d5ebb7b28fcabce06d9095d81d34da
19:53:01 <elliott> monqy: oerjan: Phantom_Hoover: terrifying
19:53:36 <Phantom_Hoover> ???
19:53:47 <elliott> terrifying
19:54:27 <elliott> But that’s not all! Humble Introversion Bundle customers now have access to the source code for Darwinia, Multiwinia, DEFCON, and Uplink! Once you've purchased the bundle, check your download page for a source snapshot and gain access to Introversion's developer forums, wiki, and SVN repository.
19:54:28 <elliott> !!!!!!!1183748975438957
19:54:44 <oerjan> you mean the call stack thing which he promised a while ago?
19:54:59 <elliott> oerjan: yes but I DIDN'T KNOW IT WAS BEING EXPOSED TO USER CODE...
19:55:12 <elliott> https://plus.google.com/107890464054636586545/posts/YJzAAxw28N7
19:55:22 <oerjan> heh
19:56:47 <monqy> what is this thinge..
19:57:12 <monqy> call stack inspection for ghc haskells?
19:57:19 <monqy> terrifying indeed
19:57:31 <kallisti> what about call stack /manipulation/?
20:00:07 <Sgeo> elliott, I think this is old news that I saw in here but didn't process properly, but Introversion source now available for Humble Bundle purchasers
20:00:16 <elliott> <elliott> But that’s not all! Humble Introversion Bundle customers now have access to the source code for Darwinia, Multiwinia, DEFCON, and Uplink! Once you've purchased the bundle, check your download page for a source snapshot and gain access to Introversion's developer forums, wiki, and SVN repository.
20:00:16 <elliott> <elliott> !!!!!!!1183748975438957
20:00:16 <elliott> <oerjan> you mean the call stack thing which he promised a while ago?
20:00:16 <elliott> <elliott> oerjan: yes but I DIDN'T KNOW IT WAS BEING EXPOSED TO USER CODE...
20:00:17 <elliott> <elliott> https://plus.google.com/107890464054636586545/posts/YJzAAxw28N7
20:00:19 <elliott> <oerjan> heh
20:00:21 <elliott> <monqy> what is this thinge..
20:00:23 <elliott> <monqy> call stack inspection for ghc haskells?
20:00:25 <elliott> <monqy> terrifying indeed
20:00:27 <elliott> <kallisti> what about call stack /manipulation/?
20:00:29 <elliott> <Sgeo> elliott, I think this is old news that I saw in here but didn't process properly, but Introversion source now available for Humble Bundle purchasers
20:00:35 <elliott> sgeo's memory lasts less than 6 minutes
20:00:46 <Sgeo> elliott, I could swear I saw it earlier than 6 minutes ago
20:00:51 <Sgeo> Like hours ago or something
20:02:30 <oerjan> elliott: maybe his memory only keeps the first reference
20:03:40 <oerjan> like: "Major online game" -> "Active Worlds"
20:03:55 * oerjan coughs
20:04:15 <elliott> :D
20:04:40 -!- Jafet has quit (Quit: Leaving.).
20:05:33 <olsner> wow, he remembers things from hours ago, Sgeo is quite the memory artist
20:06:10 <monqy> he should join a circus
20:06:12 <oerjan> that's nothing, i remember things from _months_ ago. like, er, um...
20:06:16 <elliott> :D
20:06:17 <monqy> you too
20:06:19 -!- GreaseMonkey has joined.
20:06:19 <Sgeo> Introversion forums, why are you down?
20:08:22 -!- sebbu2 has changed nick to sebbu.
20:08:39 * kallisti still remembers most of his schedule throughout high school.
20:09:11 <kallisti> and college schedules, even!
20:09:31 <oerjan> i vaguely remember that i once remembered my schedule
20:10:40 <kallisti> I think I took some typing class and geometry at the same time.
20:10:42 <kallisti> so bad.
20:10:54 <monqy> typing
20:10:55 <monqy> class
20:10:59 <monqy> ??????
20:11:00 <kallisti> yes.
20:11:07 <kallisti> it was like "how to use microsoft office: the class"
20:11:13 <monqy> wow great
20:11:14 <kallisti> and it included a lot of typing of documents
20:11:16 <kallisti> and spreadsheets.
20:11:28 <kallisti> it was actually awesome because I would always finish first and then basically do nothing the rest of the class.
20:11:35 <kallisti> normally doing nothing is boring
20:11:40 <kallisti> but doing nothing with a computer is AWESOME.
20:11:46 <olsner> most of my high school schedule was unscheduled time, not exactly hard to remember that schedule
20:11:51 * Phantom_Hoover downloads the Uplink source.
20:12:25 <kallisti> monqy: I also took this class called construction
20:12:27 <kallisti> it was hilarious
20:12:30 <kallisti> and awful.
20:12:37 <monqy> I'm imagining a class about playing with blocks
20:12:39 <kallisti> I USED SAWS. YEAAAAAH
20:12:50 <kallisti> I'm bad at saws.
20:12:56 <Phantom_Hoover> We call that DT over here.
20:13:01 <kallisti> well except jigsaws. jigsaws are fun.
20:13:22 <Phantom_Hoover> I made a stick man out of metal and also a plastic self-portrait.
20:14:55 <elliott> Phantom_Hoover: So, a stick man out of metal and a stick man out of plastic?
20:15:07 <Phantom_Hoover> No, it was a Phantom_Hoover.
20:15:59 -!- Slereah has joined.
20:16:37 <kallisti> http://en.wikipedia.org/wiki/File:Frida_Kahlo_(self_portrait).jpg "Its inclusion in the article adds significantly to the article because it shows the subject of the article"
20:16:42 <kallisti> Frida Kahlo is the history of art.
20:17:42 -!- Slereah_ has quit (Ping timeout: 260 seconds).
20:26:04 <elliott> "As you’ve discovered, the grandaddy machine-learning algorithm of them all, back-propagation, is nothing but steepest descent with reverse mode automatic differentiation. This means that if you wrote a neural network that simply evaluated, but didn’t know how to learn, and passed it into a routine for optimisation using steepest descent by reverse mode AD, then it would use back-propagation without anyone having to even know that such a thing
20:26:04 <elliott> as back-propagation existed. Internally it would actually perform exactly the same operations as back propagation."
20:26:10 <elliott> ais523: thanks for being wrong, it's made me google up things and remember how cool AD is
20:30:56 <kallisti> elliott: neat
20:33:42 <kallisti> > deriv log 0
20:33:43 <lambdabot> Infinity
20:33:47 <kallisti> ha ha ha ha
20:33:57 <Sgeo> > deriv abs 0
20:33:58 <lambdabot> 0
20:34:13 <kallisti> shocking
20:34:20 <Sgeo> >deriv (\x -> if x > 5 then 0 else x) 4
20:34:25 <Sgeo> > deriv (\x -> if x > 5 then 0 else x) 4
20:34:27 <lambdabot> 1
20:34:29 <Sgeo> > deriv (\x -> if x > 5 then 0 else x) 6
20:34:30 <lambdabot> 0
20:34:58 <Sgeo> If I put in 5 it's going to be 1, isn't it, even though that's not the right answer
20:35:01 <Sgeo> > deriv (\x -> if x > 5 then 0 else x) 5
20:35:02 <lambdabot> 1
20:35:17 <kallisti> how is it not right?
20:35:28 <kallisti> oh, nevermind..
20:35:47 <kallisti> "limits? what are those?"
20:35:49 <elliott> Sgeo: Were you expecting itto work perfectly?
20:35:53 <elliott> *it to
20:36:01 <Sgeo> elliott, no, but I can dream, can't I?
20:36:10 <elliott> No.
20:36:35 <Sgeo> Hmm, maybe there should be an if' function that ... does something
20:36:49 <monqy> what
20:36:53 <kallisti> elliott: how does it determine that constants have a derivative of zero but variables have a derivative of one. actually nevermind I see how it works for variables but not for constants.
20:37:18 <kallisti> it just passes in the argument with the 1
20:37:25 <elliott> I suppose you could have (==*) :: (Eq a) => Diff a -> Diff a -> Diff Bool; ifE :: Diff Bool -> Diff a -> Diff a, but I have no clue what you'd do with Diff Bools.
20:37:30 <Sgeo> if' :: (Num a) -> a -> (a,a) -> (a -> a) -> (a -> a) -> a
20:37:40 <kallisti> :t deriv
20:37:41 <lambdabot> forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b
20:37:48 <kallisti> oh... nevermind
20:37:49 <elliott> kallisti: const 1 :: Diff Double -> Diff Double
20:37:52 <elliott> kallisti: === const (D 1 0)
20:37:53 <monqy> kallisti: fromInteger in the Num instance?
20:38:00 <monqy> i havent read the thing
20:38:01 <elliott> const (D 1 0) (D 0 1) == (D 1 0)
20:38:01 <monqy> ;_;
20:38:03 <elliott> blah blah blah
20:38:08 <monqy> a while ago i read stuff about AD then i forgot it all
20:38:08 <monqy> oops
20:38:25 <kallisti> elliott "bad at teaching still" hird
20:38:39 <kallisti> but I got it
20:38:40 <kallisti> so nevermind.
20:40:29 <kallisti> monqy: I keep forgetting fromInteger is a method of Num and not just some magical thing somewhere else.
20:41:52 <kallisti> > deriv (\x -> 2*x) 3
20:41:54 <lambdabot> 2
20:42:32 <elliott> > deriv (sin + cos) x
20:42:32 <lambdabot> 1 * cos x + 1 * negate (sin x)
20:42:37 <elliott> > reduce $ deriv (sin + cos) x
20:42:38 <lambdabot> 1 * cos x + 1 * negate (sin x)
20:42:41 <elliott> :-(
20:43:00 <Sgeo> :t reduce
20:43:01 <lambdabot> Expr -> Expr
20:43:17 <Sgeo> :t reduce $ x - x
20:43:18 <lambdabot> Expr
20:43:27 <Sgeo> > reduce $ x - x
20:43:29 <lambdabot> x - x
20:43:38 <Sgeo> @src reduce
20:43:39 <lambdabot> reduce _ 0 = undefined
20:43:39 <lambdabot> reduce x y = (x `quot` d) :% (y `quot` d)
20:43:39 <lambdabot> where d = gcd x y
20:43:39 <Phantom_Hoover> @hoogle (a -> a) -> a -> Int -> a
20:43:40 <lambdabot> Data.Sequence iterateN :: Int -> (a -> a) -> a -> Seq a
20:43:40 <lambdabot> Data.Sequence adjust :: (a -> a) -> Int -> Seq a -> Seq a
20:43:41 <lambdabot> Data.IntMap adjust :: (a -> a) -> Key -> IntMap a -> IntMap a
20:43:50 <elliott> Sgeo: wrong reduce
20:44:04 <Phantom_Hoover> Huh.
20:44:20 <Phantom_Hoover> I'd've thought that function would be one of the basic ones.
20:44:44 <elliott> Phantom_Hoover: To do what? Iterate a function?
20:44:47 <elliott> The arguments are all the wrong way around.
20:44:53 <elliott> Int -> (a -> a) -> a -> a would be the right way.
20:44:56 <kallisti> iterate and !!, tada!
20:45:17 <Phantom_Hoover> elliott, I thought Hoogle was order-blind.
20:45:30 <elliott> Phantom_Hoover: It doesn't exist in the stdlib.
20:45:33 <elliott> I'm just saying if it did...
20:47:13 <kallisti> @pl i n f a = iterate f a !! n
20:47:13 <lambdabot> i = flip (flip . ((!!) .) . iterate)
20:47:27 <kallisti> :t (n f a = iterate f a !! n
20:47:28 <lambdabot> parse error on input `='
20:47:28 <kallisti> er
20:47:35 <kallisti> :t (\n f a -> iterate f a !! n)
20:47:36 <lambdabot> forall a. Int -> (a -> a) -> a -> a
20:47:54 -!- pikhq_ has joined.
20:47:55 -!- pikhq has quit (Ping timeout: 252 seconds).
20:50:40 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
20:52:27 <Sgeo> > foldr (\x acc -> x:acc) [] [x,y,z]
20:52:28 <lambdabot> [x,y,z]
20:52:45 <Sgeo> > foldr (:) [] [x,y,z] -- before someone yells at me about the lambda
20:52:46 <lambdabot> [x,y,z]
20:53:23 <Sgeo> @help quickcheck
20:53:24 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
20:53:28 <Sgeo> @quickcheck
20:53:29 <lambdabot> Unknown command, try @list
20:53:30 <kallisti> Sgeo: too late. you can't fix it.
20:53:42 <kallisti> shouldn't use lambdas for simple things.
20:54:27 <kallisti> so. I'm kind of bad at quantum mechanics. enlighten me: is there anything in quantum mechanics that disproves determinism?
20:54:32 <kallisti> I think there is.
20:54:49 <Sgeo> Well, disproves it assuming you hold to no causal influences exceeding c
20:54:54 <Sgeo> Wait, no
20:55:09 <Sgeo> Hidden variables are disproved assuming no non-local influences
20:55:31 <Sgeo> I think multiple-worlds is considered deterministic without being a local variable theory
20:58:44 <kallisti> I
20:59:22 <kallisti> 'm just wondering if my deterministic viewpoint is perhaps unwarranted due to things I don't understand about the universe.
21:11:02 <Sgeo> elliott, kallisti update
21:17:04 -!- Ngevd has joined.
21:19:16 <Ngevd> Hello!
21:20:16 <Ngevd> I found a 29-step wiki surf loop
21:26:18 <ais523> first link or last link?
21:26:33 <Ngevd> It loops
21:26:35 <Ngevd> Um
21:26:58 <Ngevd> I'm not sure which link you mean
21:28:45 <olsner> do you follow the first or last link on each page?
21:28:50 <Ngevd> Last in the intro
21:29:52 <Ngevd> I put the path in an article on our wiki
21:29:59 <elliott> err, that sounds off-topic
21:30:07 <Ngevd> In my userspace
21:30:09 <elliott> oh
21:30:17 <Ngevd> User:Taneb/Wiki surf
21:30:22 <elliott> "made because I am bored and lonely and have no access to IRC"
21:30:25 <elliott> Ngevd: http://webchat.freenode.net/
21:30:30 <Ngevd> Blocked in school
21:30:36 <elliott> lame
21:37:30 <oerjan> Ngevd: i recalled some of the members of your loop from before but not the loop itself, so i followed it and the link Policy studies -> Public administration has already been broken by an edit
21:37:40 <Ngevd> !!!
21:38:41 <Ngevd> It is possible I made a mistake
21:39:04 <oerjan> Ngevd: no, there was definitely a recent edit prior to which that was correct
21:39:10 <Ngevd> Wow
21:39:26 <oerjan> so, these long loops may not be very stable :P
21:41:40 <oerjan> in suspect the entire Public administration -> Policy studies part was included in what we did previously - all of them sound familiar.
21:42:07 <elliott> tempting to write a bot to try and find these loops
21:42:17 <oerjan> *i suspect
21:42:27 <elliott> longest path from A to A has to be something CS has optimised to hell by now, right? :)
21:42:36 <oerjan> heh
21:42:48 <elliott> only need to do it some 2 million times to get the longest one
21:43:19 <elliott> oerjan: (/is/ there a fast algorithm for that? :P)
21:43:45 <oerjan> well yeah you just need to iterate all pages and for each page follow its path until you hit one you already visited, so it's O(n) in total
21:44:24 <oerjan> and obviously that's as fast as you can hope for
21:44:31 <elliott> well, OK :P
21:44:45 <elliott> oerjan: already visited globally, or from the last iteration?
21:44:46 <elliott> of the pagespace
21:44:51 <oerjan> globally
21:45:04 <elliott> yeah i guess it's not too bad
21:45:07 <oerjan> unless you want to duplicate work
21:45:27 <oerjan> it should _still_ be O(n*max path length) if you don't, though
21:45:35 <elliott> and you only have to track the set of seen pages
21:45:38 <elliott> not all the paths
21:45:42 <elliott> you can flush out paths to disk
21:45:46 <elliott> so it won't take much ram either
21:46:14 <oerjan> seen pages and the path lengths of them
21:46:45 <elliott> oerjan: hm right
21:47:36 <oerjan> and it will be slightly different if you hit a seen page from a previous iteration or a seen page from this one (the latter means a _new_ loop, naturally)
21:48:27 <elliott> oerjan: um you can't have a new loop with an immutable set can you
21:48:31 <elliott> because each page has exactly one successor
21:49:10 <elliott> by definition there is only zero or one cycles involving any given page
21:50:02 <oerjan> elliott: by "new" i mean "not previously discovered"
21:50:11 <elliott> ah
21:53:59 <elliott> oerjan: dammit now I want to write this :P
21:54:49 <oerjan> getting the intuitive "last link" detection quite right might be tricky.
21:54:58 <oerjan> especially with your section rule.
21:55:00 -!- copumpkin has quit (Ping timeout: 244 seconds).
21:55:26 <elliott> oerjan: well things like references and the "citation needed" links don't look like [[...]] in wikicode
21:55:43 <oerjan> well ok
21:55:44 <elliott> so once you have a section, just scan back for a [[...]]
21:55:56 <elliott> to isolate the section, just take up to the next line starting with =
21:56:04 <elliott> or <h if you want to be even fancier about it
21:56:15 <oerjan> interwiki links need to be ignored too, i've skipped some wiktionary ones
21:56:36 <elliott> oerjan: yeah
21:57:52 <elliott> oerjan: ooh now i'm imagining a pretty graph you could draw with this
21:57:59 <elliott> actually hm would that work
21:58:03 <elliott> oh no it wouldn't :(
21:58:26 <oerjan> and probably other namespaces, in case you hit an article which has no introduction links other than those top boxes
21:58:46 <oerjan> oh and what about side boxes, i've ignored those. but i guess they are templates anyway.
21:58:49 -!- Patashu has joined.
21:58:51 <elliott> oerjan: yeah, to both.
21:58:56 <elliott> oerjan: it doesn't have to be completely perfect :P
21:59:11 <elliott> oerjan: i doubt the longest chain involves ten non-templated side boxes that link into the Wikipedia namespace
21:59:28 <oerjan> MAYBE
21:59:54 <elliott> oerjan: oh i thought of a graph that could be drawn. but it's very silly
22:01:03 <olsner> maybe you could make a chain by following the random page link until the PRNG cycles
22:01:07 <oerjan> there's only one outgoing edge from each page. reminds me of BackFlip's > command
22:01:53 <elliott> oerjan: given a page p, start with a node of just that, and connect it to all the n-chains of p. the 0-chain of p is following the first link, the 1-chain of p is following the second (at each step, ofc), the (-1)-chain of p is following the last, the (-2)-chain is second-last, etc.
22:02:02 <elliott> hmm that wouldn't work unless all pages had the same number of links :(
22:02:11 <elliott> I JUST WANT A PRETTY GRAPH
22:02:27 <oerjan> hm
22:02:29 -!- Jafet has joined.
22:05:52 <elliott> oerjan: ofc i could just draw a graph of all links but that kind of thing has been done and it isn't related to this game :P
22:06:11 <elliott> (I wonder how well graphviz deals with such massive graphs...)
22:15:39 -!- oerjan has quit (*.net *.split).
22:16:00 <elliott> smallest netsplit
22:16:03 <elliott> netsplit kitten
22:16:08 <elliott> so adorable
22:17:46 <Ngevd> I'm pretty sure that that's just oerjan's quit message
22:18:03 <elliott> ...no, it's not.
22:18:11 -!- oerjan has joined.
22:18:11 <elliott> he usually goes for "Good night".
22:18:34 <Ngevd> Then he must be unusually susceptible to netsplits?
22:18:45 <nooga> false
22:18:47 <oerjan> wat
22:18:52 <nooga> oerjan is up all the time
22:18:56 <Ngevd> Or I sort of roll about half the people in this channel to one in my head?
22:19:36 <nooga> I wonder in which half am I then
22:19:40 <elliott> oerjan: oh. by the way
22:19:46 <elliott> oerjan: I found an example of an applicative functor that isn't a monad, IIRC
22:19:48 <oerjan> way the by.
22:19:56 <elliott> oerjan: on the epigram blog.
22:19:58 <Ngevd> weigh the bi
22:20:15 <oerjan> IT DOESN'T COUNT IF IT NEEDS DEPENDENT TYPING
22:20:30 <elliott> oerjan: um no, in haskell.
22:20:32 <elliott> oerjan: http://www.e-pig.org/epilogue/?p=186
22:20:40 -!- Phantom_Hoover has joined.
22:20:41 <elliott> "Structure cops will note that De is another example of an applicative functor which is not a monad — join would bring things from the far future to the near future, and that had better not be possible. However, where applicative functors in general only pull through traversable functors (containers with finitely many elements), De pulls through all containers. So it’s a bit special. I wonder what it is."
22:21:00 -!- derrik has quit (Quit: quitter).
22:22:28 <Ngevd> Is there a simple way to tell if a list is finite in Haskell?
22:22:52 <oerjan> "‘NuDe’ is a fixpoint giving co-trees with delayed children."
22:23:02 <oerjan> I SEE
22:23:16 <oerjan> Ngevd: not that halts if it isn't
22:23:58 <elliott> oerjan: it's mcbride, you are surely used to the puns by now :P
22:24:05 <elliott> Ngevd: mathematically impossible
22:24:10 <oerjan> hm i may not have read that many of his
22:24:27 <elliott> oerjan: really?
22:24:31 <elliott> but he's so cool :(
22:27:13 <nooga> what are you... ah.. haskell & theory
22:27:33 <elliott> that's all we ever do
22:28:22 <Sgeo> I think I actually understand folds now
22:28:31 <elliott> you
22:28:32 <elliott> what
22:28:37 <Sgeo> Just sort of think of accum as the rest of the fold
22:28:37 <elliott> how have you failed to understand folds for this long
22:28:38 <oerjan> hm that argument that De isn't a Monad looks rather like "it isn't a monad because we have disallowed the obvious way of making it one for semantic reasons."
22:28:44 <elliott> > foldr f z [a,b,c,d]
22:28:45 <lambdabot> f a (f b (f c (f d z)))
22:28:53 <Phantom_Hoover> I think we should make a #esoteric-haskell; there's been far more Haskell chat than Minecraft chat.
22:28:54 <Sgeo> @src foldr
22:28:55 <lambdabot> foldr f z [] = z
22:28:55 <lambdabot> foldr f z (x:xs) = f x (foldr f z xs)
22:29:02 <elliott> oerjan: um no
22:29:06 <elliott> oerjan: because the implementation isn't the specification
22:29:12 <elliott> oerjan: (the specification doesn't talk about unsafeCoerce!)
22:29:12 <Ngevd> Phantom_Hoover: +1
22:29:18 <Jafet> Phantom_Hoover: Haskell is the best esoteric language!
22:29:21 <Phantom_Hoover> Ngevd, quiet, you.
22:29:25 <elliott> oerjan: like
22:29:32 <Sgeo> I actually understand that definition better than the expanded form, I think
22:29:32 <elliott> oerjan: the implementation could _also_ implement a function that exposed the unsafeCoerceness
22:29:50 <elliott> oerjan: being able to implement an interface for an implementation doesn't mean that the semantic model can do it, because exposing that interface might /break/ the model
22:29:51 <nooga> Phantom_Hoover: I though that Minecraft has been forgotten
22:30:15 <elliott> Sgeo: s/:/`f`/, s/[]/z/
22:30:18 <elliott> a : b : c : d : []
22:30:19 <elliott> ->
22:30:24 <elliott> a `f` b `f` c `f` d `f` z
22:30:27 <elliott> (except right-associative)
22:30:28 <Phantom_Hoover> Only because of the Bukkit team's lack of appropriate psychostimulants.
22:30:45 <Jafet> infixr 9 `f`
22:31:26 <oerjan> elliott: well, i'm not convinced that it gives an example of an Applicative in _haskell_ which cannot be made into a Monad.
22:31:40 <elliott> oerjan: because you need unsafeCoerce to implement it?
22:31:59 <Sgeo> In dependent typing, is it possible to make a thingy such that it's impossible to implement a Monad thingy that violates the monad laws?
22:32:05 <Sgeo> As in, the compiler checks the monad laws?
22:32:33 <oerjan> um the unsafeCoerce isn't even used in the Applicative instance. which is obviously isomorphic to Identity, btw.
22:32:39 <elliott> Sgeo: it "checks" them because you have to prove them
22:32:48 <elliott> oerjan: well ok
22:32:50 <Sgeo> Ah, cool
22:32:52 <Phantom_Hoover> elliott, you do?
22:32:57 <Phantom_Hoover> Oh, dependent typing.
22:33:01 <elliott> Sgeo: "cool", heh
22:33:14 <elliott> Sgeo: Spoken like someone who's never tried to prove anything substantial in Coq or Agda before
22:34:39 <Phantom_Hoover> The, um
22:34:50 <Phantom_Hoover> The top result for "hardback" on DDG is Memory Beta.
22:34:59 <Phantom_Hoover> As in, the definition box at the top.
22:35:05 <olsner> elliott: do those things have unsafeProveAnything?
22:35:19 <elliott> olsner: well yes
22:35:33 -!- oerjan has quit (Quit: unsafeGoodNight).
22:35:49 <Phantom_Hoover> They have Axiom unsafeProveAnything : forall x, x.
22:35:58 <Ngevd> Remember when we created ABCDEF...G?
22:36:44 <Phantom_Hoover> OK so I have discovered a cupboard in the school lab which contains, among other things, toluene, nitric acid and sulphuric acid.
22:36:45 <Phantom_Hoover> FINALLY
22:37:17 -!- GreaseMonkey has quit (Remote host closed the connection).
22:39:26 <Ngevd> http://esoteric.voxelperfect.net/wiki/User:Taneb/ABCDEF...G
22:39:38 <Ngevd> Someone make sense out of that
22:40:35 -!- copumpkin has joined.
22:40:42 <Sgeo> We didn't even implement ABCDEF
22:42:46 <Ngevd> @tell oerjan Sgeo needs a swat for abbreviating Adjudicated Blind Collaborative Design Esolang Factory
22:42:46 <lambdabot> Consider it noted.
22:43:46 -!- azaq23 has quit (Quit: Leaving.).
22:45:27 <Ngevd> I've been swatted for less
22:48:42 -!- hagb4rd has quit (Ping timeout: 248 seconds).
22:50:28 <Jafet> AbstractBeanClassDelegationExceptionFactoryGenerator
22:54:29 <elliott> @hoogle zipWith5
22:54:29 <lambdabot> Data.List zipWith5 :: (a -> b -> c -> d -> e -> f) -> [a] -> [b] -> [c] -> [d] -> [e] -> [f]
22:54:31 <elliott> yesss
22:56:20 <elliott> hmm, what's a fast way of doing (last . takeWhile p)
22:58:04 -!- GreaseMonkey has joined.
22:58:04 -!- GreaseMonkey has quit (Changing host).
22:58:04 -!- GreaseMonkey has joined.
23:00:41 <Jafet> last . takeWhile p
23:02:52 <Deewiant> foldr1 (\a b -> if p b then b else a), maybe
23:05:03 <elliott> Jafet: Fast :P
23:05:07 <elliott> Deewiant: Fair enough
23:05:11 <elliott> I'm fine if it has a Maybe result
23:06:07 <Jafet> How is that slow?
23:06:51 <elliott> Jafet: Hmm, I was thinking it'd involve two traversals, but it won't will it
23:06:52 <elliott> Alright then
23:07:10 <Jafet> It might, but that's still fast
23:07:25 <Jafet> Cons, uncons, cons, uncons
23:07:37 <elliott> That's what I meant, they're in lock-step
23:07:40 <elliott> In a strict language it'd be slow
23:07:49 <Jafet> It'd still be fast!
23:07:55 <Jafet> ...unless allocation is slow.
23:08:59 <elliott> Jafet: I have a fear of traversing lists multiple times
23:09:03 <elliott> I just don't do it, ever
23:13:17 -!- Ngevd has quit (Ping timeout: 260 seconds).
23:14:01 <Jafet> {-# RULE "warm blanket" last . takeWhile p = my'Faster'LastTakeWhile #-}
23:15:58 <elliott> :D
23:24:22 -!- Jafet has quit (Quit: Leaving.).
23:27:46 -!- Phantom__Hoover has joined.
23:30:50 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
23:56:39 -!- ais523 has quit (Remote host closed the connection).
23:58:19 -!- augur[afk] has changed nick to augur.
←2011-11-28 2011-11-29 2011-11-30→ ↑2011 ↑all