00:03:14 <alise> 10:38:41 <fizzie> I don't recall; based on the name only, it may have been another EgoBot instance.
00:03:19 <alise> it was immibis' annoyance machine
00:04:39 -!- Mathnerd314 has quit (Ping timeout: 264 seconds).
00:05:38 * Sgeo_ wants to fix a typo in Pharo without breaking other people's code
00:06:10 <Sgeo_> The latter part is what's stopping me
00:06:19 <Sgeo_> I'm looking at this changes thing, and I see code changes
00:06:23 <Sgeo_> Not just my typo fix
00:08:01 <alise> Phantom_Hoover: Because it is a sensitive person.
00:09:34 <Sgeo_> Ok, so the changeset against Pharo is just the change I want, but the changeset against PharoInbox isn't
00:09:40 <Sgeo_> Do I just save to PharoInbox anyway?
00:18:04 <Sgeo_> http://www.squeaksource.com/PharoInbox/
00:32:18 -!- BeholdMyGlory has quit (Remote host closed the connection).
00:33:25 -!- deathmoniac has quit (Ping timeout: 276 seconds).
00:33:26 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
00:34:33 -!- deathmoniac has joined.
00:38:54 <alise> Wow, the Star Wars Holiday Special is considered canon.
00:39:04 <alise> "The Holiday Special is important, at least to serious fans, for being the first film-length Star Wars story to appear following the release of Episode IV, as well as showing an expanded look at parts of the established universe. The program is considered canon with regards to Chewie's family, including the celebration of Life Day."
00:45:39 -!- AnMaster has quit (Quit: ZNC - http://znc.sourceforge.net).
00:47:14 <pikhq> Also, it kinda impresses me how much better output pdfTeX generates than straight TeX.
00:47:27 <pikhq> http://texblog.net/latex-archive/layout/pdflatex-microtype/ Seriously, just look at this.
00:47:50 <alise> The lesson: Knuth is stupid.
00:47:58 <pikhq> (granted, the difference should be nowhere near as notable on normal-width columns, but... Dang.)
00:48:26 <pikhq> alise: I wouldn't say that. Keep in mind that pdfTeX is pretty much the first thing this side of Gutenberg to do comprehensive microtypography.
00:48:45 <alise> pikhq: KNUTH IS BASICALLY A RETARD WHO KNOWS NOTHING
00:48:50 <alise> what has he ever done for us, also the romans
00:50:15 <coppro> alise: have you seen the iTeX video?
00:50:40 <alise> coppro: no, but i don't expect the joke to be that hilarious
00:50:50 * alise finally gets round to reading Five-Minute Voyager, instantly falls in love
00:50:51 <alise> Chakotay: Ha! Chakotay 1, Cardassians 0!
00:50:51 <alise> Tuvok: (detecting the wave) Um, you might want to reconsider that....
00:50:51 <alise> Janeway: Here's the deal -- betray your Maquis pals, and I'll bust you out of here.
00:50:51 <alise> Paris: No. On second thought, yes.
00:52:06 <alise> http://www.fiveminute.net/voyager/; http://www.fiveminute.net/voyager/fiver.php?ep=caretaker
00:53:06 <alise> I keep copying a quote but my mouse drags it further and further and eventually I end up trying to quote the whole thing
00:56:07 <alise> "Janeway promotes B'Elanna for punching Carey in the face."
00:58:15 <Sgeo_> Kazon: Can we keep the water?
00:59:34 <alise> Janeway: Oof! Hey, a shockwave!
00:59:34 <alise> Tuvok: Yep. Came from that planet.
00:59:34 <alise> Janeway: It's still emitting harmful radiation, so let's go towards it.
01:00:21 <alise> Paris: I thought we weren't supposed to break the Prime Directive.
01:00:21 <alise> Janeway: We already did, so now we can do it as much as we want.
01:00:48 <Sgeo_> There's a TNG that I liked that I want to see the 5min of
01:01:29 <alise> It sort of only works on terrible shows.
01:01:37 <alise> But here: http://fiveminute.net/nextgen/
01:01:49 <Sgeo_> It was a Wesley episode
01:01:53 -!- Wamanuz3 has quit (Remote host closed the connection).
01:01:57 <Sgeo_> All of the commentary is making fun of that :/
01:02:02 <coppro> http://www.fiveminute.net/voyager/fiver.php?ep=theomegadirective
01:02:05 <coppro> Neelix: Okay -- just had to get a line in somewhere in this episode.
01:02:42 <Sgeo_> http://fiveminute.net/nextgen/fiver.php?ep=thegame
01:07:27 <alise> Janeway: So the plan is to fly right into the hands of the Kazon. Any objections?
01:08:13 <Sgeo_> Isn't Year of Hell generally considered good?
01:08:48 <alise> Voyager is universally terrible.
01:09:14 <alise> Some episodes are alright in isolation.
01:09:32 <alise> Then you realise that Janeway is a crazy sociopath with multiple personalities^Wwriters.
01:09:47 <Sgeo_> I haven't seen enough episodes to realize that, I think
01:10:09 <Sgeo_> I remember reading that the actor actually complained?
01:10:15 <alise> Doc: Bad news, baby. This baby isn't Chakotay's.
01:10:15 <alise> Seska: $#@*%! It must be Culluh's!
01:10:15 <alise> Doc: The computer's checking that with a DNA test. Ah, here we go. The baby's parents are...Mulder and Scully? What the--? Computer!
01:10:16 <alise> Computer: Can I help it if I'm a 'shipper?
01:10:33 <alise> Sgeo_: Chakotay's wooden playing is purposeful; the actor hated the show and really didn't give a shit.
01:10:43 <alise> Janeway's actor (who cares about names?) also disliked it quite a bit.
01:10:54 <alise> Basically it's great to watch because it's hilariously bad.
01:11:13 <alise> Kes: I wanna get captured.
01:11:13 <alise> Neelix: Look, we've discussed this. I'm not comfortable with a relationship involving S&M.
01:11:13 <alise> Kes: No, by the cavemen.
01:11:13 <alise> Neelix: Don't change the subject to exclusivity.
01:12:00 <alise> Culluh: I love all the gadgets on this ship. Watch this -- I can turn the ceiling fan on and off.
01:12:00 <alise> Seska: Maj, someone on board is using Maquis sabotage tricks!
01:12:00 <alise> Culluh: Fan goes on, fan goes off. Fan goes on, fan goes off.
01:12:03 <alise> MUST. QUOTE. EVERYTHING.
01:12:41 <alise> Doc: I'm afraid Suder was killed.
01:12:41 <alise> Tuvok: Guess I should say something Vulcan-like. (ahem) "Live long and prosper."
01:12:41 <alise> Doc: I don't think you heard me. He's dead.
01:12:41 <alise> Tuvok: If you can't find it in your heart to wish him a long life, keep your mouth shut.
01:13:19 <coppro> Data: It is made of anti-time. And it is giving off anti-time radiation.
01:13:21 <coppro> Picard: Shhh! Janeway will hear you!
01:14:23 <nooga> http://pastie.org/1076332 CTO
01:14:36 <coppro> Data: Aye, sir. Ooooooo! It appears the anomaly has been created by three converging tachyon beams from three different times.
01:14:39 <coppro> Picard: What an amazing coincidence! I've been in three different times and fired tachyon beams in this exact spot.
01:14:42 <coppro> Data: Perhaps those phenomena are related.
01:14:44 <coppro> Picard: I don't see how, but I'll switch to my future self. He's had more time to think about it.
01:15:25 <nooga> C subset jibberish generator
01:15:30 <nooga> http://pastie.org/1076334
01:15:34 <alise> Janeway: Mr. Kim, the date! I need to know the exact date!
01:15:34 <alise> Kim: November 23rd...1996!
01:15:34 <alise> Chakotay: November 23rd. The day before First Contact was released.
01:15:34 <alise> Janeway: That's what they came here to do! Stop First Contact! Ensign, where is the launch scheduled to take place?
01:16:42 <alise> Starling: Ha ha! I've stolen your doctor!
01:16:43 <alise> Everyone: (over the comm) Yay!
01:16:43 <alise> Starling: I was expecting "Uh oh" or "Oh nuts" or something.
01:17:19 <coppro> Future Riker: Take us in, Mr. Data. Hey, look, the other two Enterprises are on the viewscreen.
01:17:25 <coppro> Future Riker: Other one Enterprise.
01:17:30 <coppro> Future Riker: Forget it.
01:17:33 <coppro> Future Crusher: Wait! There's a pattern here! If it holds, then --
01:19:43 <alise> Chakotay: Seen any cloaked fleets lately?
01:19:43 <alise> Seven: Words fail me. Hey, a transmission.
01:20:11 -!- zzo38 has joined.
01:21:22 <alise> Paris: I found Chakotay and Harry in the morgue.
01:21:22 <alise> Tuvok: Their sacrifice will not be forgotten.
01:21:22 <alise> Paris: They aren't dead.
01:22:00 <zzo38> There are some literate programming systems designed for specific programming languages, such as Pascal WEB, CWEB, Enhanced CWEB, etc. And there are some generic literate programming aystems that can be used with any programming language, such as noweb, FunnelWeb, Newfangle, and also yesweb.
01:22:30 <zzo38> http://sprunge.us/fOZT
01:22:38 <zzo38> (Please look at it? Make comment of it? etc?)
01:23:10 <alise> Admiral: Okay, class, ask me some questions.
01:23:10 <alise> Student 1: Why are you just going by "Admiral"?
01:23:10 <alise> Admiral: "Admiral Janeway" takes too long to type. Next?
01:23:10 <alise> Student 2: Do you intend to travel back in time and alter history so that Voyager gets home 16 years earlier, violating the Temporal Prime Directive and risking irreparable damage to the timestream?
01:23:10 <alise> Admiral: I plead the Fifth.
01:23:26 <alise> zzo38: It's ... TeXy.
01:23:59 <alise> zzo38: Looks quite cool.
01:24:12 <zzo38> The \expandafter command is a useful command in TeX. Also strange things such as \catcode110=14
01:24:32 <zzo38> Is \catcode110=14 more strange or less strange than using prompt().toString() in JavaScript?
01:25:26 <alise> Are apples more or less strange than trees?
01:26:02 <Sgeo_> Crusher: It's just to underline the weird temporal properties of the anomaly. We'll also be killing Ogawa's baby to make that point.
01:26:08 <zzo38> alise: Yes it is written using TeX, it uses Plain TeX. Newfangle is written in LaTeX and requires no separate program to weave (weave is implemented as a set of LaTeX macros), but it uses a seperate program written in awk for tangle. yesweb is written entirely in Plain TeX and doesn't require anything else.
01:26:30 <zzo38> alise: I don't know if apples more/less strange than trees? But is that relevant? I don't actually know if it is relevant or not
01:27:05 <olsner> is there any material on how to use TeX as a general-purpose programming language? without the typesetting crud?
01:27:30 <zzo38> olsner: I don't know. But I might have partially done so in yesweb (so look at that for an example)
01:27:58 <alise> Borg: We're Borg. Get assimilated. Resistance sucks.
01:27:59 <alise> Janeway: Our armoured ship will now kick your collective butt.
01:27:59 <alise> Borg: Oh, fiddlesticks.
01:28:07 <alise> olsner: <3 you for just /thinking/ that
01:28:21 <zzo38> Resistance is futile (if less than 1ohm)
01:28:47 <alise> \loop ... \ifnum \foo < n \repeat
01:28:56 <alise> First TeX control structure I have now learned :P
01:29:15 <alise> Is "\advance \x by 1" Plain TeX or an intrinsic?
01:29:46 <zzo38> It is easy to check: Start TeX and then enter "\show\advance" at the prompt and it will tell you.
01:30:13 <alise> coppro: haha, someone made Voyager Virtual Season 8/9
01:30:33 <coppro> alise: this is brilliant
01:30:37 <zzo38> \loop is not built-in, however.
01:30:57 <olsner> hmm, \catcode is some kind of tr applied to ... the input? do tex programs have input?
01:31:16 <zzo38> olsner: \catcode is applied any more of the program that it reads itself.
01:31:24 <zzo38> It also affects \read and \write commands.
01:31:35 <Sgeo_> What's the one with the time loop?
01:31:53 <alise> zzo38: how do you declare a variable in tex?
01:31:54 <zzo38> \catcode is used to tell TeX what category the characters in the program belong to.
01:31:56 <olsner> groundhog day-style time loop?
01:32:08 <zzo38> alise: You can't, however, you can do a few similar things.
01:32:09 <olsner> every damn scifi needs to have one of those episodes...
01:32:45 <zzo38> alise: \newcount \newbox and so on allocate registers and assign names to them.
01:33:07 <zzo38> You can also assign meanings to control sequences, and create macros.
01:33:09 <olsner> zzo38: ok, so catcode32=9 says that spaces are in "category 9"? rather than mapping spaces to tabs?
01:33:19 <alise> ! Paragraph ended before \loop was complete.
01:33:21 <nooga> char c(char j, char dln5, char b1, char v7) {
01:33:22 <nooga> while(!531 / 623 != 428 < 913) {
01:33:24 <zzo38> olsner: Yes. That is what \catcode32=9 means.
01:33:56 <Sgeo_> http://www.fiveminute.net/nextgen/fiver.php?ep=causeandeffect
01:34:22 <alise> *\loop \n \advance \n by 1 \ifnum \n < 10 \repeat
01:34:22 <alise> ! Missing number, treated as zero.
01:34:27 <zzo38> That creates a integer register and increments the value.
01:34:53 <zzo38> alise: You can't use \n directly, you have to either assign a value or use it as a parameter. Try entering \the\n after \loop instead of just \n by itself.
01:35:25 <alise> Does it start at 0 or 1/
01:35:40 <zzo38> It starts at zero unless you explicitly tell it otherwise.
01:35:44 <alise> ...also, can I assign it with \n=1?
01:35:48 <alise> Or is it \newcount \n=1?
01:35:56 <zzo38> alise: Assign it with \n=1
01:36:17 <Sgeo_> These things don't make good episode summaries
01:36:26 <zzo38> Also, you need to print a space after each number, so put \space after \the\n
01:36:51 <alise> zzo38: Does it have to be \the every single time I mention n, ever?
01:37:34 <alise> When do I need \the, then?
01:38:05 <zzo38> You need \the whenever it is not expecting a register, and you have to instead convert it to a string to print it.
01:38:30 <zzo38> \the just converts the value of whatever register comes after it to a string
01:38:57 <alise> Yay, my program works!
01:38:59 <alise> \ifnum \n < 10 \repeat
01:40:05 <zzo38> alise: Now you learned.
01:40:16 <alise> Is there a while loop rather than a do/while?
01:41:14 <zzo38> alise: Yes, just put the condition at the top immediately after \loop instead of immediately before \repeat I think that will work too
01:41:47 <alise> Are while or do/while loops more common/idiomatic?
01:42:27 <zzo38> alise: I don't actually know, but I think the condition at the end is more common in TeX, as far as I know.
01:42:53 <alise> ifnum n < 10 repeat
01:43:02 <alise> So, if you removed the \s and replaced "the" with $...
01:43:21 <alise> ifnum n < 10 repeat
01:43:25 <alise> Yup, TeX is pretty normal. :P
01:44:47 <alise> I had better sleep.
01:45:17 <pikhq> Huh, TeX's programming stuff isn't as awful as I thought.
01:45:34 <pikhq> It's a bit poor, but... I can actually imagine using that.
01:45:38 <zzo38> pikhq: How awful did you think it was?
01:46:04 <pikhq> zzo38: Along the lines of "It's TC by accident".
01:47:38 -!- alise has quit (Quit: Leaving).
01:47:58 <zzo38> pikhq: It still has only 256 registers of each kind, though. And to do more advanced stuff you will have to learn some things about \expandafter and \csname and various other thing, because it does work differently, a bit.
01:48:21 <pikhq> zzo38: Still, it appears to be not 100% revolting.
01:48:34 <zzo38> (You can see the codes for yesweb to see how a full program is written)
01:48:44 <zzo38> pikhq: I also think it is not 100% revolting
01:49:35 <Gregor> http://www.explosm.net/comics/2130/ Hahahahaha this comic is exactly why I read C&H
01:49:41 <pikhq> It's sub-par, but eh. 70s language being usable suffices. :P
01:56:02 <zzo38> I want to figure out if there is some way to do something at each word boundary
01:56:23 <coppro> is it a good thing or a bad thing that to stop my media player, I do 'killall ogg123'?
02:00:14 <pikhq> coppro: If done as a normal user, quite a mundane thing.
02:00:27 <pikhq> Overkill, but mundane.
02:05:50 <zzo38> Do you think yesweb is better or worse than noweb and Newfangle?
02:06:40 <zzo38> (I have tested yesweb, and it does work. So don't complain that it doesn't work.)
02:07:49 <pikhq> Gregor: Yes, that is about it. :)
02:10:58 <zzo38> How strange do you consider prompt().toString() to be in JavaScript, anyways? (I have used this)
02:13:20 <Sgeo_> What's the point of the toString() bit?
02:13:26 * Sgeo_ isn't exactly a Javascript expert
02:13:45 <zzo38> Sgeo_: Yes, that is the part that seems strange
02:13:51 -!- Mathnerd314 has joined.
02:13:58 <zzo38> But it does actually have a use there (even though the return value of prompt() is already a string)
02:14:00 <Gregor> JavaScript will coerce things to strings on its own quite often, but not always. Anyway without context I can't judge whether that's strange.
02:14:34 <zzo38> Gregor: Yes it does, but the return of prompt() is already a string anyways!
02:14:49 <Gregor> zzo38: String.prototype.toString is id.
02:15:38 <Gregor> Not that that's really an answer :P
02:15:49 <zzo38> Gregor: Yes, it is, but there is still a reason for prompt().toString() see if you can think of it.
02:15:54 <zzo38> (If you cannot, I can answer you)
02:16:17 -!- Mathnerd314 has quit (Disconnected by services).
02:16:26 <Gregor> Oh, I forgot that prompt() is a builtin function, doy.
02:16:37 -!- Mathnerd314_ has joined.
02:16:38 <Gregor> I don't know what prompt() returns if you close it without hitting OK, probably null.
02:16:47 <Gregor> And if that's the case, then it doesn't always return a string. Not sure though.
02:16:56 -!- Mathnerd314_ has changed nick to Mathnerd314.
02:18:42 <zzo38> Gregor: Yes you are right about that. And do you know what null.toString() does?
02:19:06 <Gregor> Off the top of my head, I suspect it's one of: "", "null" or maybe "0"
02:19:37 <Gregor> So that throws an exception.
02:20:13 <zzo38> Now do you understand what prompt().toString() is for? Hopefully now you do.
02:20:27 -!- zzo38 has quit (Quit: zzo38).
02:21:13 <Gregor> Seems like a silly way to coerce an exception out of that though ...
02:21:14 <Sgeo_> Why would you want to blow up and die just because some moron didn't click Ok?
02:21:33 * Sgeo_ blows up and dies Gregor
02:22:15 -!- Gregor-P has quit (Quit: Bye).
02:23:42 * Sgeo_ will be watching Futurama in approx 38 min
02:24:11 <Gregor> Thank you for the update.
02:24:18 <Gregor> Please keep us apprised of all Futurama-related news.
02:24:30 <pikhq> Good news everybody!
02:25:00 <Gregor> pikhq: Well played, sir. Well played.
02:25:41 <coppro> pikhq: hey, that's a registered trademark!
02:41:42 <pikhq> coppro: Genericisation bitch.
02:47:44 <Sgeo_> "the process scheduler in Squeak/Pharo just isn't built to handle a crazy amount of threads"
02:47:49 <Sgeo_> Opposite of Erlang then?
02:57:57 * pikhq looks at new cell phones
03:00:29 <Sgeo_> And... I was wrong about the day of the week
03:13:21 <Sgeo_> Was about to ask if I should consider Self, but:
03:13:22 <Sgeo_> "we would be very interested in anyone prepared to make a Windows port."
03:28:00 -!- rodgort has quit (Quit: Coyote finally caught me).
03:30:40 -!- rodgort has joined.
03:48:02 -!- MizardX- has joined.
03:51:49 -!- MizardX has quit (Ping timeout: 252 seconds).
03:52:00 -!- MizardX- has changed nick to MizardX.
03:52:18 <augur> im in florida, on comcast
03:52:23 <augur> give some stuff to torrent
03:59:18 <Gregor> Porn. Don't even need torrent.
03:59:36 <pikhq> The Internet *is* for it.
04:04:38 <Gregor> Clearly he is downloading porn even as we speak.
04:05:26 <augur> i am download linguist porn
04:05:44 <Gregor> And non-bandwidth-consuming.
04:06:50 <pikhq> Gregor: It's *cunning* linguist porn, at least.
04:07:10 <augur> pikhq: yes, it features noam chomsky and tanya reinhart.
04:07:42 <augur> kratzer comes in for a lesbian scene somewhere along the way
04:08:00 <Gregor> Oh, is that what that was supposed to mean.
04:08:13 <augur> ok you're no use to me then.
04:08:27 <Gregor> I'M STILL A MAN, DAMN IT
04:08:40 <augur> i was going to ask if you wanted to toy around with an app me and some friends are making
04:08:48 <augur> see what kind of fun plugins for it you could make
04:09:32 <pikhq> Even my soon-to-be-had phone shall run Linux!
04:10:42 <pikhq> Palm WebOS, actually.
04:11:03 <pikhq> Gregor: $0.00 is not fail
04:14:45 <Sgeo_> I've read good things about the UI
04:16:18 <pikhq> It uses the freaking Konami code to unlock it!
04:19:29 <coppro> I think that's an auto-win
04:20:57 <coppro> achievement unlocked 2
04:27:58 -!- MizardX- has joined.
04:31:58 -!- MizardX has quit (Ping timeout: 252 seconds).
04:32:26 -!- MizardX- has changed nick to MizardX.
04:53:01 -!- CakeProphet has quit (Ping timeout: 258 seconds).
05:08:00 -!- MizardX- has joined.
05:12:16 -!- MizardX has quit (Ping timeout: 276 seconds).
05:12:30 -!- MizardX- has changed nick to MizardX.
05:19:33 -!- oerjan has joined.
05:48:16 -!- MizardX- has joined.
05:52:16 -!- MizardX has quit (Ping timeout: 276 seconds).
05:52:46 -!- MizardX- has changed nick to MizardX.
06:28:14 -!- MizardX- has joined.
06:32:03 -!- MizardX has quit (Ping timeout: 246 seconds).
06:32:13 -!- MizardX- has changed nick to MizardX.
06:47:35 -!- cheater99 has quit (Ping timeout: 260 seconds).
06:54:34 -!- oerjan has quit (Quit: leaving).
06:56:41 -!- cheater99 has joined.
07:12:19 -!- MizardX has quit (Quit: reboot).
07:17:45 -!- MizardX has joined.
07:24:30 -!- Sgeo__ has joined.
07:26:42 -!- Sgeo_ has quit (Ping timeout: 265 seconds).
07:27:15 -!- Sgeo has joined.
07:29:34 -!- Sgeo__ has quit (Ping timeout: 240 seconds).
07:31:03 -!- Sgeo_ has joined.
07:34:24 -!- Sgeo has quit (Ping timeout: 258 seconds).
07:36:54 -!- relet has quit (Quit: Leaving.).
07:37:07 -!- Sgeo__ has joined.
07:39:52 -!- Sgeo_ has quit (Ping timeout: 240 seconds).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:21:01 -!- tombom has joined.
09:11:00 <Sgeo__> Crusher: Computer, what just happened?
09:11:00 <Sgeo__> Computer: The spherical universe we occupy is collapsing. Its periphery has just obliterated the forward edge of the ship's saucer section.
09:11:00 <Sgeo__> Crusher: Does that mean that Ten-Forward is now the Restaurant at the End of The Universe?
09:11:00 <Sgeo__> Computer: Very well put.
09:19:16 <Sgeo__> Riker: Cry me a river. Data, Worf, go get a shuttle ready and finalize your wills. Wesley, bring me fifteen kilos of tissue paper.
09:19:16 <Sgeo__> Riker: In case Deanna takes me literally
09:24:05 * Sgeo__ is rather upset at the Five-Minute Stargate link not working
09:24:46 <Sgeo__> Well, there's one ep: http://www.fiveminute.net/stargate/eps/2010.htm
09:24:52 <Sgeo__> There may be more, I guess
09:25:37 <coppro> Hansen: You're just such a screwup.
09:25:37 <coppro> Hansen: Oh, and I promote you to Captain.
09:26:54 <Sgeo__> Meh, the 5min Stargate ep was boring
09:27:38 <coppro> the arrakkis line is good
09:28:22 <Sgeo__> Not referring to the movie one
09:28:33 <Sgeo__> Was referring to the 2010 ep
09:30:24 <coppro> Crusher: Jean-Luc? Are you in there?
09:30:24 <coppro> Locutus: Foolish human. Picard no longer exists.
09:30:24 <coppro> Crusher: Oh, fine. Can I get you a drink?
09:30:25 <coppro> Locutus: Tea, Earl Grey, hot. --Dammit!
09:36:27 <Sgeo__> I am convinced that Smalltalk would have been the best language for this project
10:03:17 -!- AnMaster has joined.
10:11:26 -!- comex has quit (Ping timeout: 240 seconds).
10:12:32 -!- comex has joined.
10:22:28 -!- MigoMipo has joined.
10:27:41 -!- oerjan has joined.
10:32:27 -!- comex has quit (Ping timeout: 260 seconds).
10:32:40 -!- Slereah has quit (Ping timeout: 240 seconds).
10:32:42 -!- BeholdMyGlory has joined.
10:35:30 -!- comex has joined.
10:38:21 -!- Wamanuz has joined.
10:38:23 -!- Slereah has joined.
10:39:23 -!- kar8nga has joined.
10:55:30 -!- comex has quit (Ping timeout: 265 seconds).
11:00:32 -!- comex has joined.
11:07:31 -!- comex has quit (Ping timeout: 260 seconds).
11:09:08 -!- comex has joined.
11:12:35 -!- oerjan has quit (Quit: leaving).
11:34:06 -!- Phantom_Hoover has joined.
11:47:40 -!- kar8nga has quit (Remote host closed the connection).
12:23:25 -!- jcp has quit (*.net *.split).
12:27:16 -!- jcp has joined.
13:00:25 -!- Phantom_Hoover has quit (Quit: Leaving).
13:00:44 -!- Phantom_Hoover has joined.
13:13:39 -!- comex has quit (Ping timeout: 264 seconds).
13:20:47 -!- comex has joined.
13:26:03 -!- comex has quit (Ping timeout: 240 seconds).
13:28:36 -!- comex has joined.
13:34:05 -!- kar8nga has joined.
13:36:33 -!- comex has quit (Ping timeout: 240 seconds).
13:37:25 -!- mquin_ has joined.
13:43:49 -!- ais523 has joined.
13:44:29 -!- comex has joined.
13:44:30 -!- comex has quit (Excess Flood).
13:45:18 -!- comex has joined.
13:45:51 -!- mquin has quit (Quit: Changing server).
13:54:07 -!- mquin_ has changed nick to mquin.
14:02:12 -!- AnMaster has quit (Quit: ZNC - http://znc.sourceforge.net).
14:07:55 -!- mquin has left (?).
14:18:08 <ais523> <KesZerda> Yes, and PCRE throws errors when it hits these limits. PHP interprets these errors as successes.
14:18:24 <ais523> if anyone ever asks me what's wrong with PHP, I now have this to refer to
14:19:56 <ais523> hmm, better version of the same quote by the same person:
14:20:00 <ais523> <KesZerda> PHP doesn't handle the error PCRE sends out sanely. If PCRE hits the backtrack limit (which is by default set to 10000000 backtracks, much higher than php's alteration), then PCRE throws an error -- PCRE_ERROR_MATCHLIMIT -- which PHP should throw for the code to handle, instead of quietly succeeding.
14:20:59 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
14:37:46 -!- deathmoniac has quit (Ping timeout: 276 seconds).
14:39:00 -!- deathmoniac has joined.
14:57:03 -!- ais523_ has joined.
14:57:37 -!- comex has quit (Ping timeout: 276 seconds).
14:58:03 -!- ais523 has quit (Disconnected by services).
14:58:04 -!- ais523_ has changed nick to ais523.
15:03:44 -!- comex has joined.
15:08:16 -!- comex has quit (Ping timeout: 240 seconds).
15:09:09 -!- comex has joined.
15:12:36 -!- Flonk has joined.
15:30:21 -!- Phantom_Hoover has quit (Quit: Leaving).
15:32:12 -!- songhead95 has joined.
15:32:32 -!- comex has quit (Ping timeout: 240 seconds).
15:33:37 <EgoBot> help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
15:33:40 -!- comex has joined.
15:38:01 -!- relet has joined.
15:40:55 -!- cpressey has joined.
15:46:50 <songhead95> how do you run <insert language> on hackego
15:48:54 <ais523> !bf ,[.,]!Hello, world!
15:49:10 <ais523> hackego isn't really good for running languages
15:49:15 <ais523> also, where's egobot gone?
15:51:12 -!- comex has quit (Ping timeout: 258 seconds).
15:51:17 -!- songhead95 has quit (Ping timeout: 252 seconds).
15:52:00 -!- comex has joined.
15:59:04 <cpressey> It's run away to join the circus!
16:00:36 <Gregor> I always knew it was flighty *sigh*
16:00:48 <EgoBot> help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
16:00:56 <ais523> hmm, maybe I just messed up my program?
16:01:02 <Gregor> Also, its !bf interpreter doesn't accept !input :P
16:01:08 <EgoBot> 61 +++++++++++++[>+>+++++++++>++++++++><<<<-]>>-.>---.<-.+.<---. [48]
16:01:36 <ais523> it always used to, didn't it?
16:01:41 <fungot> ais523: table fnord. they who should have been otherwise. nor is there any form of popular election were supposed to be right, i am not sure as to which st. paul suggests a reference to paley on this subject.
16:02:29 <fungot> Gregor: great britain had a tammany and a croker a good while before he or his family settle again to their business. their heads were stuck upon spears, and led the procession; whilst the royal captives who followed in the reign of henry viii., or fnord.
16:02:53 <ais523> !bf +++++++++++++[>+>+++++++++>++++++++><<<<-]>>-.>---.<-.+.<---.
16:03:32 <Gregor> Does anybody have any idea what tipjar.com is, other than a web site which was founded in 1996 and clearly hasn't been updated since 1996?
16:08:34 <fizzie> Fungot's ^bf takes !input, yes. And if you ^def foo bf bar, it will internally rewrite "^foo baz" to "^bf bar!baz".
16:13:39 -!- comex has quit (Ping timeout: 260 seconds).
16:15:07 -!- comex has joined.
16:17:48 <cpressey> Last night I managed to get my Eightebed compiler (written in Python) to emit C that actually compiles. Got a fair way along with the static validity analyzer too. All that's left is to finish that, write the runtime support (the most important part :/ ), and write a test suite, I guess.
16:24:51 -!- comex has quit (Ping timeout: 260 seconds).
16:27:03 -!- comex has joined.
16:32:50 -!- derdon has joined.
16:36:18 -!- comex has quit (Ping timeout: 245 seconds).
16:38:18 -!- comex has joined.
16:39:21 <cpressey> I'm trying to read the source for Epigram (literate Haskell). I should probably stop because I don't know enough about type theory to tell when they're joking or not.
16:52:40 -!- comex has quit (Ping timeout: 276 seconds).
16:53:47 -!- comex has joined.
16:59:09 -!- BeholdMyGlory has quit (Read error: Connection reset by peer).
17:02:00 -!- AnMaster has joined.
17:02:25 -!- BeholdMyGlory has joined.
17:04:00 -!- kar8nga has quit (Remote host closed the connection).
17:07:11 -!- Gregor-P has joined.
17:11:02 <Gregor-P> So, does anybody have any idea what tipjar.com is, other than a site that clearly hasn't changed since its founding in 1996?
17:11:35 <ais523> I don't, or I'd have answered earlier
17:11:40 <ais523> although I do vaguely recognise the name
17:12:06 -!- tombom has quit (Quit: Leaving).
17:13:29 <Gregor-P> ais523: I wouldn't have seen it earlier, hence reasking X-P
17:28:29 <cpressey> Gregor-P: One might think that is a "yes-no" question, until one notices the universal quantification in it, making it a "yes-not me" question.
17:29:26 <cpressey> Er, actually existential quantification I guess.
17:29:42 <Gregor-P> Thanks for the breakdown, now gimme some Eightebed so I cab break it :P
17:32:59 <Gregor-P> Nope, I'm going to drive a taxi into it.
17:35:14 -!- oerjan has joined.
17:35:17 <AnMaster> Gregor-P, what is "Eightebed", _no_ google hits here
17:35:50 <Gregor-P> cpressey: Congrats, you found a totally unique name.
17:36:49 <oerjan> sadly google is _disgustingly_ bad at crawling for entirely new esolangs
17:36:51 <cpressey> Gregor-P: Actually, alise found it. With her iPhone. But, like "Befunge", I recognized the significance of the word as a language name.
17:36:55 <nooga> "Puss, despite that it is intended to be a small tool, is still in early stage." is this sentence correct ?
17:37:27 <oerjan> AnMaster: shocking, isn't it? what are people _doing_ in this channel?
17:37:30 <AnMaster> actually, when refreshing I get one hit
17:37:47 -!- Gregor-W has joined.
17:38:00 <AnMaster> and that one hit is: [PDF] Allegheny County Medical Society [...] Pittsburgh and the eightebed [...]
17:38:29 <Gregor-W> nooga: First I will attempt to formulate a "correct" version, then I will attempt to diff them."Puss, although intended to be a small tool, is still in an early stage."
17:38:42 <Gregor-W> That's a bit wonky at the end, maybe want "of development"
17:38:49 <Gregor-W> (Not a correctness issue, just a clarity issue)
17:38:55 <AnMaster> Gregor-W, btw did yesterday turn out to be the best of worlds?
17:39:19 <Gregor-W> AnMaster: YES but for totally different reasons, I didn't snag coding time :P
17:41:12 <Gregor-W> nooga: Hmmm, OK, your "despite" clause, upon further thought, is probably correct, but very awkward, as you've assigned Puss the pronoun "it" in a clause before even getting to the action verb.
17:41:33 <oerjan> nooga: "despite that it is ..." sounds stilted in english, especially as an adjectival phrase
17:42:05 <oerjan> i think "despite being ..." would be the usual phrasing, except that would give you two "being" there...
17:42:08 <Gregor-W> nooga: "is still in early stage" just needs to be "an early stage", unless "early stage" is actually the name of a stage, not just a description.
17:42:46 <Gregor-W> Also, I'll just put forth that the whole sentence is kinda weird; although intended to be small, it's in an early stage of development? Are these two things related?
17:42:52 <AnMaster> what about: "Puss, although intended to be a small tool, is still even smaller than that"
17:42:59 <oerjan> er, one "being" and one "to be", which still would be awkward
17:43:56 <AnMaster> alternatively it might be way too large
17:44:03 <AnMaster> depends on which way you are goingf
17:44:04 <cpressey> Although oddly if you put the adjectival phrase first, the awkwardness with "it" diminishes: ""Despite that it is intended to be a small tool, Puss is still in [an] early stage [of development]." Perfectly fine to me.
17:44:35 <Gregor-W> cpressey: That is an interesting observation, AND true.
17:44:49 <AnMaster> Gregor-W, cpressey, if "early stage" is actually a name of a stage I would suggest using title case for it
17:45:02 <cpressey> I might use "Despite [the fact] that it is..." but that's my own preference for being wordy, I think
17:45:07 <nooga> PUSS IS A SMALL TOOL
17:45:12 <Gregor-W> cpressey: Naw, I'd do that too.
17:45:26 <Gregor-W> cpressey: I might even say "In spite of the fact that it is"
17:45:50 <AnMaster> cpressey, you call that wordy? Bah, nothing compared to the wordiness we had when _I_ was young.
17:46:09 <AnMaster> We had to use a shovel to dig our way through it!
17:46:51 <cpressey> O English! What mortal couldst tame thy hirsute naughtiness?
17:47:18 <AnMaster> this spell checker accepts the word however
17:47:25 <AnMaster> and I noticed yesterday that it didn't like "movie"
17:47:47 <AnMaster> I suspect en_GB might be rather outdated on this system
17:48:09 <Gregor-W> Now 'round yonder we ain't gettin' y'all's Queen's English wit' yer "hirsutes" n' yer "couldsts".
17:48:33 -!- Phantom_Hoover has joined.
17:49:20 <AnMaster> that's my only comment to that line.
17:50:19 <cpressey> I only know "hirsute" because it was on a list of "words you should study to do well on the verbal portion of the GRE", and shortly thereafter I actually heard it used, in an episode of Dr. Who.
17:51:10 <Gregor-W> People who contract the "Doctor" in "Doctor Who" are the WORST kind of people.
17:52:00 <cpressey> Fine, DOCTOR WHO. Anyway, I've noticed that happens a lot -- you learn a word, then suddenly hear it used. It's probably some kind of psychological trick, like, you heard the word before, but you didn't know what it meant, so you didn't retain the memory the same way.
17:52:10 -!- augur has quit (Remote host closed the connection).
17:52:11 <cpressey> But "hirsute"? I dunno, man. That was a weird coincidence.
17:53:18 -!- Gregor-W has quit (Quit: Page closed).
17:55:40 <oerjan> if you look like you're wearing a hair suit, you might be hirsute.
18:02:57 -!- Mathnerd314 has quit (Disconnected by services).
18:03:16 -!- Mathnerd314_ has joined.
18:03:37 -!- Mathnerd314_ has changed nick to Mathnerd314.
18:08:49 -!- ais523 has quit (Remote host closed the connection).
18:10:17 <nooga> i think i'm going to watch an episode of doctor who right now
18:11:06 <Phantom_Hoover> Fun fact: zapping an unknown wand at yourself is not a very good idea.
18:12:48 <AnMaster> Phantom_Hoover, how many times have you ascended?
18:14:26 <Phantom_Hoover> I've reached Minetown once or twice, but I've always died before getting back to the main dungeon.
18:15:03 -!- derdon has quit (Ping timeout: 240 seconds).
18:19:25 -!- kar8nga has joined.
18:19:28 -!- kar8nga has quit (Read error: Connection reset by peer).
18:25:00 <AnMaster> Phantom_Hoover, yes, several times
18:26:27 <AnMaster> currently I'm playing an extinctionism game. Quite close to that objective. If I have kept an accurate count almost everything except & A and D are either extinct or genocided by now
18:27:22 <AnMaster> well, I don't have any such scroll handy currently
18:27:33 <AnMaster> besides, extinction is more proper than genocide
18:27:58 <AnMaster> just used genocide for buggers like mind flayers and arch liches
18:28:27 <AnMaster> atm I'm using cursed scrolls of create monster in a boulder fort to create lots of dragons
18:39:15 <AnMaster> Phantom_Hoover, you could eat their corpses?
18:39:34 <Phantom_Hoover> I thought I could, but it tells me that I think eating it was a bad idea.
18:42:47 <Phantom_Hoover> Why my kitten wasn't done for cannibalism I do not know
18:50:37 -!- Gregor-P has quit (Quit: Bye).
18:52:06 -!- Gregor-P has joined.
19:01:35 -!- Mathnerd314 has quit (Disconnected by services).
19:01:56 -!- Mathnerd314_ has joined.
19:02:16 -!- Mathnerd314_ has changed nick to Mathnerd314.
19:03:01 <cpressey> "Fruit comprehensions? They're like list comprehensions, but for fruit."
19:11:12 <AnMaster> Phantom_Hoover, I find that the initial pet mostly gets in your way. I prefer pets from various figurines and eggs later on. I mean, a black dragon as a pet definitely beats a kitten by far. It doesn't just steal from shops, it kills the shop keeper (always leave that to strong pets, never do it yourself)
19:11:24 <AnMaster> Phantom_Hoover, what class are you playing?
19:12:02 <AnMaster> Phantom_Hoover, it is a bad choice if you never ascended. I would go for val. I did my first ascension with val and also the majority of them
19:12:36 <oerjan> cpressey: well if Fruit is a Monad, you can use do blocks for that purpose
19:13:00 <AnMaster> especially if you die before the quest. Because val is much stronger at low levels than wiz. wiz is only really good for the latter half of the game
19:13:02 <oerjan> alas, monad comprehensions were abolished in Haskell 98
19:14:00 <cpressey> Phantom_Hoover: Perhaps it thought it was a Wumpus.
19:15:47 <cpressey> oerjan: Not even available as one of those optional pragma things?
19:15:51 <AnMaster> Phantom_Hoover, sokoban? Be careful of the luck penalties
19:16:25 <Phantom_Hoover> There was a monster behind a boulder which wouldn't move.
19:22:34 <oerjan> cpressey: hm maybe it's been added recently - i think it was said they'd add it if someone made a patch
19:23:33 <cpressey> oerjan: I'm having a hard time seeing how "do" *isn't* a monad comprehension, actually
19:23:55 <oerjan> yes, do notation and comprehensions are equivalent
19:24:11 -!- tombom has joined.
19:25:28 <cpressey> Anyway, I'm sick of people asking me to define fruit in terms of monads, so I refuse to comply!
19:26:10 <oerjan> hm i cannot find it in the ghc's language option list
19:26:32 <oerjan> there are two options for comprehensions, but none extends it to monads
19:27:43 <oerjan> both do notation and list comprehensions are syntactic sugar
19:29:23 <cpressey> oerjan: Oh, while we're on the subject, there's something that's been on my mind for a while
19:30:17 <cpressey> I think I've heard that monads in Haskell are "strict in the first argument'. Is this true? Is this a necessary quality of monads? And is this the real reason why they can be used for IO?
19:30:34 <oerjan> it's untrue, in fact it varies by monad
19:31:27 <oerjan> IO is strict in the first argument (to >>=), but e.g. Reader is strict in the second
19:32:11 <cpressey> OK. Would it be true that a monad that has to match "the outside world" as it were, would have to be strict in at least one argument?
19:33:10 <oerjan> well eschewing concurrency, all haskell evaluation would generally need one of the arguments first, if any
19:34:23 <cpressey> I don't think that's the meaning of "strict" I'm thinking of.
19:35:01 <oerjan> hm wait that's not true if you use seq, either
19:36:46 <oerjan> generally in a >>= f it would be harmless to evaluate the _function_ f, i think, so it doesn't have to be precisely strict in the first one
19:37:01 <cpressey> I'm basically trying to figure out if there is something inherent about monads that lets them define evaluation order, or whether they're just "carriers" for something else (something like seq, yeah) that defines the evaluation order.
19:37:27 <oerjan> the inherent thing about monads is that they force _data flow_, i think
19:37:46 <pikhq> Yeah, they force data flow. They absolutely do not (in general) force evaluation order.
19:37:59 <pikhq> Well, no more so than any other set of functions can.
19:38:28 <pikhq> (any function can effectively force evaluation order just with seq or judicious pattern matching, after all)
19:39:00 <cpressey> OK. That helps clarify it. Thank you all.
19:39:22 <oerjan> seq can be simulated with pattern matching whenever its left argument is of a known algebraic data type, incidentally
19:40:22 <oerjan> (just do any match that forces actually finding the top constructor)
19:42:34 <oerjan> !haskell let loop = Nothing >> loop in loop :: Maybe ()
19:44:55 <oerjan> !haskell import Control.Monad.Reader; loop = loop >> ask; main = print $ runReader loop "Poof!"
19:49:15 <cpressey> Actually, I'm not sure it's any clearer.
19:49:31 <oerjan> !haskell import Control.Monad.Writer; test = tell [1] >> undefined >> tell undefined; main = print $ (head output, result) where (output, result) = runWriter test
19:50:12 <oerjan> !haskell import Control.Monad.Writer; test = tell [1] >> undefined >> tell undefined; main = print $ (head output, result) where (result, output) = runWriter test
19:50:49 <cpressey> Phantom_Hoover: I thought I did several times. I can never seem to retain a coherent mental model of how they work, though.
19:51:01 <oerjan> cpressey: the last is an example of a Monad where _part_ of the monad value is strict in the first argument to >>, and _part_ is strict in the second :)
19:53:33 <EgoBot> return :: (Monad m) => a -> m a
19:53:41 <EgoBot> (>>=) :: (Monad m) => m a -> (a -> m b) -> m b
19:54:24 <Phantom_Hoover> These must satisfy the axioms that (return x) >>= f == f x,
19:54:50 -!- Mathnerd314 has quit (Disconnected by services).
19:55:10 -!- Mathnerd314_ has joined.
19:55:30 -!- Mathnerd314_ has changed nick to Mathnerd314.
19:55:41 <Phantom_Hoover> m >>= return == m, and (m >>= f) >>= g == m >>= (\x -> (f x >>= g))
19:57:48 <cpressey> That's the whole problem with the didacticism of monads. Just stating the definition of something does very little to help one understand it.
19:57:53 <Phantom_Hoover> cpressey, return "puts" a value into a monad, >>= takes it "out" and applies it to its second argument.
20:00:35 <pikhq> The first law is clearer with do notation. The second is hairy without Kleisli arrows.
20:01:35 -!- CakeProphet has joined.
20:02:03 <pikhq> (with that, we get the monad laws as: return >=> g == g, f >=> return == f, (f >=> g) >=> h == f >=> (g >=> h))
20:02:21 <pikhq> BTW, >=> :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
20:02:28 <pikhq> m >=> n = \x -> do { y <- m x; n y }
20:02:45 <pikhq> See, it's nice and clean that way. Sadly, not much help.
20:08:09 <cpressey> It would be even cleaner (but probably still not much help) if the operators were visually distinct instead of being combinations of arrows and lines. Thank you, ASCII.
20:08:36 <pikhq> m >=> n = \x -> m x >>= n
20:09:20 <pikhq> (after mentally applying the de-sugaring, and then a simple reduction)
20:09:46 <cpressey> Phantom_Hoover: Yes, but never mind.
20:11:38 <pikhq> cpressey: Would it make you feel better to know that you don't have to understand any of this to use Haskell?
20:12:00 <cpressey> pikhq: Not exactly, since I've written several nontrivial programs in Haskell.
20:12:09 <pikhq> It's most relevant when you're wondering if you could make a datatype a monad.
20:13:40 <cpressey> I tend to just avoid monads and write any I/O code that I have to do in cargo cult fashion.
20:14:41 <pikhq> http://www.haskell.org/haskellwiki/Monad_Laws Perhaps this helps?
20:15:14 <pikhq> If it doesn't, you can conclude that monads are burritos and call it a day.
20:18:47 <Mathnerd314> someone asked me about monads the other day... I tried to explain, but he lost interest after 5 minutes
20:21:53 <Mathnerd314> I really need an "monads in minutes" explanation :p
20:22:27 <oerjan> a monotone monologue on monads, measurable in minutes
20:24:13 -!- jcp has quit (Ping timeout: 245 seconds).
20:25:07 <cpressey> Mathnerd314: Well, I can offer this piece of advice: don't just recite the monad laws.
20:26:16 -!- jcp has joined.
20:34:39 <nooga> Mathnerd314: what are these monads anyway?
20:35:22 <oerjan> !haskell [] >> undefined :: [()]
20:36:18 <Mathnerd314> and I pulled up this page: http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
20:36:58 <Mathnerd314> and then he stopped paying attention and talked about other things :-(
20:37:30 <cpressey> It's kind of a boring blog post
20:38:40 <Mathnerd314> yeah, I need something exciting and/or short
20:38:52 <Mathnerd314> maybe I should have asked on #haskell first
20:39:15 <cpressey> Monads are not the only things in Haskell that I essentially can't think in. I also can't think in pointfree form.
20:43:32 <cpressey> Yeah -- I guess I'm just stupid.
20:49:23 <cpressey> Phantom_Hoover: http://www.haskell.org/haskellwiki/Pointfree
20:50:36 <cpressey> In contrast, a lot of the time I don't even use fold -- I write the folding into my function.
20:50:56 <Mathnerd314> yeah, I tend to use recursion instead of combinators
20:51:49 <cpressey> I wouldn't call it NIH exactly, but it is the same kind of thing probably.
20:51:59 <cpressey> I like to call it "pointless style"
20:52:12 <Mathnerd314> well, unless you've memorized them, the higher-order functions are rather hard to discover
20:54:10 <oerjan> cpressey: you're not the first one to use that term :)
20:55:01 <oerjan> (in fact lambdabot's command for generating it is @pl)
20:56:03 <cpressey> pl \a (b,c) -> a c b =====> (`ap` snd) . (. fst) . flip
20:57:59 <oerjan> cpressey: uncurry . flip, i think
20:58:29 <oerjan> @pl afair is not very smart with simplifications
20:58:55 <oerjan> or wait is that curry or uncurry
20:59:10 <oerjan> !haskell (curry . flip) (+) (1,2)
20:59:23 <oerjan> !haskell (uncurry . flip) (+) (1,2)
21:00:44 <oerjan> cpressey: i think many of ghc's optimization rules for lists depend on using fold/map style rather than explicit recursion
21:01:27 <oerjan> if you want it to remove intermediate lists
21:09:23 <oerjan> !haskell import Control.Monad.State.Strict; main = flip runState 1 $ put 2 >> undefined >> put 3
21:09:41 <oerjan> !haskell import Control.Monad.State.Strict; main = print . flip runState 1 $ put 2 >> undefined >> put 3
21:09:44 <EgoBot> input.19732.hs: Prelude.undefined
21:10:13 <oerjan> so the strict State monad is essentially strict in _both_ arguments
21:10:39 <oerjan> !haskell import Control.Monad.State.Lazy; main = print . flip runState 1 $ put 2 >> undefined >> put 3
21:17:26 <EgoBot> *** Exception: Prelude.undefined
21:17:57 <oerjan> it's a most undefined value :D
21:18:05 <cpressey> OK, that helps explain what the heck you were doing
21:19:08 <oerjan> the definition of a strict function f is that f undefined is undefined :)
21:22:59 <oerjan> well mathematically it's indistinguishable from being strict
21:23:54 <oerjan> sure - how can you be sure it didn't look at its value before returning undefined?
21:25:41 <oerjan> incidentally that function is the reason why haskell's seq breaks the eta conversion rule - \x -> undefined = \x -> undefined x but the latter is not undefined
21:26:21 <oerjan> Phantom_Hoover: that ; doesn't end the let block
21:26:53 <oerjan> you need {} brackets in that case
21:27:29 <oerjan> assuming EgoBot's !haskell even allows two ghci commands on a line
21:27:53 <oerjan> replacing ; with in should work
21:28:15 <Phantom_Hoover> !haskell let f _ = undefined in putStrLn "Hello, world!"
21:28:30 <Phantom_Hoover> !haskell let f _ = undefined in f (putStrLn "Hello, world!")
21:28:31 <EgoBot> *** Exception: Prelude.undefined
21:29:53 -!- Mathnerd314 has quit (Disconnected by services).
21:29:58 <oerjan> that putStrLn "Hello, world!" wouldn't have been run even if f were non-strict, unless it actually returned it
21:30:12 -!- Mathnerd314_ has joined.
21:30:31 -!- Mathnerd314_ has changed nick to Mathnerd314.
21:30:42 <oerjan> evaluating an IO action does _not_ run it
21:31:08 <Phantom_Hoover> oerjan, oh. What things have side-effects when evaluated, then?
21:31:23 <oerjan> !haskell (putStrLn "Hello, world!") `seq` "Boo!"
21:32:26 <oerjan> half the point of haskell's purity is that evaluation _has_ no side effects
21:33:00 <Sgeo__> undefined is not a side-effect
21:33:56 <oerjan> oh well... it depends how you look at it, but mainly you say the result of the whole computation is undefined/bottom then
21:34:30 <oerjan> the addition of exceptions has messed things up a little bit
21:37:44 <oerjan> the theory they used is that the result of a pure computation could be either an ordinary value, or a set of possible exceptions
21:38:37 <oerjan> note that there is no way to distinguish different exceptions from inside _pure_ code - they can only be caught in the IO monad
21:41:16 <oerjan> there's at least one testing library for haskell which uses catching undefined exceptions to test whether functions are strict
21:43:44 <cpressey> <oerjan> evaluating an IO action does _not_ run it
21:44:14 <Sgeo__> main is a little bit special. Whatever it describes, gets run
21:44:18 <oerjan> as that !haskell (putStrLn "Hello, world!") `seq` "Boo!" above proves
21:44:43 <Sgeo__> IO a is just a description of an IO action
21:45:13 <oerjan> !haskell System.IO.Unsafe.unsafePerformIO (putStr "Hello, world!") `seq` "Boo!"
21:46:29 <Phantom_Hoover> !haskell let f _ = undefined in f $ System.IO.Unsafe.unsagePerformIO $ putStrLn "Hello, world!"
21:46:55 <Phantom_Hoover> !haskell let f _ = undefined in f $ System.IO.Unsafe.unsafePerformIO $ putStrLn "Hello, world!"
21:46:56 <EgoBot> *** Exception: Prelude.undefined
21:47:33 <Sgeo__> !haskell [putStrLn "X"]
21:47:40 <oerjan> unsafePerformIO is not considered to be inside haskell's ordinary semantics :)
21:48:09 <Sgeo__> !haskell print [putStrLn "X"]
21:48:54 <oerjan> Sgeo__: the parse error was because it didn't work as a ghci command, so !haskell tried it as a module, which it doesn't parse at
21:49:17 <cpressey> !haskell let f _ = undefined in f (f)
21:49:18 <EgoBot> *** Exception: Prelude.undefined
21:49:32 <oerjan> to get useful error messages in !haskell, you have to use the module form
21:49:52 <oerjan> (just prepend main = or main = print $ , mostly)
21:50:03 <Sgeo__> !haskell main = print [putStrLn "X"]
21:50:25 * oerjan bets on a missing Show instance for IO String
21:51:06 <Sgeo__> But at least that makes sense
21:51:17 <cpressey> !haskell length [putStrLn "X"]
21:51:27 <oerjan> in other words, it's a perfectly legal list, there's just no way defined for printing it
21:51:35 <cpressey> But putStrLn "X" wouldn't even have been evaluated there
21:51:59 <Sgeo__> The only thing that ever gets "evaluated" (barring unsafePerformIO trickery) is main
21:52:17 <oerjan> i don't think you _can_ get an IO action evaluated without running it unless you use seq
21:53:13 <cpressey> It's interesting how a beautiful mathematical framework can look all contrived and stuff once you turn it into a programming language
21:53:19 <oerjan> (or something equivalent to seq. pattern matching won't work since IO has no constructors)
21:53:52 <Sgeo__> !haskell length [ (putStrLn "X") `seq` () ]
21:54:10 <oerjan> Sgeo__: that still isn't even evaluated
21:54:29 <oerjan> however replace length with head
21:54:46 <Sgeo__> !haskell head [ (putStrLn "X") `seq` () ]
21:55:14 <cpressey> What does seq *do* with its first argument?
21:55:30 <oerjan> evaluates it to weak head normal form
21:55:36 <Sgeo__> !haskell print (undefined `seq` ())
21:55:37 <EgoBot> *** Exception: Prelude.undefined
21:55:56 <oerjan> which means the top constructor, for an ordinary data type
21:55:57 <cpressey> What does it do with the weak head normal form it gets?
21:56:22 <cpressey> And evaluating an argument by definition has no side effects
21:56:42 <oerjan> cpressey: if it involves evaluating variables, the results are cached
21:56:51 -!- Gregor-P has quit (Ping timeout: 264 seconds).
21:57:39 <oerjan> ok there is _one_ case where seq matters
21:57:50 <Sgeo__> I may have misspoken before
21:57:52 <oerjan> !haskell undefined `seq` "Test"
21:57:53 <EgoBot> *** Exception: Prelude.undefined
21:58:46 <oerjan> cpressey: semantically seq does nothing other than check whether the first argument is undefined before returning the second
21:59:44 <oerjan> however this has the _practical_ consequence of evaluating the thunk for the first argument, with all usual caching results and plugging of memory leaks
22:00:54 <oerjan> types don't depend on values in haskell, which is the definition of dependent typing
22:01:28 * Sgeo__ knows what monads are, but not much of what dependent types are
22:02:11 <Phantom_Hoover> Sgeo__, like oerjan said, they're types that depend on values.
22:02:21 -!- zzo38 has joined.
22:03:04 <Sgeo__> So, a dependent type could be a number between 1 and 10?
22:03:06 <cpressey> Monads are dependent values. And seq is a hoax!
22:03:28 <oerjan> i recall someone noted once that ghc doesn't even guarantee evaluating a _first_ in a `seq` b
22:03:33 <pikhq> Sgeo__: Yes, (Number x) => x >= 1 && x <= 10 -- is an example.
22:03:35 <zzo38> What I should do is write a external program that you can pipe output of TeX into, so that it can interpret the output of \showbox and other things, and then allow you to re-read the reults using \read command and so on
22:04:17 <oerjan> ghc's strictness analysis could cause it to rearrange things
22:04:19 <Sgeo__> Are there any languages that use dependent types?
22:04:22 <zzo38> (What should I call this program?)
22:04:29 <oerjan> Sgeo__: Coq, Agda, Epigram
22:05:04 <Sgeo__> Coq is a mathematical proof thing, right? So I'll just skip it. What are Epigram and Agda like?
22:05:22 <pikhq> oerjan: Yeah, pseq is the one with that guarantee.
22:05:31 <Phantom_Hoover> Sgeo__, mathematical proof things but slightly less so.
22:05:35 <zzo38> (Perhaps "pipetex" will do? Or do you have a better idea?)
22:06:33 <oerjan> Sgeo__: the thing is dependent typing basically forces you to do a lot of proving anyhow afaik
22:07:35 <oerjan> because you are basically allowing your types to be mathematical statements about the relationships of values, which must be proved to show the program is well-typed
22:08:29 <cpressey> Phantom_Hoover: There's the literate Haskell source, formatted into a PDF. It's a real hoot.
22:08:51 <Sgeo__> So, it's not feasable to write a game in a dependent typing language?
22:09:19 <oerjan> cpressey: i recall from a previous comment that your last sentence there might _not_ be sarcasm? :D
22:09:53 <cpressey> oerjan: I think "a real hoot" has a complex and subtle meaning in my idiolect
22:09:58 <Phantom_Hoover> Sgeo__, Coq, Agda and probably Epigram can't have recursive functions like in Haskell, so writing a game would be nigh-on impossible.
22:10:09 <cpressey> It is certainly enjoyable *on some level* to read.
22:10:15 <oerjan> Phantom_Hoover: codata codata codata
22:11:19 <Sgeo__> Don't know how a facility works == there is no facility to do what that facility does?
22:11:34 <oerjan> for one thing, it allows you to represent processes that might go on forever, as long as finding the _next_ item always terminates
22:11:38 <cpressey> Phantom_Hoover: Even ignoring codata and such -- I'm pretty sure you could write some games without recursive functions.
22:12:01 <cpressey> Tic-tac-toe is total, for example.
22:12:06 <oerjan> indeed there are many games which terminate
22:12:23 <cpressey> (more interesting than tic tac toe)
22:12:34 <oerjan> chess is also terminating
22:12:53 <Sgeo__> Does finding the next item have to provably always terminate?
22:12:58 <cpressey> oerjan: only because there is a recursion limit :)
22:15:17 <oerjan> cpressey: well yeah and also a 3-time repetition rule
22:16:57 <Phantom_Hoover> oerjan, you can get around that with the Thue-Morse sequence and the knights.
22:17:07 <oerjan> Sgeo__: there is afaik also a trick you can do for nonterminating things - use a codata based monad of the form data Delay a = Now a | Later (Delay a)
22:17:33 <cpressey> I'm more familiar with Büchi automata than codata, but you could probably use them instead to model a process that is supposed to "never" terminate, like a web server.
22:17:48 <oerjan> Phantom_Hoover: are they really repeating _whole_ subgames? i always assumed it was just 3 repeating positions, at any time
22:18:21 <oerjan> Sgeo__: that way if a computation cannot be proved to terminate, you can just do pieces of it at a time
22:19:48 <zzo38> There is a 50-move rule in chess, also.
22:19:57 <oerjan> Sgeo__: anyway in dependent typing they like to have the default be that things always terminate, because otherwise you get trouble with checking the _proofs_ of things
22:20:01 <zzo38> (Although you could ignore that and other rules in some causes if you need to)
22:20:16 <oerjan> zzo38: i assumed that was what cpressey meant by recursion limit
22:20:24 <coppro> only threefold reitition is required to make chess terminate
22:20:34 <Phantom_Hoover> In any case, you're assuming that a termination checker will notice that all chess games terminate.
22:20:46 <coppro> I think also only 50 moves is required as well
22:21:03 <coppro> (that is to say that either rule will guarantee a conclusion
22:21:26 <oerjan> Phantom_Hoover: this being dependent typing, you probably have to write the proof yourself
22:22:46 <Sgeo__> Funnily enough, noone sane is here
22:23:38 <oerjan> Sgeo__: basically iiuc if your _proof_ is itself well-typed and is known to terminate, then you don't have to check it at runtime, but this breaks down if your proof may not terminate for all values
22:23:43 <cpressey> But all the masochists are too busy writing stuff in C++.
22:24:19 <Sgeo__> if i understand correctly
22:30:44 <cpressey> Heh, codata actually seems pretty neat.
22:31:08 <oerjan> it's like lazy data structures in a way
22:31:47 -!- Phantom_Hoover has left (?).
22:31:50 <oerjan> things still need to terminate, but only as far as you evaluate them
22:31:54 -!- Phantom_Hoover has joined.
22:33:27 <cpressey> oerjan: What do you mean by "things"?
22:33:58 <zzo38> Now instead of C++ you have to write things in C+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.....
22:35:08 -!- CakeProphet has quit (Quit: leaving).
22:37:36 <oerjan> cpressey: evaluations/pure computations?
22:38:06 <oerjan> Phantom_Hoover: um i think i'm getting close to over my head here...
22:39:09 <oerjan> but with induction you build things up by assembling a finite number of pieces
22:39:39 <oerjan> with coinduction you deconstruct things by taking them _apart_ to a finite level down
22:39:46 <coppro> cheater99: seems accurate
22:40:32 <cpressey> oerjan: Is it the case that codata must be infinite? It seems like it should be (being the dual of data, which must be finite)
22:41:06 <oerjan> cpressey: i don't think so, more like data is a subset of codata
22:42:02 <oerjan> like the rationals are a subset of the computable reals (i think if you use continued fraction representation, they _are_ precisely data and codata versions, respectively)
22:42:44 <oerjan> of course you could easily force codata infinite by not having any base constructors...
22:42:59 <oerjan> data Stream a = Stream a (Stream a)
22:43:09 <cpressey> oerjan: You just blew my mind (or would have, if I had any left.)
22:44:49 <cheater99> has anyone seen the ad for 'legend of aang'?
22:44:49 <cheater99> is it only me or is the part about them having to join their forces
22:44:49 <cheater99> just like the intro to captain planet???
22:47:29 -!- oerjan has quit (Quit: Good night).
22:49:15 <Sgeo__> Legend of Aang? Um, the series is finished
22:49:54 -!- Flonk_ has joined.
22:50:53 * Sgeo__ glares suspiciously at Flonk_ glaring suspiciously
22:51:46 -!- Flonk has quit (Ping timeout: 265 seconds).
22:51:49 -!- Flonk_ has changed nick to Flonk.
22:52:42 -!- Gregor has quit (Ping timeout: 260 seconds).
22:52:50 <zzo38> Why is charmap broken now?
22:53:09 <Sgeo__> Hmm, apparently, there's a game Legend of Aang
23:01:17 <zzo38> I have a font on my computer named "Aegyptus" and I am unsure how to work it
23:17:55 -!- GreaseMonkey has joined.
23:35:07 -!- MigoMipo has quit (Quit: Quit).
23:36:01 -!- tombom has quit (Quit: Leaving).
23:39:13 -!- augur has joined.
23:44:28 -!- Gregor-L has joined.
23:44:54 <cpressey> Gregor-L: I know W and P, but L?
23:51:16 -!- Mathnerd314 has quit (Ping timeout: 276 seconds).
23:51:29 -!- zzo38 has quit (Remote host closed the connection).
23:55:36 <cpressey> Maybe his ferry sunk, and L stands for Lifeboat.