←2011-11 2011-12 2012-01→ ↑2011 ↑all
2011-12-01
00:04:55 -!- pikhq has quit (Ping timeout: 244 seconds).
00:04:56 -!- pikhq_ has joined.
00:16:30 -!- pumpkin has joined.
00:19:24 -!- sebbu2 has quit (Quit: updating xchat-wdk).
00:19:56 -!- copumpkin has quit (Ping timeout: 248 seconds).
00:30:30 -!- lambdabot has joined.
00:41:54 <zzo38> The things about Dungeons&Dragons game, is that unlike chess and poker and so on, it is possible to solve situations that are impossible to solve.
00:54:00 -!- pikhq_ has quit (Ping timeout: 244 seconds).
00:59:22 -!- pikhq has joined.
01:02:44 <zzo38> http://hackage.haskell.org/package/barrier-monad
01:08:00 -!- DCliche has joined.
01:11:17 -!- Klisz has quit (Ping timeout: 252 seconds).
01:15:00 -!- pumpkin has changed nick to copumpkin.
01:24:03 -!- BeholdMyGlory has joined.
01:24:05 -!- BeholdMyGlory has left.
01:26:37 -!- sebbu has joined.
01:26:47 -!- kmc has quit (Quit: Leaving).
02:08:49 -!- Jafet has joined.
02:14:52 -!- pikhq_ has joined.
02:15:02 -!- pikhq has quit (Ping timeout: 244 seconds).
02:15:05 -!- copumpkin has quit (Ping timeout: 240 seconds).
02:23:13 -!- Darth_Cliche has joined.
02:25:07 -!- zzo38 has quit (Remote host closed the connection).
02:26:55 -!- DCliche has quit (Ping timeout: 244 seconds).
02:27:10 -!- itidus21 has changed nick to alloca_i32.
02:31:37 -!- alloca_i32 has changed nick to itidus21.
02:36:48 -!- copumpkin has joined.
03:07:18 <itidus21> `log situation
03:07:23 <HackEgo> 2010-11-15.txt:18:29:06: <ais523_> (I'm aware of the US phone situation)
03:42:16 -!- zzo38 has joined.
04:10:32 <zzo38> I invented the D&D feat "Favored Mercy"; you have to select a creature type same as the ranger's favored enemy list and then there are various bonuses and restrictions that apply.
04:13:39 <zzo38> "Science Made Stupid: How to Discomprehend the World Around Us" by Tom Weller
04:14:26 <zzo38> "Cvltvre Made Stvpid: A Misguided Tour of Illiterature, Fine & Dandy Arts, & the Subhumanities" by Tom Weller
04:18:15 -!- azaq23 has joined.
04:37:47 <kallisti> good morning
04:38:05 <kallisti> does anyone no of a google API where I can grab timezone info?
04:38:13 <kallisti> equivalent to the "time in <location>" searched
04:38:16 <kallisti> *searches
04:40:07 -!- MDude has changed nick to MSleep.
04:59:56 <Sgeo> kallisti, update
05:00:07 <kallisti> Sgeo: oZOMG
05:00:27 <pikhq_> kallisti: tzinfo?
05:01:57 <kallisti> pikhq_: can I ask tzinfo "time in anywhere, USA" and it will tell me the time?
05:03:04 <pikhq_> Erm, zoneinfo
05:03:05 <pikhq_> Bleh.
05:03:14 <kallisti> oh, possibly.
05:03:32 <kallisti> I don't think it would work with small town names though
05:03:42 <kallisti> I'll just... do google searches and regex the time. :P
05:03:53 <pikhq_> You'd probably need a map for *that*.
05:04:08 <kallisti> (it's an IRC bot so dependence on a network connection isn't a problem)
05:04:27 <pikhq_> Also, that's bound to screw up: town name is ambiguous. :)
05:04:45 <kallisti> that's fine.
05:04:56 <pikhq_> Well, with state I *think* it might not be?
05:05:05 <kallisti> a reasonable person would provide a town, state combo
05:05:23 <kallisti> or a town, whateverelseyourcountrycallsthisshit, country
05:07:05 <kallisti> wow... boiling peanuts is rather time consuming.
05:07:11 <kallisti> suppose to boil them for like 24 hours.
05:09:12 <kallisti> hmmm, well, Google doesn't really make this easy.
05:09:24 <kallisti> maybe there XML api is better for this.
05:15:34 <zzo38> Do you know the sidereal time?
05:17:29 <kallisti> zzo38: yes it's 04:18 LST here
05:17:36 <kallisti> :D
05:52:50 <itidus21> is that a welsh town?
05:53:10 <kallisti> ?
05:53:19 <itidus21> whateverelseyourcountrycallsthisshit
05:54:09 <kallisti> no town is a whateverelseyourcountrycallsthisshit town.
05:54:15 <kallisti> obviously.
05:55:09 * kallisti has been boiling peanuts for over an hour now.
05:55:26 <itidus21> but then there is a town named Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
05:56:13 <kallisti> oh look that's an actual thing.
05:56:49 <itidus21> Toponymy is the scientific study of place names (toponyms), their origins, meanings, use and typology. A toponymist is one who studies toponymy.
05:57:57 <kallisti> itidus21: The apple is the pomaceous fruit of the apple tree, species Malus domestica in the rose family (Rosaceae). It is one of the most widely cultivated tree fruits, and the most widely known of the many members of genus Malus that are used by humans. Apple grow on small, deciduous trees that blossom in the spring and produce fruit in the fall.
05:58:02 <kallisti> ..
05:59:19 <kallisti> hmmm, these peanuts are still kind of crunchy.
05:59:26 <kallisti> maybe another hour? :P
06:02:33 <itidus21> A seminal experiment by Karen Wynn in 1992 involving Mickey Mouse dolls manipulated behind a screen demonstrated that five-month-old infants expect 1 + 1 to be 2, and they are comparatively surprised when a physical situation seems to imply that 1 + 1 is either 1 or 3.
06:02:45 <kallisti> ...
06:03:06 <kallisti> `word 50
06:03:10 <HackEgo> serate erilinst squcefingrata nridi sche dk feculaza le pres elatardia kan za ar sau rempanissidaroparinsilh tovigisallassa toncippilluce riedaiilloccau tfinan rous affiens feaatherroellyte rumqh sed em jelendcclocwted nut va acistophoroculvaliamangtola disses climan coo ebyted wity baniff hinosele proley widuchissirs forraseek oliterskiitcligitussies kr rapeosendon co pos lornfiernsident unalragewelsiegaus ze beffuringlatismen natschic bareng
06:03:22 <itidus21> after being taught the meanings of the Arabic numerals 0 through 4, one chimpanzee was able to compute the sum of two numerals without further training
06:03:32 <kallisti> feaatherroellyte
06:07:48 <zzo38> kallisti: O, you do know the sidereal time. Do you know the moon declination?
06:09:51 -!- monqy has quit (Read error: Operation timed out).
06:11:44 <kallisti> zzo38: nope
06:12:04 <kallisti> zzo38: I actually just googled for the former. :P
06:12:09 <kallisti> but I now know what it means.
06:12:17 <zzo38> Moon declination is -8 degrees 18 minutes
06:12:25 <zzo38> Sideral time is the right ascension of the zenith.
06:12:41 -!- monqy has joined.
06:12:50 <zzo38> 2h33m here
06:13:07 -!- azaq23 has quit (Quit: Leaving.).
06:14:31 <kallisti> for a second that looked like leetspeak..
06:14:41 <kallisti> some weird way to say "same here"
06:15:00 <zzo38> Actually I meant 2 hour 33 minutes
06:15:06 <kallisti> yes I know.
06:17:28 <kallisti> awwww yeah boiled peanut time.
06:17:31 <kallisti> if you have never had boiled peanuts
06:17:35 <kallisti> I highly recommend that you do.
06:18:21 <zzo38> Do you know what right ascension and declination are? These are equatorial coordinates; do you know ecliptic coordinates?
06:22:44 <kallisti> I'm vaguely familiar with what an ecliptic is.
06:22:55 <kallisti> I can imagine that ecliptic coordinates are based on the ecliptic plane.
06:23:08 <zzo38> Yes, that is what it is.
06:24:32 <kallisti> and I'm guessing equatorial coordinates are based on the equator?
06:24:38 <zzo38> Yes.
06:25:29 <zzo38> Hour angle can be used instead of right ascension. And you can use local hour angle or Greenwich hour angle.
06:26:00 <kallisti> but it's more or less expressing the same thing as right ascension, yes?
06:26:14 <zzo38> Yes, the difference is where the zero will be.
06:26:18 <kallisti> right
06:26:42 <kallisti> is hour angle in different units compared to right ascension?
06:27:12 <zzo38> Usually they are both given in units of hours, although you can use degrees instead.
06:28:38 <kallisti> ah so greenwich hour angle and right ascension are equivalently based on the prime meridian.
06:29:11 <zzo38> Right ascension has zero at the vernal equinox. Greenwich hour angle has zero at Greenwich.
06:29:26 <zzo38> Local hour angle is based on your location.
06:30:18 <kallisti> ah okay
06:30:51 <kallisti> could be useful to know local hour angle if you're looking for celestial bodies in the sky.
06:31:00 <kallisti> is there any notion of local declination?
06:31:33 <zzo38> kallisti: Not as far as I know, but I was thinking about the same thing earlier today; you could have local declination too.
06:31:54 <kallisti> it would just be less convenient without GPS monitoring of some kind
06:32:07 <kallisti> with local hour angle you could go by your time zone instead of the precise longitude.
06:34:23 <kallisti> these poorly made boiled peanuts make me want some actual boiled peanuts.
06:34:38 <zzo38> You could, but timezones are only approximate. Using your precise longitude is better (you could find it in a city list if you have no GPS, and enter it into the computer, together with your latitude as well)
06:35:02 <zzo38> Of course city lists are more accurate than using timezones but still not perfectly accurate because the city is larger than one point.
06:35:24 <kallisti> I basically took some ripe shelled frozen peanuts and boiled them. you're supposed to take unripe peanuts with shells and boil them forever in salt water like peas.
06:35:43 <Sgeo> zzo38, is your barrier monad code up yet >.>
06:35:51 <zzo38> Sgeo: Yes.
06:35:58 <zzo38> The package is called "barrier-monad"
06:36:21 <Sgeo> ty
06:36:27 <zzo38> I have no peanuts
06:36:48 <kallisti> I don't even know if they sell raw unripe peanuts.
06:37:17 <zzo38> Can you grow peanuts in your garden?
06:37:19 <kallisti> typically you buy boiled peanuts from stands. it's a popular thing in the deep south where peanuts are grown (especially Georgia and South Carolina)
06:37:23 -!- oerjan has joined.
06:37:28 <kallisti> zzo38: doubt it.
06:37:34 <kallisti> well, depending on where you live
06:38:36 <kallisti> typically you buy boiled peanuts from stands. it's a popular thing in the deep south where peanuts are grown (especially Georgia and South Carolina)Peanuts grow best in light, sandy loam soil. They require five months of warm weather, and an annual rainfall of 500 to 1,000 mm (20 to 39 in) or the equivalent in irrigation water.
06:38:55 <kallisti> Peanuts grow best in light, sandy loam soil. They require five months of warm weather, and an annual rainfall of 500 to 1,000 mm (20 to 39 in) or the equivalent in irrigation water.
06:38:59 <kallisti> :P
06:39:21 <kallisti> zzo38: good luck :P
06:41:57 * oerjan recalls his mom grew tomatoes and cucumbers indoors, they needed buckets of water every day
06:42:35 <kallisti> that's because you live in a barren icy tundra.
06:42:36 <kallisti> right?
06:42:37 <oerjan> well i'm sure there were tomatoes, i think there were cucumbers.
06:42:43 <oerjan> kallisti: close enough.
06:43:24 <kallisti> I'm pretty sure tomatos more or less grow themselves here.
06:43:32 <oerjan> i should point out this was still done in the summer, so they did get sunlight through the big glass door.
06:43:38 <kallisti> my parents have a tomato garden and I don't think I've seen them upkeep it very much.
06:44:43 <kallisti> also corn. wow, imagine that! plants that originate from the Americas grow well in the Americas!
06:44:52 <oerjan> well afair it was mostly the water.
06:45:31 <oerjan> the americas _are_ big you know, and especially in the north-south direction which temperatures vary along :P
06:46:09 <oerjan> and i vaguely think i read corn originated in the tropics.
06:46:22 <oerjan> incas or mayas or thereby
06:47:05 <kallisti> yes, but now we have like miles and miles of yellow corn being mass produced in the midwest
06:47:07 <oerjan> but i guess georgia is nearly tropical, isn't that were you were from
06:47:13 <kallisti> yes. it's "sub-tropical"
06:47:48 <pikhq_> oerjan: Not to mention we've got a lot of climactic changes from geography.
06:47:54 <kallisti> which means it's really hot in the summer, noticeably cold in the winter, and always humid.
06:47:55 <oerjan> i also guess they've probably bred varieties that need less heat
06:48:08 <oerjan> kallisti: heh
06:48:49 <kallisti> current humidity: 100% (it just rained a few hours ago :P)
06:48:51 <pikhq_> oerjan: Such breeding was lost to the mists of time; domesticated corn had already pretty well spread through the Americas.
06:49:07 <oerjan> most of my time the one time i was staying in the US was in Seattle, which probably does not fit that description. Boston did when i was there, though.
06:49:18 <kallisti> the midwest is insane.
06:49:25 <kallisti> literally miles and miles of corn and soybeans.
06:49:29 <pikhq_> Yeah.
06:50:03 <pikhq_> You've got grazing melding into corn fields... Over the course of several hundred miles.
06:50:20 <oerjan> pikhq_: yeah i just recently read that the original english settlers learned to grow corn
06:50:43 <pikhq_> Yup.
06:51:01 <zzo38> Mostly I know all this stuff about right ascension and ecliptic plane and that stuff due to looking at oerjan's "Agora Nomic's Horoscope" and I didn't know what "Node" is or what all these lines and numbers means, or what "Placidus houses" is; and then I downloaded Astrolog (and Daedalus, the author's other program) and it had a bunch of other features that I didn't understand,
06:51:10 <kallisti> oerjan: we learn about that shit in middle school history. :P
06:51:45 <oerjan> kallisti: i figure it is part of the thanksgiving lore
06:51:55 <kallisti> oerjan: but we don't learn any important history in middle school.
06:51:59 <kallisti> oerjan: yes, it is.
06:52:27 <zzo38> and I wondered why the sunrise/sunset times in this program are a bit off (I think it is because of refraction), and I figured out how to use it to calculate the date of Chinese New Year, and so on.
06:52:52 <kallisti> as far as I can tell Thanksgiving is basically "let's eat a bunch of stuff that's native to North America"
06:52:59 <oerjan> zzo38: well you definitely should know more than me already after all your experiments
06:53:16 <Sgeo> zzo38, I wrote this code to try to show off your Barrier monad, sorry if it's horrible and ugly and evil
06:53:16 <Sgeo> http://hpaste.org/54738
06:54:24 <oerjan> zzo38: i think i saw someone mention a monad essentially identical to the Barrier monad under a different name on some haskell forum recently. i've forgotten what the name was, though.
06:54:38 <oerjan> so it's not completely unknown
06:55:22 <zzo38> Sgeo: At least it works; I don't know if it is horrible and ugly and evil but it is a simple demonstration (simpler than many things you could do with this library)
06:56:11 <kallisti> zzo38: Sgeo: oh yes that is very analagous to Python coroutines.
06:56:16 <kallisti> I'm assuming more could be done though
06:56:24 <oerjan> i come to think of it, shouldn't there be a way to split the Barrier monad into two transformers, one for each part?
06:56:40 <Sgeo> kallisti, can you put yield into a function in Python and call that function and have it work sensibly?
06:56:50 <kallisti> Sgeo: yes.
06:56:56 <kallisti> fsvo sensibly
06:56:57 <zzo38> oerjan: Yes, I thought of that someone else might have done similar things, anyways that happens a lot in mathematics (and programming in Haskell involves much about mathematics)
06:57:22 <oerjan> yeah
06:59:12 <kallisti> Sgeo: http://pastebin.com/j732vmzF
06:59:37 <kallisti> it's also possible to throw exceptions into a coroutine from other code.
06:59:43 <kallisti> g = generate(10)
06:59:50 <kallisti> g.throw(SomeException)
06:59:58 <Sgeo> Not quite what I meant
07:00:07 <zzo38> oerjan: And yes I suppose I also know more about the Astrolog and what all that stuff means since I have used most of its features (except the biorhythms and the interpretation mode used for Agora; I don't care for those), and so on... I configured the file to use different defaults, such as degrees instead of zodiac signs, Campanus instead of Placidus, and so on
07:00:09 <kallisti> what did you mean then?
07:00:13 <Sgeo> As in, can you encapsulate complex yield code and use that in place of the yield keyword?
07:00:21 <Sgeo> To make a generator
07:00:59 <kallisti> well, calling the function produces the generator, with some plumbing it's possible but it's not implicit.
07:01:00 -!- Darth_Cliche has quit (Quit: You are now graced with my absence.).
07:01:32 <zzo38> I do know how generator functions work in JavaScript. Any function containing "yield" is a generator function, and it returns a Generator object when called (not doing anything yet). When you call the next or send methods of the generator function, it runs until yield, at which point the next or send method returns the value being yield and send(x) will cause the yield to x
07:01:39 <kallisti> for my MUD I was actually working on a menu system that maintained a stack of coroutines. when the top coroutine is exhausted it would pop off and go back to the previous one.
07:01:47 <oerjan> sheesh my nose tip got all scaly from blowing my nose
07:02:00 <oerjan> despite putting on lots of lotion
07:02:01 <kallisti> zzo38: yes that's how it works in Python
07:02:08 <kallisti> with the addition of a throw method that allows you to signal exceptions.
07:02:10 <zzo38> You could make it yourself without using yield; that is possible too (you simply need to return an object with the correct methods)
07:02:21 <zzo38> kallisti: JavaScript generator functions have that too.
07:03:14 <oerjan> Sgeo: i assume to work properly inside functions, yield needs to encapsulate a continuation
07:03:37 <kallisti> also menu coroutines could do things like manipulate the menu stack or defer to previous menu (without actually being consumed)
07:04:01 <kallisti> but essentially if the courtine yielded a new generate then the system pushed the new generator onto the stack, so it was fairly natural to write nested menu code.
07:04:02 <oerjan> but maybe not a completely arbitrary one
07:04:15 <kallisti> *generator
07:05:12 <kallisti> it was pretty neat, but I never actually finished the MUD codebase
07:05:18 <kallisti> mainly because I was doing pointless stuff like that.
07:06:18 <kallisti> in any case, it would be possible to abstract that sort of nested coroutine system into one coroutine.
07:06:55 <kallisti> the controller coroutine is the outside interface, and delegates input/output to the coroutines in the stack that it maintains.
07:08:32 <kallisti> can barrier monads do anything like that?
07:08:39 <oerjan> 05:17:29: <kallisti> zzo38: yes it's 04:18 LST here
07:08:43 <kallisti> I mean, in there current state.
07:08:47 <kallisti> I don't doubt the possibility
07:09:19 <oerjan> apparently tunes also uses sidereal time.
07:09:22 <zzo38> I think the Haskell code using the library that I wrote, which is like the Python code example posted, would be like this: generate i = yield i >>= generate . maybe (succ i) id;
07:09:46 <zzo38> oerjan: Are you sure?
07:10:08 <oerjan> zzo38: it was a joke by the fact it was at almost the same minute, and tunes _does_ have a broken clock
07:10:26 <oerjan> oh wait
07:10:32 <oerjan> scratch that
07:10:38 <zzo38> kallisti: You probably can do something like that in Haskell somehow, using barrier monads, possibly using the BarrierT (the monad transformer for barrier monad)
07:10:53 <kallisti> zzo38: how does generate work?
07:10:54 <oerjan> i was pasting codu :P
07:11:23 <zzo38> kallisti: It is like the Python example code you posted: http://pastebin.com/j732vmzF
07:11:32 <kallisti> right but how does it actually work. :P
07:11:47 <Sgeo> Is crosstalk actually useful? >.>
07:11:58 <kallisti> zzo38: oh
07:12:00 <kallisti> I'm blind
07:12:02 <kallisti> zzo38: :P
07:12:04 <kallisti> disregard
07:12:06 <zzo38> Sgeo: I don't know but I think you suggested that to me isn' it?
07:12:13 <kallisti> zzo38: "help what is recursion"
07:12:23 <Sgeo> zzo38, I'm just wondering if what I suggested might be completely useless
07:13:01 <zzo38> Sgeo: Well, I don't know; maybe someone will find a use for it, either for computer programming or for mathematical use.
07:13:14 <kallisti> zzo38: I'm thinking an explicit stack is unecessary
07:13:26 <kallisti> but... maybe it is?
07:13:34 <oerjan> 05:56:49: <itidus21> Toponymy is the scientific study of place names (toponyms), their origins, meanings, use and typology. A toponymist is one who studies toponymy.
07:13:37 <oerjan> 05:57:57: <kallisti> itidus21: The apple is the pomaceous fruit of the apple tree, species Malus domestica in the rose family (Rosaceae). It is one of the most widely cultivated tree fruits, and the most widely known of the many members of genus Malus that are used by humans. Apple grow on small, deciduous trees that blossom in the spring and produce fruit in the fall.
07:14:06 <kallisti> zzo38: maybe it just be handled with simple recursion?
07:14:07 <oerjan> incidentally, the city name Almaty originally means "father of the apple"
07:14:10 <oerjan> iirc
07:14:31 <zzo38> kallisti: Probably it can be done without an explicit stack; recursion probably works OK
07:14:48 <kallisti> zzo38: maybe with >> even
07:15:58 <oerjan> oh wait it's apparently the older Alma-Ata form which means that
07:16:37 <oerjan> http://en.wikipedia.org/wiki/Almaty#Toponymy
07:17:04 <kallisti> f x = yieldSomeStuff >> (if someCondition then (>> f x) else id) barrier2
07:17:07 <zzo38> kallisti: Yes, you can use >> if you don't need the back values. Or whatever other values there are when using BarrierT with other monads too
07:18:33 <oerjan> (Almaty is still related to apples.)
07:18:36 <zzo38> Yes I suppose that is another way, too.
07:18:57 <Sgeo> (>> f x)?
07:19:10 <Sgeo> Hmm
07:19:11 <kallisti> Sgeo: yes, I'm so cool.
07:19:17 <kallisti> CONDITIONAL FUNCTIONS DUDE
07:19:19 <kallisti> way of the future.
07:19:22 <oerjan> <kallisti> hmmm, these peanuts are still kind of crunchy. <-- WHY WOULD SOMEONE WANT NON-CRUNCHY PEANUTS, IT MAKES NO SENSE
07:19:34 <kallisti> oerjan: because they're boiled and thus soft and salty and delicious.
07:19:48 <quintopia> mmmm boiled pnuts
07:19:54 <oerjan> BUT BUT THEY'RE NOT _CRUNCHY_ SO IT'S ALL MEANINGLESS
07:20:04 <coppro> quintopia: I misread that in the obvious fashion.
07:20:04 <kallisti> dude boiled > roasted
07:20:07 <oerjan> crazy murricans
07:20:08 <kallisti> any day.
07:20:21 <kallisti> roasted is all dry and gross
07:20:25 <quintopia> oerjan: you are wrong
07:20:28 <kallisti> go eat some actual nut
07:20:37 <kallisti> like cashew (hahaha get it because it's not an actual nut?)
07:20:43 <oerjan> eek i have unleashed the american hordes
07:20:57 <quintopia> no just the georgia hordes
07:21:00 <kallisti> oerjan: boiled peanuts aren't even really a completely American thing.
07:21:01 <oerjan> ah
07:21:18 <kallisti> I could probably tell a New Yorker to eat some boiled peanuts and they'd be like "wat"
07:21:26 <quintopia> but yeah dont knock it til youve tried it man
07:21:53 <kallisti> oerjan: it's just common in places where peanuts are grown. mainly in the south.
07:21:59 <quintopia> georgi is the peanut state. we get to decide what peanuts are best
07:22:20 <kallisti> we actually don't grow the kind of peanuts that are supposedly best for boiling
07:22:30 <kallisti> Valencia is supposed to be better than Runners. we grow Runners.
07:23:11 <kallisti> oerjan: eating boiled peanuts is kind of like... eating some kind of shellfish
07:23:20 <kallisti> but with peanut instead of fish meats.
07:23:21 <quintopia> i dont actually know anything about peanuts
07:23:22 <quintopia> so
07:23:25 <quintopia> you lost me there
07:23:31 <pikhq_> oerjan: Roasted is by far the more common thing in America.
07:23:33 <oerjan> oh well it's probably all that crazy mad scientist GWC's fault
07:23:41 <quintopia> yeah man
07:23:45 <quintopia> gwc is the shit
07:24:06 <kallisti> mad peanut scientists...
07:24:12 <pikhq_> Peanut butter, fuck yeah.
07:24:18 <oerjan> he'd have invented more but he disappeared in his peanut oil powered time machine
07:24:30 <kallisti> oerjan: peanut oil is awesome btw
07:24:33 <quintopia> but the best mad food scientist is clearly robert c baker
07:25:32 <quintopia> kallisti: lets ship oerjan some boiled peanuts in a can. i know its not as good as fresh, but maybe it would be enough to sway him?
07:25:41 <kallisti> quintopia: it's a shame that oerjan probably doesn't know the joy of deep-fried chicken in peanut oil.
07:25:44 <oerjan> quintopia: sounds like a fowl guy
07:25:45 <kallisti> quintopia: per. haps
07:26:13 <quintopia> ill buy the can if youll cover shipping
07:26:20 <kallisti> asshole
07:26:36 <pikhq_> Incidentally, oerjan, "deep-fried *" is as American as you can get.
07:27:33 <oerjan> pikhq_: also scottish, i hear
07:27:44 <kallisti> they borrowed it from us. :P
07:27:44 <pikhq_> Yeah.
07:28:07 <kallisti> quintopia: you've had chik-fil-a yes?
07:28:58 <kallisti> apparently they're like... common in many US states now.
07:29:34 <pikhq_> Some people have issues with funding anti-gay organisations, though.
07:29:57 <kallisti> pikhq_: I knew they were Christian based but not anti-gay
07:30:00 <oerjan> sometimes you have to think how many things we take for granted were actually invented by someone
07:30:12 <oerjan> (nearly all of them)
07:30:16 <kallisti> oerjan: woah dude
07:30:20 <kallisti> I had never thought of it that way.
07:30:28 * kallisti mind blown.
07:30:51 <pikhq_> kallisti: They're *American* Christian based. The only Christians in America that are in any way loud about it hate gay people so much. (and, of course, make regular trips to the nearest gloryhole)
07:31:29 <kallisti> looooooool
07:31:40 * kallisti consults the yellow pages for the nearest gloryhole.
07:32:01 * kallisti googled for: gloryholes near Jasper, GA
07:32:01 <oerjan> sic transit gloria mundi
07:33:04 <kallisti> hmmm "glory hole rock shop" in Jasper, GA
07:33:07 <kallisti> not quite what I wanted.
07:33:16 <kallisti> also what is a "rock shop"
07:33:37 <quintopia> kallisti: yes i have had chik-fil-a
07:33:42 <quintopia> i dont anymore tho
07:34:02 <quintopia> because of what pikhq said
07:37:17 <quintopia> also i hate their marketing dept forever
07:37:41 <kallisti> heh
07:37:52 <quintopia> bbef iz sketchy eh?
07:38:22 <quintopia> fuck no. mechanically separated chicken is
07:47:26 <pikhq_> "Sketchy" understates.
07:50:52 <Sgeo> kallisti, UPDOOT
08:00:25 <kallisti> anyone else like starcraft2?
08:02:43 -!- zzo38 has quit (Remote host closed the connection).
08:31:05 -!- GreaseMonkey has quit (Quit: The Other Game).
08:34:10 <oerjan> kallisti: just post the question to reddit.com/r/doesanybodyelse >:)
08:54:48 <kallisti> @hoogle forkIO
08:54:49 <lambdabot> Control.Concurrent forkIO :: IO () -> IO ThreadId
08:54:49 <lambdabot> GHC.Conc.Sync forkIO :: IO () -> IO ThreadId
08:54:49 <lambdabot> GHC.Conc forkIO :: IO () -> IO ThreadId
08:58:04 <kallisti> > forever . putStrLn $ "Hello, World!"
08:58:05 <lambdabot> Ambiguous type variable `b' in the constraint:
08:58:06 <lambdabot> `Data.Typeable.Typeable b...
08:58:22 <kallisti> what's up with this?
09:00:11 <oerjan> :t forever . putStrLn
09:00:14 <lambdabot> forall b. String -> IO b
09:00:37 <oerjan> ah right, it's because of the ambiguous result type
09:00:46 <kallisti> oerjan: works fine in ghci though.
09:00:50 <oerjan> > forever . putStrLn $ "Hello, World!" :: IO ()
09:00:52 <lambdabot> <IO ()>
09:01:05 <kallisti> does ghci assume IO () or something?
09:01:13 <oerjan> kallisti: it's because ghci doesn't do a typeclass check on b
09:01:15 <oerjan> i think
09:01:36 <oerjan> because it doesn't have a Show instance for IO
09:01:36 <kallisti> why does lambdabot?
09:01:39 <kallisti> oh.
09:01:49 <kallisti> aaaaaah
09:02:00 <oerjan> while lambdabot uses Typeable b => Show (IO b) in order to print that <IO ()> thing
09:02:29 <kallisti> right
09:03:03 <kallisti> oerjan: is there any standard type that doesn't derive Typeable
09:03:07 <oerjan> ghci just runs the action, and possibly prints the result with the right option set
09:03:11 <kallisti> specifically one that lambdabot exposes?
09:03:22 <oerjan> hm
09:04:00 <kallisti> pretty much any type can derive typeable
09:04:05 <oerjan> :t typeRef
09:04:06 <lambdabot> Not in scope: `typeRef'
09:04:07 <kallisti> so it would probably be hard to find.
09:04:28 <oerjan> kallisti: not if it has type arguments of kind not *
09:04:42 <oerjan> but you can still write a custom one then
09:04:49 <oerjan> :t typeRep
09:04:49 <kallisti> @hoogle a -> Int#
09:04:49 <lambdabot> Prelude id :: a -> a
09:04:50 <lambdabot> Data.Function id :: a -> a
09:04:50 <lambdabot> GHC.Exts breakpoint :: a -> a
09:04:50 <lambdabot> Not in scope: `typeRep'
09:04:57 <oerjan> argh
09:05:02 <oerjan> @src Typeable
09:05:02 <lambdabot> Source not found. My brain just exploded
09:05:05 <kallisti> @hoogle Int -> Int#
09:05:06 <lambdabot> Prelude (!!) :: [a] -> Int -> a
09:05:06 <lambdabot> Data.List (!!) :: [a] -> Int -> a
09:05:06 <lambdabot> Data.Sequence index :: Seq a -> Int -> a
09:05:20 <oerjan> @hoogle Typeable a => a -> b
09:05:21 <lambdabot> Control.OldException throwDyn :: Typeable exception => exception -> b
09:05:22 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
09:05:22 <lambdabot> Data.Dynamic toDyn :: Typeable a => a -> Dynamic
09:06:12 <oerjan> > undefined :: IO (StateT IO Int)
09:06:13 <lambdabot> `Control.Monad.Trans.State.Lazy.StateT GHC.Types.IO GHC.Types.Int' is not a...
09:06:27 <oerjan> oops
09:06:32 <oerjan> > undefined :: IO (StateT Int IO Int)
09:06:32 <lambdabot> No instance for (Data.Typeable.Typeable1
09:06:33 <lambdabot> (Control.Monad...
09:06:36 <oerjan> ah
09:06:40 <oerjan> kallisti: well that's one
09:06:52 <kallisti> um... StateT?
09:07:02 <oerjan> :k StateT
09:07:02 <lambdabot> * -> (* -> *) -> * -> *
09:07:18 <kallisti> maybe it just doesn't have an instance?
09:07:25 <oerjan> as you see it has a * -> * argument, so cannot be derived, and nobody presumably bothered to make one
09:08:02 <oerjan> well let me check
09:08:37 <kallisti> > [1..10]
09:08:38 <lambdabot> [1,2,3,4,5,6,7,8,9,10]
09:08:40 <oerjan> yeah looks like it
09:09:33 <oerjan> the new polymorphic kind extension will probably make it possible to derive any Typeable eventually
09:09:44 <kallisti> :t for
09:09:45 <lambdabot> Not in scope: `for'
09:09:51 <oerjan> heh
09:09:58 <kallisti> seems strange to call it forM
09:10:00 <kallisti> when there's no for
09:10:03 <oerjan> i've been thinking sometimes that for seems to be missing :P
09:10:22 <oerjan> it would just be flip map, presumably
09:10:27 <kallisti> @let for = flip map
09:10:28 <lambdabot> Defined.
09:10:29 <kallisti> oerjan: indeed
09:10:47 <kallisti> > for [1..10] (\x -> show x)
09:10:49 <lambdabot> ["1","2","3","4","5","6","7","8","9","10"]
09:10:52 <kallisti> I am teh leet Python programmer
09:12:52 <kallisti> :t newIORef
09:12:53 <lambdabot> Not in scope: `newIORef'
09:12:58 <kallisti> :t writeIORef
09:12:59 <lambdabot> Not in scope: `writeIORef'
09:13:22 <kallisti> lambdabot: "no imperative programming allowed"
09:13:50 <oerjan> well you can use ST, i think
09:13:56 <oerjan> :t newSTRef
09:13:57 <lambdabot> forall a s. a -> ST s (STRef s a)
09:14:19 <kallisti> ah good
09:18:27 <kallisti> :t runST
09:18:27 <lambdabot> forall a. (forall s. ST s a) -> a
09:22:39 <kallisti> > let var = newSTRef; get = readSTRef; (*=) r n = modifySTRef r (*n); factorial n = runST $ do { x <- var 1; forM [1..n] (\i -> x *= i ); return (get x) } in factorial 5
09:22:39 <lambdabot> Inferred type is less polymorphic than expected
09:22:40 <lambdabot> Quantified type variable...
09:22:46 <kallisti> huh?
09:24:44 <kallisti> oerjan: help
09:27:51 <fizzie> > let var = newSTRef; get = readSTRef; (*=) r n = modifySTRef r (*n); factorial n = runST $ do { x <- var 1; forM [1..n] (\i -> x *= i ); get x } in factorial 5
09:27:52 <lambdabot> 120
09:28:59 <kallisti> oh...
09:29:02 <kallisti> :t readSTRef
09:29:03 <lambdabot> forall s a. STRef s a -> ST s a
09:29:04 <kallisti> right. :P
09:30:01 <kallisti> > let var = newSTRef; return = readSTRef; (*=) r n = modifySTRef r (*n); factorial n = runST $ do { x <- var 1; forM [1..n] (\i -> x *= i ); returm x } in factorial 5
09:30:01 <lambdabot> Not in scope: `returm'
09:30:06 <kallisti> > let var = newSTRef; return = readSTRef; (*=) r n = modifySTRef r (*n); factorial n = runST $ do { x <- var 1; forM [1..n] (\i -> x *= i ); return x } in factorial 5
09:30:07 <lambdabot> 120
09:30:20 <kallisti> probably the most elegant way to write factorial.
09:31:05 <kallisti> as a Python coder writing Haskell, I find that forM [1..n] (x *=) is a tad unreadable
09:31:11 <kallisti> x *= what exactly?
09:31:14 <kallisti> makes no sense.
09:31:48 <fizzie> As a corollary to "most elegant way to write factorial",
09:31:50 <fizzie> > let var = newSTRef; return = readSTRef; bestIdEver x = runST $ do { y <- var x; return y } in bestIdEver 42
09:31:51 <lambdabot> 42
09:33:28 <kallisti> yes quite nice.
09:34:04 <kallisti> of course a real Haskell programmer never leaves ST
09:34:16 <fizzie> If only (x *= ◌) were the same thing as (x *=), then it'd make sense; x *= the hole.
09:34:22 <kallisti> so really we should omit the runST and simply pass in STRefs
09:35:37 <kallisti> well, actually just omit the runST
09:35:50 <kallisti> passing STRefs would be if you want pass-by-reference
09:41:44 <kallisti> oerjan: fizzie: would be nice to have a Ref typeclass with the var function
09:41:50 <kallisti> instance Ref IO IORef where var = newIORef
09:42:18 <kallisti> though I think I like the name ref better.
09:42:39 <Sgeo> Why are some things called Refs and others called Vars?
09:43:02 <kallisti> variable implies a syntactical feature
09:43:27 <kallisti> x = 2
09:43:46 <kallisti> x is the variable. YOu access via the syntax of the programming language, simply by writing its name.
09:44:10 <fizzie> An MVar is not any more syntactic than an IORef though.
09:44:15 <Sgeo> That's great, except it doesn't explain why Haskell has MVars and TVars
09:44:19 <kallisti> oh right
09:44:30 <kallisti> dunno. different people write different code? :P
09:44:37 <kallisti> unless they're in the report
09:44:38 <fizzie> "MRef" sounds too much like a dog barking?
09:45:21 <kallisti> maybe if you're a norseman
09:45:44 <fizzie> Well, I mean, "arf!"
09:46:12 <kallisti> "mref mref mref!"
09:48:09 <kallisti> I wonder if anyone actually uses ST
09:49:26 <fizzie> It's funny how the descriptions of IORef and STRef both use the word "variable" ("A mutable variable in the IO monad", "a mutable variable in state thread") while neither of the descriptions for MVar and TVar do ("mutable location", "Shared memory locations").
09:49:53 <kallisti> it would be better if MVar and TVar said "reference"
09:55:51 -!- oerjan has quit (Quit: leaving).
10:32:00 <kallisti> > deriv (\x -> x*sin(X^2 + 1)) 5
10:32:00 <lambdabot> Not in scope: data constructor `X'
10:32:05 <kallisti> > deriv (\x -> x*sin(x^2 + 1)) 5
10:32:05 <lambdabot> 33.10852456691162
10:32:23 <kallisti> > deriv (\x -> x*sin(x^2 + 1)) (x :: Expr)
10:32:23 <lambdabot> 1 * sin (x * x + 1) + x * ((1 * x + x * 1) * cos (x * x + 1))
10:33:10 <kallisti> if only it reduced properly...
10:33:41 <kallisti> > x + x == 2*x
10:33:42 <lambdabot> False
10:33:46 <kallisti> :(
10:40:42 <Sgeo> > x == x
10:40:43 <lambdabot> True
10:40:46 <Sgeo> :/
10:40:50 <Sgeo> > 1 * x == x
10:40:50 <lambdabot> False
10:41:11 <Sgeo> > 0 * x
10:41:12 <lambdabot> 0 * x
10:41:15 <Sgeo> > x * 0
10:41:16 <lambdabot> x * 0
10:41:49 <Sgeo> Maybe == should just be undefined
10:41:52 <Sgeo> > x > y
10:41:53 <lambdabot> False
10:41:59 <Sgeo> > x < y
10:41:59 <lambdabot> True
10:42:09 <Sgeo> Ords of genius.
10:43:36 <kallisti> Sgeo: well it kind of can't make sense unless Expr is demonstrating a particular kind of Num instance.
10:44:03 <kallisti> if all Num instances were fields, you could make a number of reductions that make two Exprs with different textual representations equivalent.
10:44:39 <Sgeo> Huh, didn't think about that
10:48:50 <kallisti> but unless you do some pretty complicated symbolic reasoning you're not really going to get an Eq instance that comes anywhere close to basically determine if two arbitrary expressions are equal.
10:49:10 <kallisti> under the assumption that the Num instance that Expr is representing behaves like real numbers.
10:51:23 -!- monqy has quit (Quit: hello).
10:59:44 <kallisti> :t extract
10:59:45 <lambdabot> forall source. (Extract source) => (Int, Int) -> source -> source
10:59:52 -!- ais523 has joined.
10:59:53 <kallisti> ..no
10:59:58 <kallisti> :t (=>=)
10:59:59 <lambdabot> Not in scope: `=>='
11:05:28 -!- ais523 has quit (Ping timeout: 258 seconds).
11:06:04 -!- ais523 has joined.
11:06:05 -!- ais523 has quit (Changing host).
11:06:05 -!- ais523 has joined.
11:08:19 <fizzie> > replicateM 3 "<>="
11:08:20 <lambdabot> ["<<<","<<>","<<=","<><","<>>","<>=","<=<","<=>","<==","><<","><>","><=",">...
11:08:24 <fizzie> They should have all of those.
11:09:05 <fizzie> ["<<<","<<>","<<=","<><","<>>","<>=","<=<","<=>","<==","><<","><>","><=",">><",">>>",">>=",">=<",">=>",">==","=<<","=<>","=<=","=><","=>>","=>=","==<","==>","==="] -- that's not such a long list. And I'm sure they can figure out some meanings for everyone.
11:09:21 <fizzie> For example <>< could make some fish swim across the screen.
11:13:11 <kallisti> <=> is compare ala Perl.
11:14:35 <fizzie> ><> makes the fishes go the other way.
11:15:27 <kallisti> :t deriv
11:15:28 <lambdabot> forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b
11:15:34 <kallisti> I'm confused as to where this function comes from
11:15:38 <kallisti> I can't find it anywhere on the interwebs
11:18:05 <fizzie> http://hackage.haskell.org/packages/archive/numbers/2009.8.9/doc/html/Data-Number-Dif.html ?
11:22:52 <Deewiant> ( http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=%28Dif%20a%20-%3E%20Dif%20b%29%20-%3E%20a%20-%3E%20b )
11:29:28 <ais523> <<= and =<< are from Feather
11:29:48 <ais523> retroactive and proactive assignment, respectively
11:30:03 <ais523> (proactive assignment does nothing right now, but controls when in time a retroactive assignment happens)
11:31:23 <kallisti> > read "1" :: Dif Int
11:31:24 <lambdabot> 1~~
11:32:00 <kallisti> > df $ read "1" :: Dif Int
11:32:00 <lambdabot> 0~~
11:32:06 <kallisti> er
11:32:15 <kallisti> > df (read "1" :: Dif Int)
11:32:16 <lambdabot> 0~~
11:32:18 <kallisti> okay.
11:34:04 <fizzie> >, ≫, ⋙; greater-than, much greater-than, very much greater-than; sadly I think that's where they gave up. (Though there is ⫸, the triple nested greater-than.)
11:35:17 <fizzie> Certainly there would have been more intensifiers to go with. Really very much greater-than, honestly really very much greater-than, I'm not even kidding how much greater-than, etc.
11:35:22 <kallisti> > iterate df (sin (dVar pi :: Dif Expr))
11:35:23 <lambdabot> [sin pi~~,1 * cos pi~~,1 * (1 * negate (sin pi))~~,1 * (1 * (1 * negate (co...
11:35:40 <kallisti> > map val $ iterate df (sin (dVar pi :: Dif Expr))
11:35:41 <lambdabot> [sin pi,1 * cos pi,1 * (1 * negate (sin pi)),1 * (1 * (1 * negate (cos pi))...
11:36:12 <kallisti> the value, first derivative, second derivative, etc
11:37:15 -!- Phantom_Hoover has joined.
11:39:36 <kallisti> > map val $ iterate df (sin (dVar x))
11:39:37 <lambdabot> [sin x,1 * cos x,1 * (1 * negate (sin x)),1 * (1 * (1 * negate (cos x))),1 ...
11:43:04 <kallisti> > let y = dVar x in map val $ iterate df (x^3 + x^2 + x + 5)
11:43:05 <lambdabot> Couldn't match expected type `Data.Number.Dif.Dif a'
11:43:05 <lambdabot> against inferr...
11:43:18 <fizzie> It would be better if it printed [sin x,cos x,negate (sin x),negate (cos x),sin x,cos x,even you,should be,able to,figure it,out by,now,...]
11:43:25 <kallisti> > let loly = dVar x in map val $ iterate df (x^3 + x^2 + x + 5)
11:43:26 <lambdabot> Couldn't match expected type `Data.Number.Dif.Dif a'
11:43:27 <lambdabot> against inferr...
11:43:35 <kallisti> fizzie: asshole :P
11:43:43 <kallisti> but yeah I agree.
11:43:48 <kallisti> I HAVE TALKED ABOUT THIS PREVIOUSLY
11:44:03 <ais523> > (sin x * sin x) + (cos x * cos x)
11:44:04 <lambdabot> sin x * sin x + cos x * cos x
11:44:08 <fizzie> About making the bot more of an asshole? Yes, I think it would fit in better here.
11:44:30 <ais523> > deriv (\a -> (sin a * sin a) + (cos a * cos a)) x
11:44:31 <lambdabot> 1 * cos x * sin x + sin x * (1 * cos x) + (1 * negate (sin x) * cos x + cos...
11:44:58 <kallisti> > let y = dVar x in map val $ iterate df (y^3 + y^2 + y + 5)
11:44:59 <lambdabot> [x * x * x + x * x + x + 5,(1 * x + x * 1) * x + x * x * 1 + (1 * x + x * 1...
11:45:06 <kallisti> gross/
11:45:17 <kallisti> > let y = dVar x in map val $ iterate df (y^2 + y + 5)
11:45:18 <lambdabot> [x * x + x + 5,1 * x + x * 1 + 1,1 * 1 + 1 * 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
11:49:00 <fizzie> All those are so begging for a Mathematica FullSimplify[].
11:49:09 <fizzie> Or "FoolSimplify", as we tend to call it.
11:49:12 <fizzie> Well, tended.
11:50:03 <kallisti> :t let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) = dVar x in nDerivs
11:50:04 <lambdabot> parse error on input `='
11:50:11 <kallisti> :t let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs
11:50:12 <lambdabot> forall a a1. (Num a, Num a1) => (Dif a -> Dif a1) -> a -> Int
11:50:35 <kallisti> :t let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2)
11:50:36 <lambdabot> forall a. (Num a) => a -> Int
11:50:42 <kallisti> > let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2)
11:50:45 <lambdabot> Overlapping instances for GHC.Show.Show (a -> GHC.Types.Int)
11:50:45 <lambdabot> arising fro...
11:50:50 <kallisti> oh...
11:51:03 <kallisti> > let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2) 5
11:51:04 <lambdabot> 4
11:51:10 <kallisti> > let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2) 0
11:51:11 <lambdabot> 1
11:51:19 <kallisti> so it might not be accurate when you pass 0 :P
11:51:39 <kallisti> > let nDerivs f x = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2) 1
11:51:40 <lambdabot> 4
11:52:17 <kallisti> > (0 :: Expr) == 0
11:52:17 <lambdabot> True
11:52:49 <kallisti> > let nDerivs f = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x)) in nDerivs (\x -> x^2)
11:52:51 <lambdabot> 4
11:52:54 <kallisti> there we go.
11:53:00 <kallisti> @let nDerivs f = succ . length . takeWhile (/= 0) . iterate df $ (f (dVar x))
11:53:01 <lambdabot> Defined.
11:53:08 <kallisti> > nDerivs (^3)
11:53:09 <lambdabot> 5
11:53:13 <kallisti> > nDerivs sin
11:53:17 <lambdabot> mueval-core: Time limit exceeded
11:54:35 <kallisti> > nDerivs (const 1)
11:54:36 <lambdabot> 2
11:54:42 <kallisti> erm
11:55:13 <kallisti> > iterate df (const 1 (dVar x))
11:55:14 <lambdabot> [1~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~...
11:55:25 <kallisti> oh, okay.
11:55:39 <kallisti> right, I want it to count the first 0.
11:58:22 <kallisti> er, no...
11:58:25 <kallisti> not right.
11:58:30 <kallisti> @undefinee
11:58:31 <kallisti> @undefine
11:58:35 <kallisti> @unlet
11:58:36 <lambdabot> Defined.
11:58:37 <kallisti> @halp
11:58:37 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
11:58:49 <kallisti> @help undefine
11:58:50 <lambdabot> undefine. Reset evaluator local bindings
11:59:15 <kallisti> @let nDerivs f = length . takeWhile (/= 0) . iterate df $ (f (dVar x))
11:59:16 <lambdabot> Defined.
11:59:23 <kallisti> > nDerivs (const 2)
11:59:24 <lambdabot> 1
11:59:26 <kallisti> much better.
11:59:34 <kallisti> > nDerivs (^2)
11:59:36 <lambdabot> 3
12:15:00 <kallisti> @let (++) = mappend
12:15:01 <lambdabot> <local>:3:0:
12:15:01 <lambdabot> Multiple declarations of `L.++'
12:15:01 <lambdabot> Declared at: .L.hs:97...
12:15:06 <kallisti> > (++)
12:15:06 <lambdabot> Overlapping instances for GHC.Show.Show (m -> m -> m)
12:15:06 <lambdabot> arising from a use...
12:15:11 <kallisti> :t (++)
12:15:12 <lambdabot> forall m. (Monoid m) => m -> m -> m
12:15:26 <kallisti> :t nDerivs
12:15:27 <lambdabot> forall a. (Num a) => (Dif Expr -> Dif a) -> Int
12:17:39 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
12:24:12 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
12:40:12 -!- Phantom_Hoover has joined.
13:02:08 -!- zzo38 has joined.
13:06:44 -!- boily has joined.
13:12:12 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
13:13:42 -!- Patashu has joined.
13:13:52 <Patashu> I'm staying up to solve this http://www.canyoucrackit.co.uk/15b436de1f9107f3778aad525e5d0b20.js my life is interesting
13:14:35 -!- Taneb has joined.
13:23:02 -!- Phantom_Hoover has joined.
13:37:14 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
13:37:24 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
13:44:51 <Taneb> Hello
13:48:15 <boily> hi!
13:48:27 <Taneb> How are you, boily?
13:50:38 -!- Phantom_Hoover has joined.
13:51:28 <Taneb> Hello, Phantom_Hoover
13:58:18 -!- ais523 has quit (Ping timeout: 244 seconds).
13:58:49 -!- ais523 has joined.
14:08:31 <zzo38> Once, I was in a hotel, they required keycards for the elevator but I didn't have any so I went to the top floor by stairs and knocked on the door (it is my hotel room, but some other people too, and they had the keycard). And if any hotel has elevator that requires a keycard and then you only go to your floor, then it makes it less secure than one that does not require a keycard
14:12:30 <Taneb> Once, I was in a hotel, booked under the name of "random"
14:16:12 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
14:24:16 <fizzie> Quite often the doors in the stairwell that lead to the actual floors also require a keycard.
14:26:13 <fizzie> Once I worked at a place where you would get trapped in the stairwell if you forgot your card; the door from the offices to the stairs could be opened with a button from the inside, but the exit door at the bottom required a card always. I have a vague feeling that's against all kinds of emergency exit rules and whatnot.
14:26:54 <fizzie> Normally those things are always constructed so that if you forget the key, you can at least exit the building.
14:27:08 <fizzie> (And then freeze to death outside, but that's not relevant.)
14:27:46 <zzo38> In the place I was in, a keycard was not required to open the doors in the stairwell.
14:29:03 -!- Phantom_Hoover has joined.
14:47:33 <Phantom_Hoover> Oh dear, I am become join spam.
14:48:19 <Gregor> lambdabot: Any spammy, useless messages for me?
14:49:22 <Phantom_Hoover> how is it december help
14:49:29 <Phantom_Hoover> 2011, we hardly knew ye.
14:49:53 <Taneb> Dungeons of Dredmor just crashed
14:51:18 <fizzie> Does it print out "Suddenly, the dungeon collapses" too?
15:03:30 <zzo38> Why can I not access this? http://www.freesoftwaremagazine.com/articles/encouraging_next_generation_hackers_part_1_raspberry_pi_25_computer
15:12:08 <Vorpal> Taneb: linux?
15:12:14 <Vorpal> Taneb: and segfault?
15:12:17 <Taneb> Vorpal, yes
15:12:26 <Taneb> And maybe, what do they look like?
15:12:29 <Vorpal> Taneb: if so there is a patch to the data files that might help (helped for me). Let me find the link
15:13:36 <Vorpal> Taneb: http://community.gaslampgames.com/threads/statue-of-inconsequentia-crash.1318/ (for me it happened when changing dungeon level)
15:13:59 <Vorpal> there is a patch a bit down
15:14:06 <Vorpal> (post #4)
15:14:38 <Vorpal> <fizzie> Does it print out "Suddenly, the dungeon collapses" too? <-- for me it just plain segfaulted
15:23:39 <Phantom_Hoover> Suddenly, the dungeon segfaults!
15:30:24 <kallisti> wow I apparently didn't have the network package installed.
15:30:28 <kallisti> shows you how much Haskell I've been programming..
15:31:08 <kallisti> hmmm, I still get these really weird linker errors from importing Network.Socket
15:31:12 <kallisti> dunno what's up with that.
15:36:24 <kallisti> does anyone else find Network.Socket a little cumbersome?
15:37:55 <Vorpal> Taneb: did it work?
15:38:26 <Taneb> Can't find the install directory..
15:39:28 -!- copumpkin has quit (Quit: Leaving...).
15:39:37 -!- copumpkin has joined.
15:45:14 <ais523> "Shopping for a Dyson DC25 Ball All-Floors Upright Vacuum Cleaner might not appear like a big deal, however it does require a bit of planning."
15:45:54 <ais523> aha: "Probably you aspire to realize what is certainly my favourite [http://google.com internet search engine]."
15:46:00 <ais523> the spambots spamming Google are back again
15:46:33 <ais523> (as in, advertising Google)
16:03:47 -!- Taneb has quit (Quit: Leaving).
16:12:25 -!- elliott has joined.
16:13:04 <elliott> 22:22:05: <ais523> <mikehart> Just noticed my email in my account settings was 0.034064395384923 I asume that was the issue.
16:13:06 <elliott> ais523: context?
16:13:21 <ais523> elliott: the phpBB gone mad
16:13:28 <elliott> thought so
16:13:35 * elliott tries to figure out how that could possibly work
16:13:43 <ais523> where it changed all the posts into md5 hashes, it apparently changed email addresses into (double-precision, by the look of it) floating point numbers
16:14:05 <ais523> (it's unclear what they're md5 hashes /of/, btw; kind-of hard to reverse them)
16:14:08 <elliott> :D
16:14:13 <elliott> did you try googling them?
16:14:19 <ais523> I picked one at random, no results
16:14:22 <ais523> I didn't google any others
16:15:32 <coppro> hrm
16:15:38 <coppro> why did I get an email sent to all employees
16:15:50 -!- derrik has joined.
16:16:10 <elliott> perhaps you are an employee
16:16:47 -!- Slereah has joined.
16:18:17 -!- Slereah_ has quit (Ping timeout: 240 seconds).
16:18:27 <ais523> sending an email to all employees would be impressive
16:18:38 <ais523> almost like sending an email to every internet user, just slightly less global
16:18:38 <coppro> elliott: No, I pay them.
16:18:56 <ais523> presumably sending an email to absolutely everyone would be the easiest way to accomplish an "email-all-employees" requirement
16:19:00 <coppro> (them being the university)
16:19:30 <elliott> ais523: that would be fun to try
16:22:29 <coppro> ais523: You'd also need to get them all email addresses
16:22:47 <ais523> coppro: that's trivial
16:22:50 <elliott> MWAHAHAHA, IN HWN AGAIN
16:22:54 <ais523> sending them their logins would be the hard part
16:23:27 <coppro> ais523: Why not just make an email address for everyone?
16:23:52 <kallisti> > fix . (++) $ "hi"
16:23:53 <lambdabot> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi...
16:23:54 <ais523> coppro: that's what I was implying
16:24:05 <elliott> hmm, github's language detection is rather imperfect
16:24:10 <ais523> the hard part being, giving everyone access to their account
16:24:21 <elliott> ais523: just let everyone access every account
16:24:29 <Vorpal> #ifdef USE_DIRECT3D
16:24:29 <Vorpal> glClear(GL_COLOR_BUFFER_BIT);
16:24:29 <Vorpal> #endif
16:24:33 <Vorpal> this seems so very wrong
16:24:36 <elliott> Vorpal: :D
16:24:36 <ais523> elliott: then how is it an account specific to the person?
16:24:46 <ais523> Vorpal: awesome, please give more context
16:24:48 <elliott> ais523: nobody would stop calling <webmail service> personal email just because there's a backdoor!
16:24:56 <Vorpal> ais523: can't. Darwinia source code.
16:24:57 <elliott> ais523: they might claim it's a /bad/ personal email service, though
16:25:03 <ais523> Vorpal: err, not in the code itself
16:25:13 <ais523> but as to why that's written
16:25:29 <ais523> (I'm guessing that there's some sort of OpenGL/Direct3D wrapper that can call either, and is based on OpenGL function names)
16:25:38 <Vorpal> elliott: anyway I gave up getting darwinia to compile... Linux implementation files are way out of date with shared headers (like when there is foo_win.cpp and foo_sdl.cpp)
16:25:47 <Vorpal> <ais523> but as to why that's written <-- don't know yet
16:26:02 <elliott> Vorpal: I bet AII compiles perfectly on Linux.
16:26:14 <Vorpal> elliott: give me the source right now then
16:26:27 <elliott> Vorpal: Nobody can do that; light speed, dude.
16:26:38 <Vorpal> elliott: well within 10 minutes
16:26:41 <elliott> You can't even access Darwinia's code instantly.
16:26:44 <kallisti> > let fixify f = fix . f; repeat = fixify (:); cycle = fixify (++); forever = fixify (>>) in fixify
16:26:45 <lambdabot> Overlapping instances for GHC.Show.Show (f (a -> a) -> f a)
16:26:45 <lambdabot> arising from...
16:26:49 <kallisti> :t let fixify f = fix . f; repeat = fixify (:); cycle = fixify (++); forever = fixify (>>) in fixify
16:26:50 <lambdabot> forall (f :: * -> *) a. (Functor f) => f (a -> a) -> f a
16:26:57 <elliott> Vorpal: What, so if it's bigger than you can download in 10 minutes it doesn't count?
16:27:23 <Vorpal> elliott: no to the start of downloading. I expect the rest within at most a few days
16:27:30 <Vorpal> anything more is just silly
16:27:43 <elliott> Vorpal: I refuse to let my reputation depend on the reliability of your internet connection
16:27:49 <kallisti> @hoogle (Functor f) =
16:27:49 <lambdabot> Parse error:
16:27:49 <lambdabot> (Functor f) =
16:27:49 <lambdabot> ^
16:27:55 <kallisti> @hoogle (Functor f) => f (a -> a)
16:27:55 <lambdabot> Data.Generics.Schemes everywhereBut :: GenericQ Bool -> GenericT -> GenericT
16:27:55 <lambdabot> Data.Generics.Aliases unGQ :: GenericQ' r -> GenericQ r
16:27:55 <lambdabot> Data.Generics.Twins gzipWithT :: GenericQ (GenericT) -> GenericQ (GenericT)
16:28:00 <elliott> kallisti: impossible
16:28:09 <kallisti> wat
16:28:14 <elliott> Functor provides no way to get an f a for any a
16:28:24 <elliott> without already having an f b and a (b -> a), ofc
16:28:28 <elliott> :t pure id
16:28:29 <lambdabot> forall a (f :: * -> *). (Applicative f) => f (a -> a)
16:29:57 <kallisti> elliott: well obviously it's not unpossible because I just used 3 functions that satisfy that type. I assume you mean it's impossible to generally do that.
16:30:28 <Vorpal> ais523: there seem to be no such wrappers
16:30:33 <elliott> there is no value foo :: (Functor f) => f (a -> a)
16:30:35 <kallisti> I was hoogling for functions I could fixify as above.
16:30:38 <Vorpal> ais523: it just makes no sense
16:30:42 <ais523> Vorpal: they'd probably be in a third-party library
16:30:44 <elliott> your type was (Functor f) => f (a -> a) -> f a
16:30:50 <Vorpal> ais523: well I looked in lib/
16:30:51 <kallisti> correct
16:30:56 <ais523> it could be a typo for ifndef, I guess
16:31:01 <elliott> kallisti: anyway, that's just because lambdabot (.) = fmap
16:31:10 <kallisti> correct.
16:31:17 <ais523> but I doubt it, or the d3d version wouldn't even compile with the typo in, so it'd have been caught easily
16:31:32 <elliott> Vorpal: um, maybe the Direct3D version just uses OpenGL for some things?
16:31:53 <kallisti> :t let fixify f = fix Prelude.. f; repeat = fixify (:); cycle = fixify (++); forever = fixify (>>) in fixify
16:31:54 <lambdabot> forall a a1. (a -> a1 -> a1) -> a -> a1
16:31:58 <elliott> ais523: arguable, considering the code doesn't compile on linux in the first place
16:32:01 <Vorpal> elliott: maaybe. But I'm pretty sure that mixing them is in general a bad idea and unlikely to work
16:32:16 <ais523> elliott: it'd have happened on every platform, unless that bit's Linux-specific too
16:32:24 <Vorpal> it was shared
16:32:24 <kallisti> @@ @hoogle @type let fixify f = fix Prelude.. f; repeat = fixify (:); cycle = fixify (++); forever = fixify (>>) in fixify
16:32:25 <lambdabot> Data.IntMap fold :: (a -> b -> b) -> b -> IntMap a -> b
16:32:26 <lambdabot> Data.IntMap foldr :: (a -> b -> b) -> b -> IntMap a -> b
16:32:26 <lambdabot> Data.IntMap foldr' :: (a -> b -> b) -> b -> IntMap a -> b
16:32:33 <elliott> ais523: USE_DIRECT3D would not be set on Linux
16:32:43 <Vorpal> elliott: it was in the classical software raytrace loading screen of darwinia
16:32:46 <elliott> ais523: I'm just saying that the code obviously has errors not in the released binaries for whatever reason
16:32:46 <Vorpal> if you remember that one
16:32:57 <ais523> elliott: ah, OK
16:33:05 <kallisti> @hoogle (a -> a1 -> a1)
16:33:05 <lambdabot> Prelude seq :: a -> b -> b
16:33:05 <lambdabot> GHC.Conc.Sync par :: a -> b -> b
16:33:05 <lambdabot> GHC.Conc par :: a -> b -> b
16:33:20 <elliott> kallisti: flip const
16:34:07 <ais523> what does seq do, and is it something incredibly unhaskellish?
16:34:16 <elliott> you know what seq does
16:34:24 -!- derrik has quit (Quit: reconnect).
16:34:29 <kallisti> ais523: it's kind of unhaskellish?
16:34:33 <elliott> either that, or are on a campaign to wilfully forget as much Haskell as possible :P
16:34:40 <ais523> elliott: well, the obvious meaning is "force a and return b"
16:34:41 <elliott> ais523: seq _|_ a = _|_; seq a b = b
16:34:46 <ais523> ah, OK
16:34:47 <elliott> that's not its meaning
16:34:53 <elliott> (force a and return b)
16:34:57 <elliott> it does break parametricity a bit though
16:34:59 -!- derrik has joined.
16:35:06 <elliott> but not unsalvagably
16:35:09 <ais523> I was thinking "a can't possibly have a side effect, so how would seq be different from flip const"
16:35:20 <ais523> and the answer is that it's an infinite-loop-checker?
16:35:23 <kallisti> it does have a side effect of sorts.
16:35:31 <elliott> kallisti: no, it doesn't
16:35:35 <elliott> _|_ isn't a side-effect
16:35:35 <ais523> now I'm just trying to work out why it'd be useful
16:35:41 <elliott> ais523: it's not an infinite loop checker
16:35:45 <elliott> ais523: it's _|_ if either argument is bottom
16:35:47 <elliott> else the right argument
16:36:01 <kallisti> elliott: forcing the evaluation of a thunk is pretty side-effecty
16:36:07 <ais523> well, bottom = infinite loop or exception
16:36:07 <elliott> kallisti: there are no thunks
16:36:15 <kallisti> elliott: ah, of course.
16:36:16 <elliott> kallisti: by that definition, beta-reduction is a side-effect
16:36:22 <elliott> because it mutates the thunk in many implementations
16:37:55 <elliott> ais523: anyway, it's useful because seq is strict in both of its arguments
16:37:58 <kallisti> elliott: well it forces a in a context where it would not normally be forced.
16:38:04 <elliott> as opposed to flip const, which is strict in only its latter
16:38:12 <elliott> kallisti: "not normally"? plenty of functions are strict in both their arguments
16:38:17 <elliott> seq is just the only polymorphic one
16:38:18 <ais523> elliott: oh, so in practice it makes the code run faster by being strict?
16:38:22 <kallisti> elliott: yes, those functions do things to their arguments
16:38:26 <ais523> (strictness doesn't always speed up code, but can do in some contexts)
16:38:26 <kallisti> elliott: seq only "does things" to one of them.
16:38:34 <elliott> ais523: that's why you would use it, yes
16:38:41 <elliott> ais523: it's a common misconception that seq must evaluate its first argument first
16:38:44 <elliott> but that's not guaranteed at all
16:38:47 <elliott> GHC provides pseq for that purpose
16:39:04 <ais523> elliott: it can evaluate the second argument, then the first, then return the second, I guess
16:39:06 <elliott> (some people think it /should/ guarantee that, but that breaks even more properties :))
16:39:13 <ais523> and that's the only other possible evaluation order
16:39:13 <elliott> ais523: indeed. and GHC sometimes _does_ do this.
16:39:21 <elliott> kallisti: wrong; id is strict in its argument too
16:39:33 <kallisti> elliott: ... -_-
16:39:35 <elliott> seq "does the same thing| to both its arguments
16:39:36 <elliott> "
16:39:43 <elliott> i'm not being purposefully dense, you're just wrong
16:40:13 <kallisti> elliott: under normal Haskell semantics, if you accept two arguments and return the second one, the first one is never evaluated
16:40:16 <kallisti> with seq it is..
16:40:17 <kallisti> elliott: happy?
16:40:31 <kallisti> elliott: id is irrelevant because it returns its one argument
16:40:42 <elliott> kallisti: actually no, the first one could be evaluated too. but you are still wrong even ignoring that:
16:40:50 <elliott> all you are saying is that (\a b -> b) is not strict in its first argument
16:40:56 <kallisti> yes
16:40:58 <elliott> because that is the only such function that meets your criteria
16:41:00 <kallisti> that is what I'm saying.
16:41:05 <elliott> but nobody claimed seq was like (\a b -> b) "but special"
16:41:18 <kallisti> elliott: ...is it not?
16:41:22 <elliott> also, "doing something special" is not a side-effect.
16:42:07 <kallisti> @src seq
16:42:07 <lambdabot> Source not found. You untyped fool!
16:43:36 <ais523> elliott: is there any observable difference between id being strict and id being lazy?
16:43:39 <kallisti> help where's the part where seq only uses un-side-effectful Haskell code to do what it does.
16:43:43 <elliott> ais523: id can't possibly be lazy
16:43:56 <elliott> kallisti: similarly, (+) on Int has side-effects, because you can't implement it in Haskell
16:44:01 <elliott> in fact -- brace yourself
16:44:05 <elliott> EVERY PRIMITIVE HAS SIDE-EFFECTS!
16:44:11 <ais523> elliott: well, lazy id would do the say thing as strict id, right down to evaluation order
16:44:12 <elliott> Turns out Haskell is impure because kallisti is an idiot.
16:44:18 <kallisti> elliott: that is not what I meant.
16:44:21 <elliott> ais523: no, it wouldn't; there is no lazy id, there are no lazy functions of type (a -> a)
16:44:21 <ais523> so the two are the same
16:44:25 <elliott> ais523: it's an incoherent question
16:44:43 <ais523> elliott: have you seen the hardware implementation of call-by-name id? it is quite undeniably lazy
16:44:57 <elliott> ais523: no shit, "lazy" changes meanings in different evaluation orders
16:45:06 <ais523> ah, OK
16:45:07 <elliott> ais523: but call-by-name is a valid strategy for Haskell too
16:45:11 <elliott> ais523: id is still strict in it
16:45:23 <kallisti> elliott: side-effects involve modifying state that is not part of the result of the expression. seq does this. clearly (+) does not do that.
16:45:27 <elliott> you can't /observe/ its supposed "laziness" at all
16:45:34 <elliott> and it's the semantics that matter, not the operations
16:45:35 <ais523> elliott: except with a multimeter, right
16:45:46 <elliott> kallisti: seq DOES NOT MODIFY ANY STATE
16:46:01 <elliott> you can implement haskell in fucking term rewriting
16:46:04 <elliott> where there is no
16:46:04 <elliott> mutable
16:46:05 <ais523> arguably, I'd say that id is both strict /and/ lazy
16:46:05 <elliott> state
16:46:11 <elliott> ais523: id _|_ = _|_
16:46:13 <elliott> ais523: Q.E.D.
16:46:27 <kallisti> elliott: seq would still be a side-effect in those circumstances.
16:46:41 <elliott> kallisti: you do not understand what a side-effect is.
16:47:10 <ais523> elliott: well, "lazy id" is always forced instantly; that's why it's the same as being strict
16:47:33 <elliott> ais523: you're bringing details like "force" into it that don't exist at this layer
16:47:33 <ais523> aren't all unary operators either strict, or ignore their argument, with your definition?
16:47:40 <kallisti> elliott: I think you just have a very weird notion of what a side-effect is.
16:47:43 <elliott> ais523: of course
16:47:50 <elliott> ais523: if you don't ignore an argument, you force it
16:47:57 <ais523> ah, OK
16:48:03 <kallisti> elliott: clearly seq makes an /observable/ difference to the operational semantics of the program that /has nothing to do with its return value/
16:48:13 <ais523> anyway, I agree with your definition of "strict", but am not convinced it's the opposite of "lazy"
16:48:18 <elliott> kallisti: ah! what you mean is that since
16:48:20 <elliott> seq a b
16:48:21 <elliott> isn't the same as b
16:48:24 <elliott> seq has a side-effect
16:48:26 <elliott> by the same token
16:48:27 <elliott> a+1
16:48:29 <elliott> is not the same as a
16:48:32 <kallisti> elliott: uh, what?
16:48:34 <elliott> therefore, again (+) on Int has a side-effect!
16:48:36 <elliott> OMG!
16:48:38 <kallisti> no. I'm sorry, but you're stupid.
16:48:47 <elliott> kallisti: but seriously though, you can stop bothering, because you're... wrong
16:48:57 <elliott> and have no idea what you're talking about
16:48:58 <elliott> so
16:48:58 <elliott> yeah
16:49:10 <kallisti> elliott: nice strawman though. "oh you actually meant this. now I will demonstrate that what I said is wrong."
16:49:22 <elliott> hey guys, I heard I/O is relevant to the definition of turing completeness
16:49:29 <kallisti> it's not.
16:49:47 <elliott> reaaaaaaally? I think I'll argue the issue for a few hours with people who know more about the topic than me
16:49:58 <kallisti> elliott: and this is relevant to what we're talking about how?
16:50:09 <kallisti> elliott: it basically just sounds like a personal attack to me. how silly.
16:50:18 <ais523> kallisti: I think your problem is, that seq a b is designed to calculate a value depending on both a and b; the fact that the value is always the same as b, doesn't change the fact that it depends on a
16:50:25 <elliott> the relevance is that you should really just drop it before this log becomes more personally embarrassing to you in the future
16:50:28 <elliott> it wasn't intended as an argument
16:50:30 <ais523> you could implement seq on integers as seq i j = (i-i) + j
16:50:48 <elliott> ais523: I've occasionally explained seq as just magically knowing the constructors of every data-type
16:50:49 <elliott> and looking like
16:50:52 <elliott> seq (A_ ) x = x
16:50:55 <elliott> seq (B _ _) x = x
16:50:56 <elliott> ...
16:51:02 <elliott> *A _
16:51:06 <ais523> and the only reason you think that the generalised seq is side-effecty is that there's no way to get a polymorphic version
16:51:13 <elliott> that kind of breaks down for functions, but so does seq :)
16:51:25 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
16:51:26 <elliott> (seq lets you distinguish _|_ and (const _|_))
16:51:34 <elliott> (another thing kallisti has been confused about, incidentally)
16:51:36 <kallisti> ais523: seq /doesn't/ calculate a value based on a and b though. only b.
16:51:41 <ais523> kallisti: yes it does
16:51:50 <ais523> the value depends on a by definition
16:52:03 <ais523> thus, optimising out the dependency on a, just because the return value isn't affected by it, is wrong
16:52:18 <ais523> if you're going to call the dependency a side-effect, you have a pretty weird definition of side-effect
16:52:29 <kallisti> it has nothing to do with dependency.
16:52:49 <ais523> elliott: how strict is the first argument to seq? does it only go as far as the first constructor, or does it figure out the value "all the way"?
16:52:53 <ais523> kallisti: yes it does
16:52:59 <elliott> ais523: WHNF, like always
16:53:03 <ais523> why does (a+b) go into an infinite loop if either a or b are infinite loops?
16:53:12 <elliott> ais523: (so, to the first constructor or a lambda, basically)
16:53:18 <kallisti> ais523: strictness and laziness has nothing to do with side-effects, first of all.
16:53:20 <ais523> elliott: ah, OK
16:53:23 <elliott> kallisti: exactly
16:53:29 <elliott> that's why seq isn't side-effectful
16:53:43 * elliott is just going to keep stating facts rather than actually trying to engage in futile argument.\
16:53:44 <kallisti> elliott: it has to do with what is computed and what is returned.
16:53:46 <elliott> s/\\$//
16:54:02 <ais523> elliott: I admit that seq still feels a bit non-Haskellish to me, but that's not because of side effects, but because it does weird things to eval order
16:54:13 <elliott> ais523: a lot of people don't like it
16:54:22 <kallisti> elliott: and in this case, seq returns b and forced a. this is /precisely/ why you can't simply optimize seq away because it performs a side-effect unrelated to just evaluating b and returning that.
16:54:23 <elliott> ais523: Haskell 1.4 was better
16:54:28 <elliott> ais523: it had class Eval a where seq :: a -> b -> b
16:54:32 <elliott> and e.g. functions weren't an instance
16:54:40 <elliott> and every ADT got an Eval instance for free
16:54:51 <elliott> that was good because fully polymorphic functions didn't get parametricity fucked up
16:55:06 <elliott> kallisti: you will never understand why you are wrong until you stop thinking in terms of operations like "forced".
16:55:15 <ais523> kallisti: do you think that (\a b->(b-b)+a)::(Int -> Int -> Int) can be optimised to const::(Int -> Int -> Int)?
16:55:16 <elliott> there are two levels: semantics, which do _not_ involve things like "forcing" and "mutation"
16:55:22 <elliott> and implementation, which SOMETIMES INVOLVES MUTATION
16:55:27 <ais523> elliott: I like finding misconceptions via binary search
16:55:36 <elliott> GHC mutates TONS of things in the process of evaluating COMPLETELY PURE (even seq-less, if you think that matters) expressions
16:55:38 <ais523> whether in someone else's view or mine
16:55:53 <elliott> that does NOT MEAN THOSE EXPRESSIONS MUTATE, the expressions DO NOT HAVE SIDE-EFFECTS
16:56:04 <elliott> and that is the last I will say on the matter, unless I decide to be a jerk from the sidelines again
16:56:13 <elliott> which is, admittedly, fairly likely.
16:56:29 <kallisti> ais523: uh, no?
16:56:31 <elliott> ais523: I'm not sure that works in the general case
16:56:36 <ais523> kallisti: why not?
16:56:40 <elliott> ais523: (binary search, I mean)
16:56:47 <elliott> sometimes people are just wrong all the way down
16:56:56 <ais523> elliott: indeed, but you can often narrow it down somewhat
16:57:12 <kallisti> ais523: because they don't do the same thing? you're making the assumption that Num obeys any kind of laws.
16:57:24 <kallisti> such as b-b == fromIntegral 0
16:57:31 <ais523> kallisti: did you see the ::Int?
16:57:36 <kallisti> oh, no.
16:57:38 <kallisti> I'm blind.
16:57:49 <ais523> right, in general you couldn't, because of polymorphism
16:58:02 <ais523> > (\a b->(b-b)+a) x y
16:58:03 <lambdabot> y - y + x
16:58:07 <kallisti> ais523: I mean, it /could/ be optimized. it would do the same thing.
16:58:07 <ais523> as expected
16:58:14 <ais523> kallisti: no it wouldn't
16:58:20 <kallisti> ais523: er, well, right.
16:58:21 <ais523> what if a is fix id?
16:58:21 <kallisti> strictness
16:58:31 <ais523> so, would you say that b-b has side effects?
16:58:35 <kallisti> no?
16:58:45 <ais523> now, if I flip that expression
16:58:58 <ais523> to (\a b->(a-a)+b)::(Int->Int->Int)
16:59:03 -!- Phantom_Hoover has joined.
16:59:04 <ais523> I have seq::(Int->Int->Int)
16:59:08 <ais523> but I can't optimise it to flip const
16:59:19 <ais523> based on your arguments
16:59:23 <kallisti> ais523: I have never once claimed that seq can be optimized to flip const
16:59:24 <ais523> also, no side effects
16:59:29 <ais523> ah, OK
16:59:40 <ais523> <kallisti> elliott: and in this case, seq returns b and forced a. this is /precisely/ why you can't simply optimize seq away because it performs a side-effect unrelated to just evaluating b and returning that.
16:59:41 <kallisti> ais523: in fact, the reason it can't is because seq has side-effects...
16:59:45 <ais523> you claimed that it's because it has side effects
16:59:56 <ais523> whereas I've given an implementation on the integers that doesn't have side effects
16:59:57 <kallisti> correct.
16:59:59 <ais523> and yet still can't be optimised away
17:00:02 -!- azaq23 has joined.
17:00:05 <kallisti> ais523: okay?
17:00:12 <kallisti> ais523: there are other reasons things can't be optimized.
17:00:19 <ais523> kallisti: agreed
17:00:25 <ais523> and those are the reasons that seq can't be optimised
17:00:49 <ais523> elliott: hmm, I suppose that this means that in languages like Agda, it's possible for an integer to be lazily positive
17:00:50 <kallisti> ais523: oh I see what you're saying.
17:00:58 <ais523> as in, forced only so far as being positive, rather than to its actual value
17:01:05 <ais523> because integers actually have type constructors there
17:01:33 <kallisti> ais523: but I still think seq performs a side-effect, because side-effects are related to computing expressions
17:02:04 <ais523> hmm, now I'm wondering what seq /does/ do if given a function
17:02:09 <ais523> > seq id 0
17:02:09 <lambdabot> 0
17:02:18 <ais523> presumably just ignores it
17:02:20 <ais523> > seq (fix id) 0
17:02:24 <lambdabot> mueval-core: Time limit exceeded
17:02:28 <ais523> or, hmm, no
17:02:45 <ais523> wait, fix id isn't afunction
17:02:49 <ais523> *a function
17:02:53 <ais523> :t fix id
17:02:53 <lambdabot> forall a. a
17:03:04 <elliott> <ais523> elliott: hmm, I suppose that this means that in languages like Agda, it's possible for an integer to be lazily positive
17:03:09 <ais523> > seq (const $ fix id) 0
17:03:10 <elliott> ais523: Agda doesn't have _|_
17:03:10 <lambdabot> 0
17:03:17 <elliott> so the concept of laziness/strictness doesn't exist
17:03:23 <ais523> elliott: indeed, it was a different "this"
17:03:28 <ais523> and I meant in terms of implementation
17:03:33 <ais523> it's not user-observable at all
17:03:40 <kallisti> ais523: things are naturally forced in Haskell semantics by being referring to in functions, or being evaluated in some way. so being forced as the result of being used in an expression is not a side-effect. I'm not saying "forcing values is a side-effect" I'm saying "forcing values that you don't use as part of an expression that you return is a side-effect"
17:03:55 <ais523> hmm, does this mean Agda is sub-TC?
17:04:04 <ais523> (as in, you can't write a program without a proof it terminates?)
17:04:12 <elliott> kallisti: nothing is forced in Haskell's semantics.
17:04:22 <ais523> kallisti: well, the argument a /is/ used, that's the point
17:04:27 <ais523> it's not used for anything, but it's still used
17:04:31 <elliott> ais523: Agda is sub-TC, yes.
17:04:36 <elliott> unless you turn off the termination checker.
17:04:46 <ais523> imagine it being subtracted from itself via a generic magic subtraction operation, that returns 0 if you subtract anything from itself
17:05:21 <kallisti> ais523: ...it's not relevant to the computed result. in much the same way that the act of writing bytes to a file is irrelevant to the result of writeFile
17:05:27 <elliott> not true
17:05:32 <elliott> the result of writeFile is an IO action
17:05:37 <elliott> and all that action does is write bytes to af ile
17:05:38 <elliott> *a file
17:05:59 <elliott> writeFile is also referentially transparent, i.e. returns the same action for the same arguments always
17:06:22 <ais523> elliott: well, writeFile doesn't have side effects; unsafePerformIO does when given its return value, but writeFile doesn't
17:07:16 <ais523> one possible implementation of IO actions would be as C programs, wouldn't it? and you could define all the functions returning IO actions, and things like >>= for IO, as operating on those programs
17:07:31 <ais523> and then unsafePerformIO and the runtime would simply run the programs produced
17:07:32 <elliott> ais523: yep
17:07:37 <ais523> (it'd be quite a bad impl, but it'd be possible)
17:08:00 <elliott> ais523: on that riff: http://conal.net/blog/posts/the-c-language-is-purely-functional (in response to people claiming Haskell is purely-functional)
17:08:19 <ais523> wait, /another/ elliott?
17:08:28 <elliott> conal elliott is the more famous elliott
17:08:41 <elliott> there's him and another two elliotts in #haskell at the best of times
17:08:44 <elliott> well, not the best of times
17:08:47 <elliott> because one of them is elliottcable
17:09:39 <ais523> hmm, it's a little wrong; #undef is a purely functional operation in CPP, because it serves to end a scope, rather than do anything fundamentally side-effecty
17:10:15 <elliott> ais523: nah, you can use it out of order
17:10:22 <ais523> really? ouch
17:10:27 <elliott> of course you can...
17:10:33 <kallisti> ...I think you guys have a weird definition of side-effect.
17:10:36 <kallisti> or well
17:10:38 <kallisti> probably a normal one
17:10:40 <kallisti> but the normal one is weird.
17:10:51 <elliott> kallisti: your definition is incoherent
17:11:01 <elliott> and makes Haskell-even-without-seq side-effectful
17:11:10 <elliott> (you would claim it isn't, but that's because your definition is self-contradictory)
17:11:17 <elliott> *it doesn't
17:11:28 <kallisti> Haskell-even-without-seq is side-effectful...
17:11:51 <elliott> *-and-IO
17:11:55 <ais523> "Having a baby is often a occasion whenever you must be careful because the outcomes of earning a mistake might be serious."
17:12:02 <elliott> ais523: :D
17:12:20 <kallisti> kallisti: well, "pure Haskell without side-effects" has no side-effects, yes.
17:12:28 <kallisti> erm
17:12:32 <kallisti> s/kallisti/elliott/
17:12:33 <ais523> kallisti: did you just nickping yourself?
17:12:38 <kallisti> kallisti: yes
17:12:48 <ais523> wow, elliott and kallisti must be the same person, it's the only way to explain such a mistake
17:12:54 <kallisti> we are.
17:12:56 <elliott> kallisti: indeed it doesn't: unfortunately, your definition makes it so
17:13:00 <ais523> (and the only conclusion from that is, that that person is trolling me really heavily)
17:13:15 <elliott> you just don't realise it, because you don't know what your definition is, because you don't understand it, because you don't understand purity
17:13:26 <kallisti> elliott: ah, because forcing a value as the result of computing it is a side-effect, under my definition, yes?
17:13:34 <kallisti> (except it's not, but please explain)
17:13:39 <ais523> with a definition of "same arguments always gives same results", seq is perfectly pure
17:13:45 <ais523> as its result depends only on its arguments a and b
17:13:54 <elliott> kallisti: nah, ais523 has taken the torch of actually attempting to explain to you _why_ you're wrong
17:13:57 <elliott> by which I mean
17:14:00 <elliott> I gave up
17:14:21 <ais523> elliott: to be fair, I didn't understand at the start of the conversation, I just figured it out pretty quickly
17:14:22 <kallisti> as I said, my claim is not that "forcing a value is a side-effect"
17:14:39 <kallisti> because values are forced all the time when no side-effects are occuring.
17:14:44 <elliott> ais523: yes, such wonders tend to happen when you start without assuming you're correct :P
17:14:58 <ais523> Haskell is something that I don't find very intuitive
17:15:37 <ais523> although I've occasionally wished for Haskelly monads elsewhere (especially for error handling); you could do it in OCaml but you have to lazify everything by hand, which is irritating
17:16:12 <ais523> (where lazifying is the easiest way to make statements into what are effectively Either actions)
17:17:21 <kallisti> ...but how is...
17:17:40 <kallisti> "this action is performed, and is completely irrelevant to the output of the expression"
17:17:43 <kallisti> not a side-effect?
17:17:46 <elliott> "action is performed"
17:18:02 <ais523> elliott: I disagree, as I disagree with the "completely irrelevant"
17:18:04 <elliott> evaluating a pure value is not an "action" in the side-effectful sense
17:18:12 <ais523> clearly, you get an infinite loop if a is an infinite loop
17:18:15 <ais523> thus, a isn't irrelevant
17:18:21 <elliott> ais523: pinging the wrong person, dude
17:18:31 <ais523> elliott: I was disagreeing with where you found the error
17:18:38 <ais523> well, hmm
17:18:39 <elliott> ais523: I was just disagreeing with a different part.
17:18:49 -!- MSleep has changed nick to MDude.
17:18:49 <ais523> I think his statement's wrong even without the "action is performed" part
17:19:04 <elliott> ais523: Were I trying to actually deconstruct kallisti's argument in its entirety, I would have to start by rejecting everything he says, as it is worded in terms of imperative machine operations, not Haskell's pure, timeless semantics.
17:19:18 <elliott> He would almost certainly interpret this as me trolling him with stubbornness.
17:19:21 <elliott> So I don't.
17:19:31 <kallisti> elliott: ah okay so forcing a in a `seq` b is not an action, it's just an observable effect of evaluating the expression that has nothing to do with the return value. got it.
17:19:32 <ais523> kallisti: hmm, to put it a different way: you seem to think that side-effects are defined in terms of "X happens and is not useful", rather than in terms of "X happens and does something not reflected by the return value Y"
17:19:40 <elliott> kallisti: It has to do with the return value.
17:19:47 <elliott> If a is _|_, then the return value is _|_.
17:20:05 <kallisti> ais523: you seem to be thinking that I'm thinking the opposite of what I'm thinking, and then go on to describe exactly what I'm thinking to be the thing I should be thinking.
17:20:08 <kallisti> this has happened twice now.
17:20:40 <ais523> elliott: hmm, is it sanely possible to add T to a language as well as _|_?
17:20:53 <elliott> ais523: heh
17:21:04 <elliott> ais523: well, _|_ is the value of every type, I guess T is the value of no type?
17:21:07 <ais523> then your values would be lattice elements, I think
17:21:11 * elliott PRO MATHEMATICIAN
17:21:13 <elliott> ais523: they are
17:21:14 <kallisti> elliott: hmm...
17:21:18 <elliott> ais523: ordered by well-definedness
17:21:24 <elliott> ezyang has a long post series about this
17:21:30 <ais523> yep, that makes sense
17:21:35 <ais523> well, it's only a semilattice in Haskell
17:21:45 <elliott> right
17:21:55 <kallisti> elliott: can Haskell talk about _|_ in that way...
17:22:02 <ais523> _|_ is a suitable value for use in any context; whereas T is a value which, if a context accepts that, it'll accept anything
17:22:05 <elliott> kallisti: We're not Haskell, we're humans.
17:22:15 <elliott> Haskell's semantics most definitely involve _|_.
17:22:32 <ais523> kallisti: in general, _|_ is meaningful, but it's impossible for a computer to always detect its existence
17:22:38 <kallisti> elliott: does haskell's semantics involve side-effects?
17:22:42 <ais523> (and you get an infinite loop if it's there, but can't)
17:23:06 <kallisti> ais523: right
17:23:15 <elliott> kallisti: No, although the description of how IO is executed does.
17:23:20 <kallisti> hmmm, okay.
17:23:41 <ais523> I think ghc can detect a few trivial instances of _|_ existing
17:23:44 <ais523> > 1 / 0
17:23:44 <elliott> kallisti: Note that there is a function which causes the evaluation of its first argument when forced, but does _not_ return _|_ when the first argument is _|_.
17:23:45 <lambdabot> Infinity
17:23:50 <ais523> > 1::Int / 0
17:23:51 <lambdabot> Only unit numeric type pattern is valid
17:24:00 <ais523> > (1::Int) / 0
17:24:01 <lambdabot> No instance for (GHC.Real.Fractional GHC.Types.Int)
17:24:01 <lambdabot> arising from a use o...
17:24:11 <ais523> > (1::Int) / (0::Int)
17:24:12 <lambdabot> No instance for (GHC.Real.Fractional GHC.Types.Int)
17:24:12 <lambdabot> arising from a use o...
17:24:13 <elliott> kallisti: That function is "start evaluating the first argument in another thread, and return the second immediately" (it is only distinguishable from flip const when talking about operations, not semantics).
17:24:16 <elliott> kallisti: AKA par.
17:24:21 <elliott> kallisti: It is also completely pure and has no side-effects.
17:24:26 <kallisti> elliott: how about... operational semantics?
17:24:28 <ais523> > (1::Int)
17:24:29 <lambdabot> 1
17:24:40 <ais523> aha, division isn't defined on the integers in Haskell
17:24:45 <ais523> that… makes a lot of sense, actually
17:24:51 <elliott> kallisti: So if you think the return value matters as to whether something has a "side-effect", you're wrong.
17:24:54 <elliott> ais523: `div`
17:24:59 <ais523> > 1 `div` 0
17:25:00 <elliott> :t div
17:25:00 <lambdabot> *Exception: divide by zero
17:25:00 <lambdabot> forall a. (Integral a) => a -> a -> a
17:25:10 <ais523> elliott: and I was thinking that "integer division" quite possibly was
17:25:18 <elliott> :t quot
17:25:19 <lambdabot> forall a. (Integral a) => a -> a -> a
17:25:22 <ais523> so yes, that's a _|_ that was caught by the compiler, as it's a pretty easy one to catch
17:25:26 <elliott> > 1 `quot `0
17:25:26 <lambdabot> *Exception: divide by zero
17:25:50 <ais523> hmm, now I'm wondering what split-complex numbers are used for
17:25:53 <elliott> ais523: N.B. there are actually semantics given to Haskell's _|_s to explain exceptions
17:26:04 <kallisti> elliott: question: is a guaranteed to evaluate before seq returns?
17:26:20 <ais523> elliott: you mean exceptions are the reason that _|_ is part of the semantics rather than inferred from it?
17:26:25 <elliott> kallisti: Mu.
17:26:26 <ais523> I'm not entirely convinced I've parsed your line correctly
17:26:30 <elliott> kallisti: You're talking about operations again.
17:26:33 <elliott> ais523: no
17:26:42 <elliott> ais523: I just mean that we don't say exceptions work because the compiler magically realised _|_ was there
17:26:45 <kallisti> elliott: operations seem particularly relevant to side-effects.
17:26:54 <elliott> ais523: OTOH, the semantics for exceptions are really kind of gnarly, so we ignore them when not talking about exceptions :P
17:26:58 <ais523> heh
17:27:04 <elliott> kallisti: yep, good thing there are no side-effects nivolved
17:27:05 <ais523> I take it you can't catch an exception in Haskell?
17:27:13 <ais523> (I'd be pretty surprised if you could, all things considered)
17:27:17 <elliott> ais523: of course you can
17:27:18 <ais523> (but Haskell surprises me a lot)
17:27:19 <elliott> they'd be useless otherwise
17:27:23 <ais523> oh, ouch
17:27:30 <elliott> :t Control.Exception.catch
17:27:31 <lambdabot> forall a e. (GHC.Exception.Exception e) => IO a -> (e -> IO a) -> IO a
17:27:32 <kallisti> elliott: in the denotational semantics, sure. but in the operational semantics... yes?
17:27:42 <elliott> :t Control.Exception.throw
17:27:42 <lambdabot> forall e a. (GHC.Exception.Exception e) => e -> a
17:27:43 <elliott> :t Control.Exception.throwIO
17:27:44 <lambdabot> forall e a. (GHC.Exception.Exception e) => e -> IO a
17:27:53 <elliott> kallisti: haskell has no mandatory operational semantics
17:28:02 <elliott> implementations can do what they will.
17:28:09 <elliott> if an implementation proves the first argument to seq always terminates, it can discard it.
17:28:13 <ais523> elliott: oh, catch is an IO action? that makes a lot of sense too
17:28:37 <elliott> ais523: *a function taking an IO action and a function taking an exception and returning an IO action, and returning an IO action
17:28:38 <elliott> but yes
17:28:56 <ais523> elliott: well, I knew I was going to get a correction like that
17:29:06 <ais523> I should have said that a given try…catch block is an IO action
17:29:14 <kallisti> elliott: I think I'm done pressing the issue.
17:29:28 <elliott> kallisti: which is not the same thing as realising you're wrong, I presume?
17:29:37 <kallisti> elliott: this conversation has been enlightening. but no, I don't think I'm wrong on this one.
17:29:45 <elliott> you are
17:29:52 <kallisti> elliott: but I do understand your perspective now. so cool.
17:30:08 <elliott> it's not
17:30:09 <elliott> a perspective
17:30:14 <elliott> it's literally objectively correct
17:30:25 <elliott> you won't find a single person who knows their shit who will agree with you
17:30:40 <kallisti> that's fine.
17:31:15 <elliott> yeah. you alone will be correct in your tower of oh shit, somehow I'm a haskell expert by pure chance
17:31:19 <ais523> elliott: to be fair, I'm not sure that the concept that kallisti calls "side-effect" is useless, but I'm not sure how easy it is to define
17:31:22 <elliott> ais523: Prelude Control.Exception> catch (print (1 `div` 0)) (\e -> putStrLn $ "Exception: " ++ show (e::SomeException))
17:31:22 <elliott> Exception: divide by zero
17:31:24 <ais523> and it needs a better name
17:31:49 <ais523> elliott: the IO action was the bit I missed when thinking through it
17:31:51 <kallisti> ais523: elliott: my concept involves operations. (aka what actually happens when you implement things)
17:31:57 <elliott> ais523: Haskell exceptions are interesting even then because of laziness and and ambiguity
17:32:03 <ais523> having it as an IO action means that it makes sense to say when it happens
17:32:11 <elliott> ais523: (1 `div` 0) + undefined -- which exception does this throw?
17:32:13 <elliott> divide by 0, or undefined?
17:32:15 <ais523> which gives enough context to know how to catch it
17:32:25 <ais523> elliott: depends on the impl, I guess
17:32:35 <elliott> ais523: nope, it's actually formally ambiguous
17:32:42 <elliott> I suppose an implementation could give guarantees, but it wouldn't /want/ to
17:32:52 <elliott> ais523: that's basically the reason exception-catching is in IO
17:32:58 <elliott> if not for that, it would be pure
17:33:04 <ais523> elliott: I meant unspecified, not impl-defined
17:33:07 <elliott> right
17:33:43 <elliott> ais523: Prelude Control.Exception> catch (evaluate [1,2,undefined] >> return ()) (\e -> putStrLn $ "Exception: " ++ show (e::SomeException))
17:33:43 <elliott> Prelude Control.Exception>
17:33:50 <ais523> also, I think if catch were pure, and just caught the existence of an exception rather than a specific exception, you'd need to be careful with seq and similar things to make sure that the exception happened inside the catch rather than outside
17:33:53 <elliott> Prelude Control.Exception> catch (evaluate (undefined :: [Int]) >> return ()) (\e -> putStrLn $ "Exception: " ++ show (e::SomeException))
17:33:53 <elliott> Exception: Prelude.undefined
17:34:25 <ais523> aha, evaluate only forced it one level
17:34:31 <elliott> (evaluate is just (\a -> a `seq` return a), except with some extra magic)
17:34:38 <elliott> (so that evaluate undefined `seq` () === ())
17:34:47 <ais523> so the first case didn't exception because it never cared about the elements of the list, just that it had a head and a tail
17:34:47 <elliott> (i.e. the evaluation only happens when you /execute/ the action)
17:35:06 <kallisti> elliott: I've basically come to the conclusion that I'm talking about something completely different. So it's not so much that I think I've PROVED EVERYONE WRONG. it's just that those people being right and me being right are irrelative
17:35:15 -!- zzo38 has quit (Remote host closed the connection).
17:35:20 <ais523> elliott: which is ofc perfectly meaningful as an IO action, because the whole point of IO actions is that they happen at a particular time
17:35:35 <elliott> kallisti: yoru concept is self-contradictory, so it's gonna need a hell of a lot of reworking to make sense.
17:35:49 <elliott> ais523: well, the point is that they have side-effects
17:35:56 <elliott> ais523: the same IO action can execute at ten different times, or none
17:36:07 <ais523> elliott: yep
17:36:17 <ais523> but each time it's executed, you can say when
17:36:27 <ais523> I think the point, even more than having side-effects, is that they execute in order
17:36:36 <ais523> but the side-effects are useful in practice ;)
17:36:46 <ais523> IO would be useful even if the universe were pure
17:36:51 <kallisti> elliott: I haven't found the contradiction. If you have it I'd like to see, but I doubt you have the patience to go down that route.
17:37:35 <ais523> (btw, I still haven't figured out how to do IO-style things meaningfully in Feather; the problem's not evaluation order, as that's trivially defined, but other problems)
17:38:06 <ais523> (it's possible to create a temporal monad that keeps track of meta-time, and it's probably a useful concept, but I want to avoid it if possible)
17:38:21 <ais523> (especially as it breaks the purity of the language)
17:41:26 <kallisti> elliott: the problem with seq _|_ b = _|_; seq a b = b is that there's no computer that can actually do that.
17:41:38 <kallisti> which, when you're talking about operational semantics, is relevant.
17:41:39 <elliott> yes there is
17:41:46 <elliott> my computer does that when I use seq
17:41:47 <elliott> and also
17:41:53 <elliott> you never claimed to be talking about operational semantics at the start of this
17:41:57 <elliott> you just said seq has side-effects
17:41:59 <elliott> so really uh
17:42:02 <elliott> shut up about this, you're wrong
17:43:01 <kallisti> elliott: I didn't realize that's what I was talking about until it became apparent that we were talking about different definitions of side-effect.
17:43:22 <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider.
17:43:31 <elliott> if only every wrong person could be so lucky
17:43:46 <kallisti> elliott: correct.
17:45:34 <Gregor> `addquote <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider.
17:45:34 <Gregor> <elliott> if only every wrong person could be so lucky
17:45:34 <lambdabot> Gregor: You have 1 new message. '/msg lambdabot @messages' to read it.
17:45:36 <Gregor> ...
17:45:38 <Gregor> Damn it
17:45:41 <HackEgo> 742) <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider.
17:45:44 <Gregor> `delquote 742
17:45:47 <HackEgo> ​*poof* <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider.
17:45:54 <elliott> Gregor: I might like it more with just that line
17:45:56 <elliott> not sure though :P
17:46:08 <Gregor> `addquote <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider. <elliott> if only every wrong person could be so lucky
17:46:10 <HackEgo> 742) <elliott> right: you didn't find out you were wrong, just right in a way we failed to consider. <elliott> if only every wrong person could be so lucky
17:46:13 * elliott clap
17:46:18 <Gregor> @messages
17:46:18 <lambdabot> fizzie said 2h 56m 28s ago: A spammy, useless message.
17:46:30 <Gregor> @tell fizzie SPAM SPAM SPAM SPAM SPAM SPAM SPAM
17:46:31 <lambdabot> Consider it noted.
17:46:35 <Gregor> @tell fizzie FRIED EGGS AND SPAM
17:46:35 <lambdabot> Consider it noted.
17:50:16 <kallisti> elliott: does side-effect have a formal definition?
17:50:53 <elliott> referential transparency is a good one.
17:53:28 <Gregor> It blew up the moon, but no value accessible thru my references has changed.
17:54:02 <kallisti> I don't think they're equivalent (aka referential transparency <-> no side-effects )
17:54:12 <kallisti> or well, I don't think they're related in that way
17:54:14 <kallisti> not equivalent
17:54:21 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
17:54:23 <elliott> Gregor: Yeah, but eventually you call it so much that the computer explodes.
17:54:27 <elliott> And THEN it stops giving the same results.
17:54:58 <Gregor> This function, on certain inputs, will take more time than the shelf life of the processor. Therefore it has side effects.
17:55:11 <elliott> Gregor: TOTESg
17:55:27 <elliott> (I don't actually think referential transparency by itself = purity, and especially not "referential transparency on some hardware", but it's a start :P)
17:56:10 <elliott> kallisti: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.7800 This is apparently the most popular definition.
17:56:22 * kallisti loves popular things.
17:56:53 <Gregor> elliott: This paper should have the subtitle "Baby Don't Hurt Me"
17:57:19 <elliott> Gregor: Stretching things a bit :P
17:57:37 <Gregor> elliott: AND YET IT IS NOW STUCK IN YOUR HEAD </victory>
17:57:50 <elliott> Gregor: What is the point of turning into a tortured What Is Love reference, even if it doesn't fit at all?
17:57:52 <elliott> BABY DON'T HURT ME
17:57:54 <elliott> DON'T HURT ME
17:57:55 <elliott> NO MO'
17:58:01 * elliott wins you're welcome.
17:58:22 <Gregor> X-D
17:59:05 <ais523> elliott: that reminds me of Dan Ghica doing things like calling fork() in callbacks in order to break other people's proven security properties
17:59:15 <elliott> haha
17:59:39 <ais523> because their formal model didn't allow for /that/ sort of side effect
18:01:22 <kallisti> ais523: all programs are the side-effect of me (or my computer) creating them.
18:01:32 <kallisti> therefore: everything is side-effects.
18:02:19 <elliott> ais523: arguably, IO with concurrency should have a different monad to IO without concurrency
18:02:22 <elliott> since they're so different
18:02:42 <elliott> and a lot of things might want to take actions in the latter as arguments
18:02:52 <elliott> (with ofc sequentially :: IO a -> ConcIO a)
18:02:57 <ais523> elliott: hmm, indeed
18:03:04 <ais523> other way round too?
18:03:12 <ais523> that's also a meaningful operation
18:03:15 <elliott> no, that defeats the whole point
18:03:23 <elliott> because it lets you fork from within a sequential callback
18:03:24 <kallisti> does crashing my computer as the result of a memory link count as a side-effect? :3 it's certainly not related to the return value.
18:03:37 <ais523> elliott: but you'd have to unfork again before returning
18:03:52 <ais523> anyway, I'm about to miss a bus, so bye everyone; I'll probably be back later
18:03:55 -!- ais523 has quit (Remote host closed the connection).
18:03:59 <elliott> ais523: err? fork :: ConcIO a -> ConcIO ThreadId was the operation I was imagining ConcIO would have
18:04:09 <elliott> in addition to standard boring stuff on ThreadIds, and MVars
18:06:05 -!- MDude has quit (Ping timeout: 248 seconds).
18:06:55 -!- Phantom_Hoover has joined.
18:08:04 <kallisti> what, for some reason hackage isn't responding.
18:12:39 -!- Klisz has joined.
18:16:06 <elliott> -- Laws:
18:16:06 <elliott> -- pure x = slide (pure x) x
18:16:06 <elliott> -- slide fs f <*> slide xs x = slide (fs <*> xs) (f x)
18:16:09 <elliott> what good laws!
18:16:42 <kallisti> the first one is known as the "pure slide pure" law
18:16:51 <kallisti> and the second one is known as the "slide slide slide" law
18:17:10 <kallisti> they also double as dance moves.
18:18:01 <elliott> @pl \f g x -> f (g x) x
18:18:01 <lambdabot> flip flip id . liftM2
18:18:10 <elliott> @pl \f g h x -> f (g x) (h x)
18:18:11 <lambdabot> liftM2
18:18:24 <elliott> pure = liftM2 slide pure id
18:18:26 <elliott> I MADE IT BETTER
18:18:32 <elliott> pure = slide <$> pure <*> id
18:20:14 <kallisti> elliott: obfuscationist!
18:21:28 <kallisti> > f >>= g
18:21:29 <lambdabot> No instance for (GHC.Show.Show (m b))
18:21:29 <lambdabot> arising from a use of `M3862060386...
18:21:33 <kallisti> > f >>= g $ x
18:21:34 <lambdabot> Ambiguous type variable `a' in the constraints:
18:21:34 <lambdabot> `GHC.Show.Show a'
18:21:34 <lambdabot> a...
18:21:42 <kallisti> > f >>= g $ x :: Expr
18:21:43 <lambdabot> Ambiguous type variable `a' in the constraints:
18:21:43 <lambdabot> `GHC.Show.Show a'
18:21:43 <lambdabot> a...
18:21:53 <kallisti> > f >>= g $ x y :: Expr
18:21:54 <lambdabot> Couldn't match expected type `SimpleReflect.Expr -> a'
18:21:54 <lambdabot> against infe...
18:21:57 <kallisti> serpkweroweirowieriowetioweriwet
18:22:26 <kallisti> oh rite
18:23:54 <kallisti> :t f >>= const g
18:23:54 <lambdabot> forall (m :: * -> *) a b. (SimpleReflect.FromExpr (m a), SimpleReflect.FromExpr (m b), Monad m) => m b
18:24:06 <kallisti> > f >>= const g $ x
18:24:06 <lambdabot> Ambiguous type variable `a' in the constraint:
18:24:07 <lambdabot> `SimpleReflect.FromExpr a...
18:25:17 <kallisti> ah
18:25:20 <Phantom_Hoover> fungot!
18:25:21 <fungot> Phantom_Hoover: ' only a bit?' more voices were raised.
18:27:42 <kallisti> > (\x -> "(f " ++ x ++ ")") >>= (\x y -> "(g " ++ x ++ " " ++ y ++ ")") $ "x"
18:27:43 <lambdabot> "(g (f x) x)"
18:28:12 <kallisti> pure = pure >>= slide
18:28:17 <kallisti> elliott: ^^^
18:28:26 <elliott> oh, indeed.
18:31:55 <kallisti> I wish hackage would stop being down.
18:32:46 <elliott> -- Laws:
18:32:46 <elliott> -- fromZip . toZip = toZip . fromZip = id
18:32:46 <elliott> -- fromZip (pure x) = slide (fromZip (pure x)) x
18:32:46 <elliott> -- fromZip (toZip (slide fs f) <*> toZip slide xs x)
18:32:46 <elliott> -- = slide (fromZip (toZip fs <*> toZip xs)) (f x)
18:32:49 <elliott> my laws got even better.
18:33:10 <kallisti> what the hell.
18:33:15 <kallisti> what am I looking at.
18:33:31 <kallisti> fromZip . toZip = toZip . fromZip = id
18:33:35 <kallisti> that's a good one
18:34:31 <Sgeo> How does fromZip make sense for arbitrary arguments?
18:34:42 <Sgeo> (I'm just going by the name)
18:34:50 <elliott> class (Applicative (Zip v)) => Space v a | v -> a where
18:34:50 <elliott> -- Laws:
18:34:50 <elliott> -- fromZip . toZip = toZip . fromZip = id
18:34:50 <elliott> -- fromZip (pure x) = slide (fromZip (pure x)) x
18:34:50 <elliott> -- fromZip (toZip (slide fs f) <*> toZip slide xs x)
18:34:51 <elliott> -- = slide (fromZip (toZip fs <*> toZip xs)) (f x)
18:34:53 <elliott> data Zip v :: * -> *
18:34:55 <elliott> toZip :: v -> Zip v a
18:34:57 <elliott> fromZip :: Zip v a -> v
18:34:59 <elliott> slide :: v -> a -> v
18:35:05 <elliott> used like so:
18:35:06 <elliott> data Two = Two {-# UNPACK #-} !Double {-# UNPACK #-} !Double deriving (Show)
18:35:06 <elliott> instance Space Two Double where
18:35:07 <elliott> data Zip Two a = TwoZ !a !a
18:35:09 <elliott> toZip (Two x0 x1) = TwoZ x0 x1
18:35:11 <elliott> fromZip (TwoZ x0 x1) = Two x0 x1
18:35:13 <elliott> slide (Two _ x1) y = Two x1 y
18:35:15 <elliott> instance Functor (Zip Two) where
18:35:17 <elliott> fmap f (TwoZ x0 x1) = TwoZ (f x0) (f x1)
18:35:19 <elliott> instance Applicative (Zip Two) where
18:35:21 <elliott> pure x = TwoZ x x
18:35:22 <kallisti> http://www.textfiles.com/uploads/2001.txt I have no idea what this is but it says "Monad Hate Barrier"
18:35:23 <elliott> TwoZ f0 f1 <*> TwoZ x0 x1 = TwoZ (f0 x0) (f1 x1)
18:35:27 <kallisti> there are also 159 mentions of the word monad
18:35:51 <elliott> it's the numerical dictionary!
18:35:54 <elliott> this is amazing
18:36:12 <elliott> 2001.txt 349098
18:36:13 <elliott> Soren Greenwood's Conspiracy Theory to Explain all Other Conspiracy Theories (January 10, 2001)
18:36:47 <elliott> Sgeo: hth
18:37:33 <kallisti> elliott: wow I don't even know how to go about this...
18:37:40 <elliott> about what
18:37:45 <kallisti> about reading this thing.
18:38:04 <elliott> "*This* is Yammer's official position on the subject: our goal at Yammer is to revolutionize the way modern workers collaborate and we'll use whatever tools will allow us to iterate faster on that goal. If Scala is that tool, we'll use Scala; if Java is that tool, we'll use Java; if INTERCAL is that tool, we'll use INTERCAL. (We don't expect to have to use INTERCAL; don't worry.)"
18:38:09 <elliott> where's ais when you need him
18:38:14 <elliott> kallisti: from top to bottom, one presumes
18:39:49 <kallisti> as far as I can tell it's just putting together loose mental associations until everything becomes a conspiracy theory?
18:40:58 <kallisti> if I ever see "monad hate barrier" I know it has something to do with 151...
18:41:11 -!- derrik_ has joined.
18:41:15 -!- derrik_ has quit (Client Quit).
18:41:54 -!- derrik has quit (Ping timeout: 240 seconds).
18:45:22 -!- monqy has joined.
18:46:37 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
18:46:55 <kallisti> @let powerOfTwo n = length . nub $ filterM (const [True, False]) [1 .. abs n]
18:46:56 <lambdabot> Defined.
18:47:22 <kallisti> > map powerOfTwo [1..10]
18:47:24 <lambdabot> [2,4,8,16,32,64,128,256,512,1024]
18:47:34 <kallisti> elliott: behold, the most efficient way to compute powers of two.
18:48:21 <elliott> I like the abs.
18:48:35 <kallisti> it's essential.
18:49:17 <kallisti> > 2 ^ (-2)
18:49:18 <lambdabot> *Exception: Negative exponent
18:49:23 <kallisti> > 2 ** (-2)
18:49:24 <lambdabot> 0.25
18:49:31 <kallisti> > powerOfTwo -2
18:49:31 <lambdabot> Overlapping instances for GHC.Show.Show (a -> GHC.Types.Int)
18:49:31 <lambdabot> arising fro...
18:49:35 <kallisti> > powerOfTwo (-2)
18:49:37 <lambdabot> 4
18:49:40 <kallisti> SO ACCURATE
18:50:23 <kallisti> > powerOfTwo 0
18:50:24 <lambdabot> 1
18:51:51 <elliott> 07:09:19: <oerjan> apparently tunes also uses sidereal time.
18:51:55 <elliott> @tell oerjan WHAT DO YOU HAVE AGAINST GLOGBOT
18:51:55 <lambdabot> Consider it noted.
18:51:59 <elliott> *@ask oerjan WHAT DO YOU HAVE AGAINST GLOGBOT
18:52:01 <elliott> @ask oerjan WHAT DO YOU HAVE AGAINST GLOGBOT
18:52:01 <lambdabot> Consider it noted.
18:52:14 <kallisti> > let twoPower n = [recip, id] !! (fromEnum (n < 0)) . length . nub . filterM (const [True, False]) $ [1 .. abs n] in map twoPower [1..10]
18:52:15 <lambdabot> Precedence parsing error
18:52:15 <lambdabot> cannot mix `GHC.List.!!' [infixl 9] and `L..'...
18:52:27 <kallisti> > let twoPower n = ([recip, id] !! (fromEnum (n < 0))) . length . nub . filterM (const [True, False]) $ [1 .. abs n] in map twoPower [1..10]
18:52:27 <lambdabot> No instance for (GHC.Real.Fractional GHC.Types.Int)
18:52:28 <lambdabot> arising from a use o...
18:52:34 <kallisti> bah
18:52:54 <kallisti> > let twoPower n = ([recip, id] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in map twoPower [1..10]
18:52:56 <lambdabot> [0.5,0.25,0.125,6.25e-2,3.125e-2,1.5625e-2,7.8125e-3,3.90625e-3,1.953125e-3...
18:52:59 <kallisti> ...
18:53:11 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in map twoPower [1..10]
18:53:12 <lambdabot> [2.0,4.0,8.0,16.0,32.0,64.0,128.0,256.0,512.0,1024.0]
18:53:23 <kallisti> much better
18:53:42 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. n] in map twoPower [1..10]
18:53:43 <lambdabot> [2.0,4.0,8.0,16.0,32.0,64.0,128.0,256.0,512.0,1024.0]
18:53:44 -!- MSleep has joined.
18:53:46 <kallisti> erm... now even twice as good!
18:53:49 -!- MSleep has changed nick to MDude.
18:54:05 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in map twoPower -2
18:54:05 <lambdabot> Overlapping instances for GHC.Show.Show ([a] -> [a1])
18:54:06 <lambdabot> arising from a use...
18:54:10 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in twoPower -2
18:54:11 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a1)
18:54:11 <lambdabot> arising from a use of ...
18:54:13 <kallisti> jserjgiuweriuwehriuwheriuhdfiuhweruihweiuhweiruhweriuhwetiuweht
18:54:16 <olsner> too pointy, make it more pointless
18:54:18 -!- ais523 has joined.
18:54:24 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in (twoPower -2)
18:54:24 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a1)
18:54:24 <lambdabot> arising from a use of ...
18:54:27 <kallisti> olsner: I'm afraid
18:54:32 <kallisti> > let twoPower n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n] in twoPower (-2)
18:54:33 <lambdabot> 0.25
18:54:37 <kallisti> I swear I can program guys.
18:54:53 <kallisti> @pl (\n -> ([id,recip] !! (fromEnum (n < 0))) . genericLength . nub . filterM (const [True, False]) $ [1 .. abs n])
18:54:53 <lambdabot> ap ((. (genericLength . nub . filterM (const [True, False]))) . ([id, recip] !!) . fromEnum . (< 0)) (enumFromTo 1 . abs)
18:55:25 <ais523> doing a conditional by indexing a list? how Pythonic
18:55:44 <elliott> 07:29:57: <kallisti> pikhq_: I knew they were Christian based but not anti-gay
18:55:48 <elliott> kallisti: http://en.wikipedia.org/wiki/Chick-fil-A#Religious_and_political_views
18:55:56 <elliott> ais523: <elliott> "*This* is Yammer's official position on the subject: our goal at Yammer is to revolutionize the way modern workers collaborate and we'll use whatever tools will allow us to iterate faster on that goal. If Scala is that tool, we'll use Scala; if Java is that tool, we'll use Java; if INTERCAL is that tool, we'll use INTERCAL. (We don't expect to have to use INTERCAL; don't worry.)"
18:55:56 <elliott> <elliott> where's ais when you need him
18:56:20 -!- derrik has joined.
18:56:21 <ais523> elliott: I don't expect them to have to use INTERCAL either
18:56:38 <kallisti> ais523: I've used that idiom in several languages actually.
18:56:59 <ais523> kallisti: most languages have a perfectly usable ternary
18:57:07 <kallisti> NOPE LAME
18:57:14 <ais523> OCaml has if/then/else; I imagine the same works in Haskell
18:57:32 <kallisti> !perl print (("kill self", "stay alive")[int(rand(6)) > 0])
18:57:33 <Sgeo> >deriv powerOfTwo x
18:57:34 <EgoBot> stay alive
18:57:38 <Sgeo> > deriv powerOfTwo x
18:57:39 <lambdabot> Couldn't match expected type `Data.Number.Dif.Dif b'
18:57:39 <lambdabot> against inferr...
18:57:56 <kallisti> @undefine
18:58:08 <kallisti> @let powerOfTwo = ap ((. (genericLength . nub . filterM (const [True, False]))) . ([id, recip] !!) . fromEnum . (< 0)) (enumFromTo 1 . abs)
18:58:09 <lambdabot> Defined.
18:58:28 <kallisti> > deriv powerOfTwo (x :: Expr)
18:58:28 <lambdabot> No instance for (GHC.Enum.Enum
18:58:29 <lambdabot> (Data.Number.Dif.Dif Sim...
18:58:43 <kallisti> > deriv powerOfTwo 4
18:58:44 <lambdabot> No instance for (GHC.Enum.Enum (Data.Number.Dif.Dif a))
18:58:44 <lambdabot> arising from a u...
18:59:01 <kallisti> wow amazing
18:59:46 <kallisti> > length . filterM (const [True, False] $ replicate 4 0
18:59:47 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
18:59:52 <kallisti> > length . filterM (const [True, False]) $ replicate 4 0
18:59:53 <lambdabot> 16
19:01:10 -!- Phantom_Hoover has joined.
19:01:26 <kallisti> > let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing] in powerOfTwo 4
19:01:27 <lambdabot> <no location info>: parse error on input `]'
19:01:33 <kallisti> > let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing in powerOfTwo 4
19:01:34 <lambdabot> 16.0
19:01:38 <kallisti> > let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing in powerOfTwo -4
19:01:38 <lambdabot> Overlapping instances for GHC.Show.Show (GHC.Types.Int -> a)
19:01:39 <lambdabot> arising fro...
19:01:44 <kallisti> > let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing in powerOfTwo (-4)
19:01:46 <lambdabot> 6.25e-2
19:01:53 <kallisti> > 1/16
19:01:54 <lambdabot> 6.25e-2
19:01:56 <kallisti> ...okay.
19:02:08 <kallisti> @let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing
19:02:08 <lambdabot> <local>:2:0:
19:02:08 <lambdabot> Multiple declarations of `L.powerOfTwo'
19:02:09 <lambdabot> Declared at: ...
19:02:12 <kallisti> @undefine
19:02:13 <kallisti> @let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ replicate (abs n) Nothing
19:02:14 <lambdabot> Defined.
19:02:23 <kallisti> > deriv powerOfTwo (x :: Expr)
19:02:24 <lambdabot> Couldn't match expected type `Data.Number.Dif.Dif a'
19:02:24 <lambdabot> against inferr...
19:02:34 <kallisti> :t powerOfTwo
19:02:35 <lambdabot> forall a. (Fractional a) => Int -> a
19:02:49 <kallisti> bah
19:03:13 <elliott> :t abs
19:03:14 <lambdabot> forall a. (Num a) => a -> a
19:03:15 <kallisti> :t genericReplicate
19:03:16 <lambdabot> forall i a. (Integral i) => i -> a -> [a]
19:03:16 <elliott> :t repliate . abs
19:03:17 <lambdabot> Not in scope: `repliate'
19:03:49 <kallisti> @undefine
19:04:05 <kallisti> @let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ genericReplicate (abs n) Nothing
19:04:06 <lambdabot> Defined.
19:04:18 <kallisti> > deriv powerOfTwo (x :: Expr)
19:04:19 <lambdabot> No instance for (GHC.Real.Integral
19:04:19 <lambdabot> (Data.Number.Dif.Dif...
19:04:31 <kallisti> I'm shocked
19:04:47 <kallisti> @hoogle (Integral a, Num b) => a -> b
19:04:47 <lambdabot> Prelude fromIntegral :: (Integral a, Num b) => a -> b
19:04:48 <lambdabot> Prelude (^) :: (Num a, Integral b) => a -> b -> a
19:04:48 <lambdabot> Data.List genericIndex :: Integral a => [b] -> a -> b
19:05:10 <kallisti> @hoogle (Integral a, Num b) => b -> a
19:05:10 <lambdabot> Prelude ceiling :: (RealFrac a, Integral b) => a -> b
19:05:10 <lambdabot> Prelude floor :: (RealFrac a, Integral b) => a -> b
19:05:10 <lambdabot> Prelude round :: (RealFrac a, Integral b) => a -> b
19:05:24 <kallisti> yeah... no
19:05:31 <kallisti> > deriv powerOfTwo 5
19:05:32 <lambdabot> No instance for (GHC.Real.Integral (Data.Number.Dif.Dif a))
19:05:32 <lambdabot> arising from...
19:05:47 <kallisti> aww.
19:06:21 <kallisti> > round 5
19:06:21 <lambdabot> 5
19:06:30 <kallisti> :t round 5
19:06:30 <lambdabot> forall b. (Integral b) => b
19:06:34 <kallisti> .. -_-
19:07:07 <kallisti> @undefine
19:07:17 <kallisti> @let powerOfTwo n = ([id,recip] !! (fromEnum (n < 0))) . genericLength . filterM (const [True, False]) $ genericReplicate (abs . floor $ n) Nothing
19:07:18 <lambdabot> Defined.
19:07:22 <kallisti> > deriv powerOfTwo 5
19:07:24 <lambdabot> 0.0
19:07:38 <kallisti> > deriv powerOfTwo (x :: Expr) -- Expr is /totally/ a RealFrac
19:07:39 <lambdabot> No instance for (GHC.Real.RealFrac SimpleReflect.Expr)
19:07:39 <lambdabot> arising from a us...
19:07:42 <kallisti> :(
19:08:36 <elliott> it should be
19:08:57 <kallisti> @info RealFrac
19:08:57 <lambdabot> RealFrac
19:09:01 <kallisti> lambdabot: ah, thanks.
19:09:04 <elliott> > map (deriv powerOfTwo) [-5.5,-5..5]
19:09:06 <lambdabot> [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0....
19:09:19 <kallisti> elliott: I wonder where that's happening
19:09:50 <elliott> Your function isn't very... nice.
19:09:52 <kallisti> well calculating the length from replicate just gives you a bunch of 1 + 1 + 1 + 1 ...
19:09:53 <elliott> It has a conditional and all.
19:10:22 <kallisti> so that's probably why it's zero
19:12:38 <kallisti> elliott: what are you talking about this is definitely the best implementation of the base-2 real-except-actually-integer exponential function
19:14:08 <kallisti> > floor (5 :: Int)
19:14:09 <lambdabot> No instance for (GHC.Real.RealFrac GHC.Types.Int)
19:14:09 <lambdabot> arising from a use of ...
19:14:58 <kallisti> lame
19:20:58 <kallisti> > let multiply x y = genericLength . concatMap ((const .: genericReplicate) x Nothing) $ replicate y Nothing in multiply 2 5
19:20:59 <lambdabot> 10
19:22:13 <kallisti> > let multiply x y = genericLength . concatMap ((const .: genericReplicate) x undefined) $ replicate y undefined in multiply 2 5
19:22:14 <lambdabot> 10
19:22:45 <kallisti> fromIntegral = (`genericReplicate` undefined)
19:23:22 <kallisti> er... well
19:23:23 <kallisti> not quite
19:23:27 <kallisti> only works for positive numbers
19:24:04 -!- oerjan has joined.
19:24:53 <kallisti> (+) = (++); (*) = concatMap . const;
19:25:05 <kallisti> haven't quite figured out subtraction. this really only works for positive numbers.
19:25:06 <elliott> hi oerjan
19:25:21 <oerjan> kallisti: (*) = (>>) too, iirc
19:25:21 <lambdabot> oerjan: You have 2 new messages. '/msg lambdabot @messages' to read them.
19:25:54 <kallisti> > length $ replicate 4 undefined >> replicate 5 undefined
19:25:54 <lambdabot> 20
19:25:59 <kallisti> oerjan: ah, indeed.
19:26:08 <kallisti> this would make sense...
19:26:10 <kallisti> because uh...
19:26:17 <kallisti> (>>) = concatMap . const
19:26:36 <elliott> :t concatMap . const
19:26:37 <lambdabot> forall a b. [b] -> [a] -> [b]
19:26:37 <elliott> :t (>>)
19:26:38 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> m b -> m b
19:26:41 <elliott> not quite.
19:26:48 <kallisti> elliott: for lists... which is the context here.
19:26:51 <elliott> not quite.
19:26:55 <oerjan> and (^) = mapM . const
19:26:59 <oerjan> i think
19:27:02 <oerjan> :t mapM . const
19:27:03 <lambdabot> forall a (m :: * -> *) b. (Monad m) => m b -> [a] -> m [b]
19:27:20 <oerjan> oh hm no
19:27:38 <kallisti> oerjan: well for powers of two I've been using filterM to compute the power set.
19:27:46 <elliott> oerjan: concatMapM?
19:28:37 <kallisti> challenge: use this scheme to model negative numbers
19:28:59 <oerjan> :t mapM_ . const
19:29:00 <lambdabot> forall a (m :: * -> *) b. (Monad m) => m b -> [a] -> m ()
19:29:22 <oerjan> assuming you don't care about the element type
19:29:36 <kallisti> so far the element is undefined
19:29:39 <oerjan> > mapM_ (const [1,2,3]) [1,2]
19:29:40 <lambdabot> [(),(),(),(),(),(),(),(),()]
19:29:44 <kallisti> a bunch of undefined
19:30:06 <oerjan> looks good
19:30:06 <kallisti> so that the instance could be made for [a] instead of [()] or something
19:30:27 -!- Klisz has quit (Ping timeout: 244 seconds).
19:30:55 <kallisti> oerjan: I don't think this can work at all with negatives
19:30:58 <oerjan> hm
19:30:59 <kallisti> without drastic changes.
19:31:07 <elliott> you can construct them with the obvious tuple formation
19:31:09 <oerjan> kallisti: you'd think :P
19:31:11 <elliott> it may even be elegant
19:32:15 <kallisti> oerjan: oh, you missed the first part. fromIntegral = (`genericReplicate` undefined)
19:33:33 <kallisti> well Either [a] [a] could do negatives... but I don't think it would be very pretty.
19:34:05 <kallisti> also it suffers from negative zero
19:34:11 <oerjan> idea: let n = (replicate n undefined ++) and let -n = drop n
19:34:28 <kallisti> :t drop
19:34:29 <lambdabot> forall a. Int -> [a] -> [a]
19:34:36 <kallisti> length n yes
19:34:37 <elliott> kallisti: ([a],[a])
19:34:40 <elliott> (a,b) represents a-b
19:34:50 <kallisti> elliott: oh... nice.
19:34:51 <elliott> that's the same way you (usually) construct the rationals
19:35:02 <kallisti> :t genericDrop
19:35:03 <lambdabot> forall i a. (Integral i) => i -> [a] -> [a]
19:35:07 <elliott> it has the same problem of infinitely many ways to represent any one given number
19:35:15 <elliott> but reduction is easy
19:35:32 <kallisti> oerjan: unless we give it an integral instance. you'd want drop (length n)
19:35:50 <elliott> oerjan: pretty
19:35:55 <elliott> kallisti: that isn'tw hat he meant
19:35:59 <elliott> a = b means representation of a is b
19:36:14 <elliott> negate a = drop (length (a []))
19:36:22 <kallisti> oh nevermind I see...
19:36:23 <elliott> except that fails
19:36:27 <elliott> because it can't negate negatives
19:36:36 <elliott> oerjan: wouldn't
19:36:39 <elliott> \a -> (replicate n a ++)
19:36:40 <elliott> be better
19:36:42 <elliott> because then you could do like
19:36:46 <elliott> a False (repeat True)
19:36:51 <oerjan> kallisti: er i was giving the translation from Ints, really
19:36:56 <elliott> um hmm
19:37:00 <elliott> a 0 [1..]
19:37:01 <elliott> rather
19:37:07 <elliott> > (const (drop 10)) 0 [1..]
19:37:08 <lambdabot> [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35...
19:37:18 <elliott> > (\a -> (replicate 10 a ++)) 0 [1..]
19:37:20 <lambdabot> [0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,...
19:37:39 <elliott> (ofc that cheats by using Integer :P)
19:38:23 <oerjan> you figure out the details ;P
19:38:33 <elliott> oerjan: well yours _works_ fine.
19:39:00 * oerjan notes that yafgc updates aren't quite as regular as he's used to from his webcomics
19:39:18 <elliott> if null $ n [undefined] then head $ n LIST_OF_ALL_NATURALS_REPRESENTED_IN_THIS_WAY else drop . length $ n []
19:39:59 <oerjan> except for oots, which was awful of course
19:40:48 <Sgeo> I assume that you're referring to oots's update schedule, and not the content, when you call it "awful"
19:40:57 <oerjan> yes.
19:41:21 * kallisti wasn't aware that there was any reason to read anything other than homestuck.
19:41:54 <coppro> kallisti: what about #esoteric?
19:42:07 <kallisti> I don't actually read #esoteric
19:42:27 <ais523> elliott: I /still/ maintain my kallisti = Bjorn comparison
19:42:49 <elliott> but I wouldn't want to read a book about kallisti
19:42:58 <kallisti> ais523: I don't really get that comparison
19:43:06 <ais523> kallisti: you wouldn't
19:43:10 <ais523> nor would Bjorn
19:43:14 <kallisti> elliott: dude I'm super interesting.
19:43:25 -!- Klisz has joined.
19:43:27 <kallisti> a book about me would be amazing
19:43:27 <oerjan> elliott: regarding my anti-glogbot stance, i was actually using it at the time and somehow managed to think i was using tunes because insane timezones were involved
19:43:31 <kallisti> it would be the greatest work of literature.
19:43:35 <elliott> oerjan: lol
19:44:16 <Sgeo> There's already a book about me, at http://codu.org/logs/_esoteric/
19:44:30 <Sgeo> (Note: Jokes aside, I have not in fact told my entire life story here)
19:45:00 <oerjan> indeed, only the embarrassing parts
19:45:02 <elliott> oh no, there's /more/?
19:45:03 * oerjan runs away
19:45:20 <kallisti> > replicate (-5) undefined
19:45:21 <lambdabot> []
19:45:22 <kallisti> :(
19:45:48 <kallisti> lists should go negative-ways
19:45:54 <oerjan> > drop (-5) [1..]
19:45:55 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
19:46:15 <oerjan> kallisti: it actually works as replicate n undefined . drop (-n)
19:46:27 <oerjan> er
19:46:33 <oerjan> needs a ++ somewhere
19:46:46 <kallisti> hmm
19:47:08 <kallisti> ah okay.
19:47:17 <kallisti> but it's not particularly elegant is it?
19:47:23 <kallisti> the representation: yes. the code: no
19:47:34 <oerjan> feel free to create twosided infinite lists :P
19:47:53 <kallisti> that sounds awesome.
19:48:05 <kallisti> valid operation: flipItTurnWays
19:48:37 <oerjan> not WitherShins? (sp?)
19:48:54 <kallisti> no
19:48:59 <kallisti> that's not a joke I'm aware of
19:49:06 <kallisti> flipItTurnWays is much better.
19:49:29 <oerjan> oh well i misread that as TurnWise anyway
19:51:27 <kallisti> for two-way list things, toInteger = genericLength
19:51:41 <kallisti> as negative lengths would be possible.
19:56:57 <Sgeo> kallisti, go read some Discworld
20:11:24 <oerjan> <kallisti> I swear I can program guys. <-- NOOOO, don't program me!
20:14:15 <kallisti> > let x = dVar (var "oerjan") in deriv (\x -> x^2 + 2*x + 1) x
20:14:16 <lambdabot> 2+oerjan+oerjan~~
20:14:26 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
20:14:30 <kallisti> > let x = var "oerjan" in deriv (\x -> x^2 + 2*x + 1) x
20:14:31 <lambdabot> 2+oerjan+oerjan
20:14:33 <kallisti> my bad
20:14:43 <elliott> :t dVar
20:14:43 <lambdabot> forall a. (Num a) => a -> Dif a
20:14:50 <kallisti> elliott: I made a cool thing earlier
20:16:34 <kallisti> > let nDerivs f = genericLength . takeWhile (/=0) . iterate df . f $ dVar (x :: Expr) in nDerivs (^2)
20:16:36 <lambdabot> 3
20:17:18 <kallisti> > let nDerivs f = genericLength . takeWhile (/=0) . iterate df . f $ dVar (x :: Expr) in nDerivs sin
20:17:22 <lambdabot> mueval-core: Time limit exceeded
20:17:23 <kallisti> > let nDerivs f = genericLength . takeWhile (/=0) . iterate df . f $ dVar (x :: Expr) in nDerivs (const 4)
20:17:25 <lambdabot> 1
20:17:32 <elliott> Deewiant: Ping
20:18:34 <kallisti> actually just iterate df . f $ dVar x by itself is pretty cool.
20:18:38 <elliott> hey ais523, set tabstop=4
20:18:59 <ais523> elliott: 4 spaces = 1 indent, 1 tab = 2 indents?
20:19:06 <elliott> nope, 1 tab = 4 wide
20:19:11 <kallisti> > iterate df . (^2) $ dVar (x :: Expr)
20:19:13 <lambdabot> [x * x~~,1 * x + x * 1~~,1 * 1 + 1 * 1~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~~,0~...
20:19:20 <elliott> indentation I set separately with sw=4 (although this is a flaw of vim that it's set like this)
20:19:21 <ais523> elliott: that's just broken
20:19:28 <kallisti> > map val . iterate df . sin $ dVar (x :: Expr)
20:19:30 <lambdabot> [sin x,1 * cos x,1 * (1 * negate (sin x)),1 * (1 * (1 * negate (cos x))),1 ...
20:19:35 * elliott continues using his broken editor happily.
20:20:08 <ais523> why is it a flaw of vim that it can set tabs and indentations differently?
20:20:25 <ais523> most editors can do that, to read code in the common indent = 2 spaces, 4 indents = 1 tab format
20:20:33 <ais523> (I know it's common because I've seen it in quite a lot of third-party code)
20:20:42 <elliott> s/third-party/GNU/
20:20:45 <Sgeo> On Linux, should I use emacs from the console or is a more graphical emacs acceptable?
20:20:47 <elliott> 2-spaces is not common in C outside of GNU code
20:20:55 <elliott> it is used, but not very commonly
20:21:05 <elliott> Sgeo: If you use a graphical Emacs, weasels will peck at your face.
20:21:05 <kallisti> Sgeo: only legitimate hackers use nano on console.
20:21:10 <elliott> And we will consider you inferior.
20:21:14 <elliott> Weasels, that is.
20:21:19 <elliott> `quote GNU Tar
20:21:21 <HackEgo> 665) <shachaf> Real Tar is GNU tar. <shachaf> You just ignore whichever features don't make you feel superior enough.
20:22:43 <kallisti> @let nDerivs f = genericLength . takeWhile (/=0) . iterate df . f $ dVar (x :: Expr)
20:22:44 <lambdabot> Defined.
20:22:51 <ais523> elliott: I think 2-char-widths is the most common indentation I've seen for C
20:22:57 <ais523> whether via spaces or mixed space/tab
20:23:03 <ais523> although I see 4 from time to time
20:23:18 <ais523> and occasionally 8 when someone's used only tabs
20:23:24 <kallisti> 8 is horrid
20:23:49 <kallisti> elliott: clearly this is the most useful piece of Haskell code written, yes? (nDerivs)
20:24:02 <elliott> ais523: It's true that if you fudge the numbers with your unpopular opinions, then you can derive incorrect results, yes
20:24:28 <ais523> elliott: well, what width would you say code's using if it's indented only with tabs? serious question
20:24:52 <ais523> I think you either have to count it as 8, or ignore it altogether as if it's not 8, there's no information about what it's intended to be
20:24:58 <elliott> It's not, it's indentation-width agnostic. But what matters for statistics is whatever the majority of its authors uses.
20:25:15 <olsner> ooh, a tab-width discussion
20:25:20 <ais523> elliott: no, what the majority of its readers use
20:25:23 <elliott> olsner: no, i'm not giong to let it develop that far
20:25:36 <ais523> olsner: it's an indentation-width discussion, which is not quite the same thing
20:25:41 <kallisti> the width of a tab is the width of a tab.
20:25:47 <olsner> ais523: oh, ok
20:25:58 <elliott> actually, I'm ending it here since this is boring
20:25:59 -!- GreaseMonkey has joined.
20:26:06 -!- GreaseMonkey has quit (Changing host).
20:26:06 -!- GreaseMonkey has joined.
20:26:07 <olsner> the file can specify a tab width through a modeline, thereby indicating its indentation width even if it's all just tabs
20:26:25 <kallisti> > text "\t"
20:26:29 <ais523> olsner: I was thinking about that
20:26:32 <elliott> olsner: indeed (although the reader is of course not bound to it, it's just to make the developers' job easier)
20:26:35 <kallisti> > text " "
20:26:36 <ais523> but modelines are getting increasingly rare nowadays
20:26:42 <elliott> olsner: actually i think that shoudln't be used at all
20:26:47 <elliott> because it overrides each developer's individual preference
20:26:50 <ais523> and arguably, if a file is tab-indented, the modeline should say it's tab-indented but not the size of a tab
20:27:14 <kallisti> > text . fix $ (' ':)
20:27:27 <elliott> kallisti: text is strict
20:27:30 <lambdabot> thread killed
20:27:55 <ais523> bleh, I was looking for statistics but couldn't find them
20:28:13 <ais523> I wonder if mixed spaces/tabs, in C, is more common than pure tabs
20:28:17 <ais523> it must be quite close, I imagine
20:28:28 <Gregor> elliott, ais523: The IOCCC submission page has an "additional authors" option.
20:28:32 <Gregor> So, collab is A-OK.
20:28:33 <elliott> ais523: That term is ambiguous.
20:28:40 <ais523> elliott: right, just not public publishing
20:28:44 -!- zzo38 has joined.
20:28:52 <elliott> ais523: *Gregor:
20:28:59 <elliott> and nothing in the rules forbids public publishing
20:29:00 <ais523> err, right
20:29:06 <olsner> I think mixed spaces and tabs is the most universally disliked indentation
20:29:10 <elliott> Gregor: They have a page? I thought you were meant to use their tool to generate a file to mail.
20:29:19 <ais523> elliott: hmm, has it changed? there definitely /was/ a rule about using publicly published stuff in a previous year
20:29:25 <ais523> elliott: no, there's a submission form nowadys
20:29:25 <olsner> unless you're just mixing styles haphazardly all around
20:29:29 <elliott> olsner: it's an ambiguous term; I bet ais523 would label tabs-for-indentation, spaces-for-alignment under that
20:29:35 <elliott> olsner: but that's the /reasonable/ way to use tabs
20:29:46 <Gregor> elliott: They appear to have a page, although the page may ultimately just say "OK, give these options to the tool", I haven't gone through the whole process yet.
20:29:51 <elliott> and the only tab-based indentation scheme anyone's advocated for years
20:30:21 <ais523> elliott: actually, I was planning to count tabs-for-indentation, spaces-for-alignment as pure-tabs
20:31:04 <ais523> although there are problems, such as if you want comments to line up in a correctly indented version of f(); /* comment */ if(x) { g(); /* comment */ h(); }
20:31:54 -!- lambdabot has quit (Ping timeout: 240 seconds).
20:32:03 <ais523> bye lambdabot
20:32:17 <olsner> hmm, I generally dislike alignment
20:33:09 * kallisti likes alignment
20:33:14 * elliott generally doesn't align too, but only because text sucks
20:33:26 <kallisti> I'm pretty OCD about aligning things properly.
20:33:33 <elliott> I don't want to align multiple lines in ()s unless I can make the parentheses as large as the lines.
20:33:50 <elliott> kallisti: aligning things like assignments is usually Wrong, because you never want to look at it like a table
20:33:54 <elliott> I'm talking about things like e.g.
20:33:58 <elliott> int f(int x, int y, ...,
20:34:03 <elliott> int z, ...)
20:34:05 <elliott> for declarations
20:34:06 <ais523> we need a Unicode character for flexible indentation
20:34:28 <elliott> ais523: U+??? ELASTIC TABSTOP?
20:34:28 <ais523> elliott: yep, that's easy to align correctly
20:34:33 <kallisti> elliott: well I usually align assignments based on similarity of purpose...
20:34:38 <ais523> elliott: yes!
20:34:39 <elliott> *????
20:34:48 <kallisti> I just find it easier to read when they're aligned.
20:35:00 <elliott> ais523: the problem is that they aren't reducible to a character, I think
20:35:05 <elliott> or, hmm
20:35:06 <elliott> yes they are
20:35:33 <elliott> ais523: one problem with elastic tabstops is that they force some visual space
20:35:35 <elliott> so they can't do
20:35:37 <elliott> <elliott> int f(int x, int y, ...,
20:35:38 <elliott> <elliott> int z, ...)
20:35:54 <elliott> I'm tempted to say that tabstops beyond the start of a line should have no space after their previous column
20:36:02 <elliott> so you use two spaces before eacht abstop if you want to space inline comments out
20:37:46 <elliott> ais523: but anyway, the tab character works for elastic tabstops as used in code
20:38:01 <elliott> since alignment should never really be semantically meaningful there, like it would be for a table, it degrades gracefully
20:38:51 <ais523> elliott: the problem is that the viewer would need to recognise it
20:39:06 <elliott> ais523: nah; using elastic tabstops to view files with old-style tabs works fine too
20:39:06 <ais523> and I often view code in things that aren't intended specifically for the purpose
20:39:25 <elliott> tabs at the beginning of the line still work fine, which is 99% of them
20:39:31 <ais523> elliott: are you going to change the entire installbase of everything - browsers, email clients, IRC clients, etc - to interpret tabs as elastic?
20:39:38 <elliott> ais523: you don't have to?
20:39:44 <elliott> elastic tabstops gracefully degrade
20:39:59 <ais523> no they don't, they line up the things you're elasticating wrong except at the start of a line
20:40:12 <ais523> also, are too wide at the start of a line
20:40:33 <ais523> because believe it or not, the vast majority of software currently interprets tabs as 8 regardless of whether you think that's right or not
20:41:41 <elliott> ais523: (a) that doesn't matter much; being slightly uglier but still making sense is the /definition/ of graceful degradation (b) troll
20:42:24 <ais523> elliott: but what I mean is, the vast majority of software in existence has no reason to start interpreting tab as meaning something different
20:42:44 <ais523> if you added it as a new Unicode character, though, they'd start interpreting it correctly over time
20:42:53 <elliott> haha!
20:42:56 <elliott> no they wouldn't
20:43:03 <ais523> elliott: Unicode support has got better over time, has it not?
20:43:16 <elliott> elastic tabstops are algorithmically non-trivial
20:43:28 <ais523> oh no, kerio's just started up with the ssh fanboyism again
20:43:52 <elliott> and "programmers who have compilers fancy enough to do elastic tabstops" is very niche
20:45:23 <ais523> elliott: OTOH, the whole thing that drives development of most programs is what programmers want
20:45:33 <elliott> no it isn't
20:45:43 <ais523> well, hmm
20:45:46 <elliott> that's one of the falsest things you've ever said
20:45:50 <elliott> and that's saying something
20:45:51 <kallisti> counterexample: Windows
20:46:01 <kallisti> something no programmer wants
20:46:15 <ais523> elliott: hmm, I think I may be right if you don't allow for popularity
20:46:21 <ais523> most programs are written by programmers
20:46:37 <elliott> "most" over such a large, varied space without some kind of filtering is ridiculous
20:49:18 -!- elliott has quit (Remote host closed the connection).
20:49:54 -!- elliott has joined.
20:50:30 -!- derrik has quit (Quit: :)).
20:52:00 -!- lambdabot has joined.
20:53:00 * elliott finally blocks Flash.
20:53:43 <kallisti> but then...
20:53:48 <kallisti> HOW WILL YOUTUBE?
20:57:10 <olsner> through newfangles like html5 video, presumably
20:57:53 <Sgeo> YouTube doesn't support HTML5 for all videos, I think
20:58:09 <Sgeo> Also, there's a way to enable individual flash elements usually
20:58:21 <Sgeo> If I didn't think of that, I'd ask how elliott would Homestuck
21:01:26 <ais523> kallisti: I use a different browser for YouTube (and other video sites) than I do from everything else
21:01:32 <ais523> that's the simplest solution
21:01:56 <kallisti> ..
21:02:08 <kallisti> is having flash on by default really that big of a deal?
21:02:08 <ais523> there are others, of course
21:02:17 <ais523> (I also have a third browser, for accessing Google-related sites)
21:02:54 <oerjan> ais523 is clearly the reincarnation of rube goldberg
21:02:55 <GreaseMonkey> kallisti: well 99% of flash files are just for shitty ads
21:03:06 <kallisti> ah see I fix this by not having ads ever.
21:03:24 <GreaseMonkey> privoxy: making google chrome usable.
21:03:47 <ais523> oerjan: I also have a /fourth/ browser for accessing programming language documentation, but that's more about convenience than privacy
21:03:51 <ais523> also, IE6, for testing sites in IE6
21:06:18 <kallisti> I use this magical thing called adblock
21:09:04 <ais523> kallisti: it isn't magical; understanding it will make it better
21:09:11 <ais523> in particular, I use it to block quite a few things that aren't adverts
21:09:12 <shachaf> elliott
21:09:19 <ais523> it's a generic annoyance-blocker, for me
21:09:33 <ais523> for the web
21:10:31 <kallisti> ais523: how and this whole time I thought it was voodoo
21:10:35 <kallisti> s/how/wow/
21:10:51 <shachaf> `quote elliott
21:10:52 <HackEgo> 188) <fungot> elliott: i like scsh's mechanism best: it's most transparent and doesn't really serve a very useful feature. \ 191) <fungot> elliott: it's hard to debug havoc on your mirror if you accidentally hit r, then a character could be multiple words long, depending on the task. \ 200) <Gregor> elliott: My university has two Poultry Science buildings. <Gregor> Two! \ 209) <elliott> Vorpal loves the sodomy. <Vorpal>
21:11:09 <ais523> kallisti: it basically blocks images or elements by URLs or URL+rules for locating it on a page (ID, etc)
21:11:25 <oerjan> poor Gregor studying in such a fowl place
21:11:25 <ais523> but basically, you see something that annoys you (particularly an image), you just right-click on it and tell adblock to get rid of it
21:11:45 <oerjan> (what do you _mean_ i used that pun yesterday too?)
21:11:55 <ais523> oerjan: hmm, that indirectly reminds me of the day there was an enormous gas odoriser leak
21:12:05 <ais523> that caused a bit of chaos
21:13:08 * oerjan doesn't know what gas odoriser is, but imagines it's something you add to odorless poisonous gas in order to make it noticable
21:13:19 <oerjan> which would explain the chaos
21:13:32 <ais523> oerjan: not poisonous, it's added to methane
21:13:41 <ais523> because leaked methane is a huge fire risk
21:13:45 <oerjan> right, explosive would work too
21:14:48 <oerjan> *+e
21:16:06 <kallisti> ais523: ....WOW REALLY?
21:16:08 <kallisti> I HAD NO IDEA.
21:16:50 <kallisti> this whole time I have been using AdBlock and had no clue how it operates, or the features it sports.
21:17:14 <ais523> bleh, I'd love this all to be non-sarcastic, but I can't imagine it is
21:18:04 <oerjan> this whole time I have been thinking kallisti only spoke in literally truth
21:18:09 <kallisti> ais523: no I really am just as stupid as you think I am. :P
21:18:15 <oerjan> *-ly
21:19:34 <kallisti> oerjan: I was under the impression that every statement on IRC was truthfully spoken.
21:20:10 <oerjan> yeah me too
21:20:24 <oerjan> shocking, isn't it
21:21:22 <kallisti> I am don't know what think
21:21:44 <oerjan> and also everyone always use perfect grammar
21:21:44 <kallisti> "A new study in the Journal of Sexual Medicine said that men who put their penises in animals have a higher likelihood of penis cancer. "
21:21:49 <kallisti> interesting
21:22:17 <oerjan> but who were the control group
21:22:19 <ais523> kallisti: cause or effect?
21:22:39 <elliott> ais523: penis cancer increases the chance of bestiality, yes
21:22:47 <kallisti> ais523: are you suggesting that people who develop penis cancer -- yes
21:22:50 <kallisti> what elliott said
21:22:54 <ais523> elliott: that's not /obviously/ false, right?
21:23:17 <kallisti> "A member of a pro-zoophilia group told The Huffington Post by email that the results of the study should prompt people to take precautions, like using a condom, when having sex with animals."
21:23:21 <kallisti> loooool
21:23:25 <oerjan> ais523: clearly this must be a proper study so it was obviously double-blind with neither the subject nor the experimenter knowing whether what they were fucking was an animal
21:23:26 <elliott> X-D
21:23:38 <elliott> But it doesn't cure penis cancer if you do it that way!
21:23:51 <ais523> oerjan: hmm, what proportion of each group was female? I think I've noticed a potential skew in the statistics
21:24:14 <oerjan> surely this would have been noticed during peer review
21:24:22 <elliott> ais523: "men who"
21:24:28 <ais523> bleh
21:24:29 <elliott> oerjan: no no, neither the subject nor the experimenter knew whether they had penis cancer or not
21:24:42 <kallisti> "We think that the intense and long-term SWA [sex with animals] practice could produce micro-traumas in the human penile tissue. The genital mucus membranes of animals could have different characteristics from human genitalia, and the animals' secretions are probably different from human fluids.
21:24:48 <kallisti> Perhaps animal tissues are less soft than ours, and non-human secretions would be toxic for us."
21:25:00 <kallisti> pleasant imagery
21:25:00 <elliott> oerjan: unfortunately many of the experimentors later died of this, having not received treatment
21:25:16 <elliott> SWA practice
21:25:23 <elliott> just gotta go
21:25:24 <elliott> practice my SWAs
21:25:52 <elliott> "Perhaps animal tissues are less soft than ours" <-- this is false, see: toilet paper advets
21:25:53 <elliott> adverts
21:25:56 * Sgeo remembers reading about fruit flies, or something, and I forget the exact details, but the male's semen could become toxic to the females
21:26:01 <ais523> elliott: SWA?
21:26:07 <elliott> puppies and koalas have soft tissues too
21:26:08 * kallisti googled for: mucus membrane goat vagina chemicals
21:26:11 <elliott> ais523: <kallisti> "We think that the intense and long-term SWA [sex with animals] practice could produce micro-traumas in the human penile tissue. The genital mucus membranes of animals could have different characteristics from human genitalia, and the animals' secretions are probably different from human fluids.
21:26:17 <ais523> ah
21:26:29 <elliott> * Sgeo remembers reading about fruit flies, or something, and I forget the exact details, but the male's semen could become toxic to the females
21:26:36 <elliott> Sgeo googled for: xxx fruit fly 18 or over
21:26:47 <kallisti> elliott: ................
21:26:53 <kallisti> elliott: that was such a horrible joke.
21:27:00 <kallisti> in fact
21:27:01 <elliott> you're such a horrible joke
21:27:07 <ais523> fruit flies rarely live to 18
21:27:12 <kallisti> it crossed the so-horrible-it's-good coundary
21:27:13 <elliott> ais523: I was thinking of saying that
21:27:16 <kallisti> yes coundary
21:27:19 <oerjan> i recall that non-human mammals have barbed penises but this would be more a problem for bestial women, obviously
21:27:32 <ais523> elliott: I was actually going to make a joke along those lines earlier, but didn't have a good opportunity
21:27:35 <kallisti> oerjan: that's not a universal thing
21:27:38 <ais523> thanks for giving me one
21:27:44 <elliott> ais523: haha
21:27:49 <kallisti> oerjan: I know cats in particular have those.
21:27:59 <oerjan> kallisti: i vaguely thought nearly all mammals did
21:28:10 <ais523> whereas snails copulate by stabbing each other in the neck
21:28:46 <elliott> Also some humans.
21:28:50 <kallisti> oerjan: oh hmmm maybe
21:28:59 <elliott> hmm, snail bestality doesn't sound like fun
21:29:12 <kallisti> oerjan: I think it's common in mammals anyway
21:29:59 <ais523> gah, now I have a huge urge to reference the hedgehog song
21:30:05 <ais523> so I will, and see who catches the reference
21:30:21 <oerjan> ais523: i cannot be bothered at all?
21:30:50 <ais523> oerjan: hmm, the original was a bit more vulgar, but that's close enough
21:31:04 <kallisti> oerjan: apparently the lack of a certain gene removes barbed penises and results in larger brains? or something?
21:31:19 <elliott> ais523: was that the reference?
21:31:28 <ais523> (on another note, I love the way that the standard way to indicate that you get a reference is to make a different obscure reference to the same thing)
21:31:39 <oerjan> ais523: oh, i only know it from some discworld books where it may have been bowdlerized
21:31:44 <ais523> ah, right
21:32:07 <ais523> I'm referencing the discworld books too, but it almost certainly /was/ bowdlerized in your version
21:32:14 <ais523> as that seems more likely than antibowdlerizing it in mine
21:32:26 <elliott> oerjan: http://www.lspace.org/fandom/songs/hedgehogsong.html
21:32:36 <oerjan> _or_ i may simply have misrembered the words
21:32:43 <ais523> elliott: I take it you searched rather than having the link mesmerized?
21:32:58 <elliott> ais523: My brain actually stores everything in URL form.
21:33:02 <elliott> For instance that previous line was
21:33:13 <elliott> http://ais523.elliott.i.take.it/you/searched?rather=than&having=the#link,mesmerized
21:33:16 <ais523> bonus points if you give a link to the logs for that line?
21:33:19 <ais523> oh, boring
21:33:20 <elliott> I don't see what mesmerification has to do with it though.
21:33:30 <elliott> ais523: I never said they were /useful/ URLs
21:35:12 <ais523> now I'm wondering if that URL is valid, but don't want to click it just in case it is
21:35:15 <oerjan> kallisti: _or_ humans just improved on the bonobo culture by making it less painful
21:35:19 <ais523> take.it is almost certainly a valid domain
21:35:33 <elliott> it is
21:35:34 <elliott> it's a 404
21:35:35 <ais523> but that doesn't say much about what it does with subdomains it doesn't recognise
21:35:39 <elliott> 404 - Questa pagina non esiste o è stata rinominata
21:35:41 <ais523> 404 seems reasonable
21:35:47 <elliott> take.it is 403 :(
21:35:54 <ais523> who 403s their homepage?
21:35:58 <oerjan> *bonobo-style, we're not their descendants...
21:36:04 <ais523> (besides, how do you log in if the homepage is 403?)
21:36:14 <ais523> (and you aren't using HTTP auth?)
21:36:21 <elliott> ais523: log in to /what/?
21:36:28 <ais523> elliott: whatever causes it to stop 403ing
21:36:36 <elliott> nothing, one presumes
21:36:42 <ais523> most common 403 reason is lack of auth, isn't it?
21:36:47 <elliott> no
21:36:51 <ais523> and you don't 403 an important page like a homepage unless there's some way to view it
21:36:54 <elliott> most common 403 reason is someone put 403 there
21:36:58 <elliott> to stop people viewing it
21:37:03 <elliott> e.g. a subdirectory that isn't meant to be web-exposed
21:37:13 <ais523> yep, but that doesn't apply to the homepage itself
21:37:17 <elliott> like internal files for some web application that exists in the web root
21:38:01 <ais523> yep, but they're unlikely to be called index.html
21:38:10 <kallisti> elliott: URLS should be graph-based instead of strictly trees.
21:38:21 <kallisti> I don't even know what that means exactly.
21:38:58 <kallisti> ais523: yes that is exactly 1 possibility in a set of infinite possibilities
21:39:03 <kallisti> ais523: so not very likely
21:39:06 * kallisti good math
21:39:25 <elliott> ABSTRACTION IS HARD
21:39:44 <ais523> kallisti: if the probability really is 1/infinity, the likelihood can still be quite high
21:39:54 <oerjan> elliott: CONCRETE IS ALSO HARD
21:40:02 <ais523> (for likelihood, just think probability except that you multiply everything by infinity to get it back into non-infinitesimal units)
21:40:08 <ais523> (well, it's more complicated than that, but it always is, right?)
21:40:27 <kallisti> ..wat
21:40:47 <ais523> kallisti: ordinary probabilities add to 1, right?
21:40:48 <oerjan> ais523: elliott isn't asking you to kick me, i'm disappoint
21:40:51 <ais523> likelihoods integrate to 1
21:41:02 <kallisti> ais523: are you just making stuff up
21:41:02 <ais523> oerjan: I thought concrete was more tough than hard
21:41:05 <kallisti> or is that an actual thing.
21:41:05 <ais523> kallisti: no
21:41:14 <ais523> it's a perfectly plausible thing
21:41:18 <ais523> for, say, probability distributions
21:41:23 <ais523> which return reals
21:41:24 <kallisti> right but do people call them likelihoods
21:41:29 <ais523> the chance of getting any particular real is 0
21:41:30 <kallisti> or is just, a... continuous probability distribution.
21:41:45 <ais523> and that name is used for them sometimes; I've heard "probability density" too, but it's a boring name
21:42:30 <kallisti> right well it's meaningless to talk about the probability of a single real in a continuous distribution
21:43:02 <oklopol> unless the measure has atoms
21:43:23 <kallisti> s/atoms/discrete units/
21:43:42 <oklopol> well atom is the term usually used in ergodic theory
21:43:54 <oklopol> and probably measure theory
21:43:59 <kallisti> ...........
21:44:02 <kallisti> ergodic?
21:44:13 <oerjan> lebesgue space ftw
21:44:14 <elliott> kallisti: http://en.wikipedia.org/wiki/Likelihood_function
21:44:15 <kallisti> seriously you have to making that up. -googles- oh, no.
21:44:18 <oklopol> ...
21:44:32 -!- oklopol has changed nick to mathematician.
21:44:34 <elliott> [elliott@dinky ~]$ grep -r s2w .
21:44:35 <elliott> ./.bash_history:grep -r map_s2w .
21:44:35 <elliott> wrong directory
21:44:44 <mathematician> i hope this clears things up
21:44:58 -!- mathematician has changed nick to flyingdick.
21:45:10 <flyingdick> this is better thought
21:45:12 <flyingdick> *though
21:45:47 <ais523> f
21:46:43 <elliott> f
21:47:34 <ais523> flf
21:47:41 <kallisti> flyingdick: oh my, I didn't realize your credentials. Excuse me for thinking (read: joking about how) ergodic sounds like a made up thing.
21:47:43 <oerjan> f|f|f
21:47:55 <ais523> oerjan: haha at whatever font you're using
21:47:56 <oerjan> wait what
21:47:58 <ais523> unless that was deliberate
21:47:59 <flyingdick> you're lucky i didn't kick you out of here
21:48:01 <flyingdick> asshole
21:48:04 <flyingdick> that was just
21:48:06 <flyingdick> wrong
21:48:12 <oerjan> ais523: no i just need glasses, obviously
21:48:12 <elliott> hmm, why doesn't oklopol have op powers
21:48:13 -!- flyingdick has changed nick to oklopl.
21:48:14 <elliott> there's no way that could go badly
21:48:17 -!- oklopl has changed nick to oklopol.
21:48:21 <oklopol> sorry i was kind of a dick there
21:48:32 -!- elliott has changed nick to oklopl.
21:48:37 <oklopol> yeah i think i should have op powers
21:48:40 <oklopl> hi
21:48:44 -!- oklopl has changed nick to elliott.
21:48:50 <elliott> yeah but seriously though give oklopol op powers
21:48:51 <oklopol> i would kick everyone who doesn't blindly accept everything i say
21:49:05 <elliott> oerjan: /msg chanserv #esoteric op oklopol, thanks
21:49:08 <oklopol> especially if they're right
21:49:08 <kallisti> elliott just likes to find excuses to kick me indirectly.
21:49:15 <oklopol> why would he want to kick you
21:49:21 <kallisti> because that's.... what
21:49:24 <kallisti> is that even a question
21:49:37 <oklopol> yes
21:49:45 <kallisti> BECAUSE THIS IS WHAT ELLIOTT DOES.
21:49:46 -!- Klisz has quit (Read error: Connection reset by peer).
21:49:48 <kallisti> it's like an axiom.
21:49:57 <kallisti> like, if there were a typeclass called WantsKick
21:50:00 <elliott> kallisti is so paranoid
21:50:01 <kallisti> then it would be like
21:50:10 <kallisti> instance WantsKick Elliott Kallisti
21:50:13 <oerjan> elliott wants to kick us and hear the lamentations of our women, that just goes with the evil overlord thing
21:50:23 <elliott> you don't _have_ women.
21:50:30 <oerjan> details.
21:50:48 <oerjan> also some here do.
21:51:02 <oerjan> some here are actually _married_, unless they've been lying.
21:52:46 -!- Klisz has joined.
21:52:51 <kallisti> oerjan: I'd say the pairing graph for #esoteric is mostly edgeless.
21:53:56 <kallisti> In the area of graph theory in mathematics, a signed graph is a graph in which each edge has a positive or negative sign.
21:53:59 <kallisti> interesting
21:54:10 <oerjan> sign this graph, please
21:54:25 <kallisti> hmmm... but no zero edge?
21:54:40 <kallisti> MY GRAPHLANG HAS A ZERO SIGN
21:54:45 <kallisti> like... whatever the sign of zero is.
21:54:50 <kallisti> but in graph edge form.
21:55:07 <kallisti> past edge = -, present edge = 0, future edge = +
21:55:09 <kallisti> or something
21:55:31 <elliott> hmm, w2s can go eventually but we need it for now; s2w is used in multiple cases...
21:55:48 <elliott> but i don't really want _two_ functions to do the same thing
21:57:23 <kallisti> elliott: I thought the Haskell slogan was "there's more than one function to do it"
21:57:31 <elliott> not haskell
21:58:14 <oerjan> yeah haskell only has the bare minimum, like map, fmap, (.), liftA, liftM and (<$>).
21:58:26 <ais523> how is (.) like map/fmap?
21:58:38 <oerjan> ais523: (e ->) instance
21:58:41 <oerjan> :t (.)
21:58:41 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
21:58:51 <elliott> god bless caleskell
21:59:04 <kallisti> calemeriskell
21:59:45 <ais523> I thought (.) was function composition; is that a special case of a general definition?
21:59:53 <kallisti> Sgeo: updelskell
22:00:18 <Sgeo> kallisti, when have I ever trolled you about updates?
22:00:40 <kallisti> Sgeo: why would you confuse yourself with me?
22:00:44 <kallisti> clearly I am doing the trolling.
22:00:53 <kallisti> eiieojwoiiwoijwoijeoiwjow
22:00:55 <kallisti> :)
22:01:01 <Sgeo> I just wish I knew why you were doing it
22:01:18 <kallisti> Sgeo: it's because I love you. :3
22:01:20 <oerjan> ais523: that's cale's idea of letting lambdabot have generalized versions of standard functions
22:01:28 <oerjan> :t (++)
22:01:28 <lambdabot> forall m. (Monoid m) => m -> m -> m
22:01:32 <oerjan> :t flip
22:01:32 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
22:01:46 <kallisti> Sgeo: friendship troll
22:01:52 <ais523> oerjan: hmm
22:02:06 <ais523> ++ on Monoids disturbs me
22:02:12 <kallisti> wat
22:02:25 <elliott> (++) should obviously be generalised to monoids
22:02:26 <ais523> mostly because the monoid version of ++ is mostly just coincidence that append is the most appropriate operation on lists
22:02:35 <ais523> elliott: yes, agreed; I just disagree with ++ being the name for that
22:02:43 <kallisti> ...why
22:02:43 <elliott> ais523: then you disagree, and misread my statement
22:02:44 <oerjan> ais523: that's what it was like in haskell 1.4, i think, or maybe it was MonadPlus.
22:02:44 <kallisti> it's great.
22:02:52 <elliott> oerjan: it was MonadPlus
22:03:01 * elliott would rather remove (++) and make (<>) the monoid operation
22:03:06 <ais523> elliott: I'd be fine with that
22:03:23 <kallisti> ++ could be MonadPlus and <> could be Monoid
22:03:31 <elliott> ais523: really?
22:03:35 <elliott> ais523: (++) doesn't inherently mean append.
22:03:39 <elliott> it's just two symbols.
22:03:43 <ais523> hmm, perhaps
22:03:52 <elliott> kallisti: MonadPlus needs to go away
22:04:03 <ais523> OCaml uses @ for list append (and its operators aren't polymorphic), I was interesting that it had a one-char name for something that specific
22:04:09 <kallisti> elliott: I disagree, we should have two more of them, and two more Monoids
22:04:16 <elliott> although I guess it's nice to have with MonadZero, which is nice because you don't need a constraint per a
22:04:34 <elliott> ais523: you was interesting?
22:04:38 <kallisti> elliott: also n-parameter monoids, for monoids with two type parameters and more.
22:04:44 <ais523> elliott: interested
22:04:53 <ais523> also, *you were interesting?
22:05:02 <elliott> no, you was definitely interesting
22:05:05 <ais523> grammar transformations of bad grammar has rules!
22:05:44 <kallisti> grammar of bad grammar
22:07:30 <elliott> ais523: *have
22:08:06 <ais523> elliott: yep, I Muphried myself somewhat there
22:08:15 <ais523> which is strange, as I mostly don't get caught in Muphry's Law
22:08:21 <kallisti> :)
22:09:06 <elliott> oh, youtube redesigned
22:09:09 <elliott> everything's so different
22:09:15 <kallisti> `? monoid
22:09:17 <HackEgo> Monoids are just categories with a single object.
22:09:20 <elliott> ais523: oh, oops, i was trying to make it incorrect
22:09:49 <kallisti> elliott: they've... Facebookitized it.
22:09:54 <elliott> what
22:09:55 <ais523> elliott: what, /again/?
22:10:17 <kallisti> elliott: they're using a similar layout to what facebookuses
22:10:24 <elliott> chrome users: is chrome adblock or adblock plus for chrome better?
22:10:28 <elliott> and can either block youtube video ads?
22:10:44 <kallisti> I believe adblock plus can
22:10:55 <kallisti> I dunno anything about chrome adblock
22:10:57 <kallisti> but adblock plus works fine.
22:11:04 <elliott> it's just called "adblock"
22:11:04 <kallisti> I sometimes forget the internet has ads.
22:11:15 <elliott> it's more popular than adblock plus, though probably only because it's older
22:11:31 <elliott> ofc adblock plus is the most popular extension for any browser
22:11:35 <kallisti> elliott: oh wait...
22:11:36 <elliott> but the codebase is different for chrome, so :P
22:11:40 <kallisti> elliott: no I'm using Adblock apparently
22:11:54 <elliott> kallisti: right. not the same thing, it rides on having a similar name to the unrelated Firefox extension...
22:12:02 <elliott> Adblock Plus is the official port
22:12:07 <kallisti> ah
22:12:25 <kallisti> I wonder which is better.
22:12:32 <elliott> that's what I just wondered.
22:13:29 -!- Ngevd has joined.
22:14:02 <elliott> oh hmm
22:14:04 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
22:14:07 <Ngevd> I never did figure out where to put that patch
22:14:10 <elliott> looks like adblock plus uses the same filtering engine as the firefox version's
22:14:12 <elliott> Ngevd: what patch
22:14:19 <Ngevd> For Dungeons of Drednor
22:14:47 <Ngevd> s/dno/dmo/
22:15:15 <kallisti> elliott: reviews for Adblock Plus seem to suggest that it is better
22:15:16 <kallisti> imagine that.
22:15:22 <elliott> howso
22:15:37 <elliott> "Sorry, but i thinks it works fine. I have NO adds on any site. and it is still much faster than addblock! adblock (that without plus) slows down every webpage i visit. ABP ist still "the same" like adthwart (only the laughing devil i miss :) )" ;; this person seems too stupid to trust
22:15:39 -!- boily has quit (Quit: WeeChat 0.3.6).
22:16:12 <elliott> meh, it seems better
22:16:13 * elliott installs
22:16:16 <kallisti> lol
22:16:27 <kallisti> elliott: it's a good thing you consulted an expert opinion
22:16:33 <kallisti> better against the adds
22:16:57 <elliott> "Block ads inside YouTube videos" yay
22:17:27 -!- Jafet has quit (Quit: Leaving.).
22:18:00 <kallisti> they both more or less use the same filters.
22:18:08 <kallisti> though Adblock seems to have more foreign language filters in the checklist
22:18:15 <oklopol> CHAINSAW EVERYONE AND CHAINSAW EVERYTHING
22:18:25 <elliott> oklopol: i agree, someone op oklopol
22:18:26 <elliott> oerjan: op oklopol
22:18:29 <elliott> ais523: op oklopol
22:18:58 <oklopol> well really i deserve ops, i've been here longer than anyone else
22:19:00 <ais523> elliott: just because someone's stupid doesn't mean they're wrong
22:19:32 <elliott> ais523: very true, but they don't seem articulate enough about their technical experience to have judged it correctly
22:19:48 <ais523> yep, so if they're right, it's by chance
22:19:51 <elliott> and "Sorry, but i thinks it works fine." seems to imply it's a reaction to a negative review, which makes me trust it less
22:21:17 <elliott> olsner: You use vim, right
22:21:24 <olsner> elliott: I do indeed
22:21:41 <ais523> olsner: do you move with vikeys or numpad?
22:21:43 <elliott> olsner: What indentation style do you use
22:21:51 <elliott> ais523: vim does numpad?
22:22:04 <elliott> oh, numpad has arrow keys without numlock
22:22:06 <olsner> ais523: usually arrow keys :>
22:22:08 <elliott> you can't go diagonally though
22:22:15 <ais523> elliott: the discussion came up in #nethack recently, and someone said they used numpad for vim but vikeys for nethack
22:22:31 <elliott> haha
22:22:35 <elliott> joking, surely?
22:22:39 <elliott> olsner: <elliott> olsner: What indentation style do you use
22:22:53 <ais523> elliott: I don't think so
22:23:08 <kallisti> elliott: I use tabs as though there spaces.
22:23:10 <elliott> ais523: what was kerio ssh-fanboying about, btw?
22:23:14 <kallisti> so usually 8 tabs per indent
22:23:18 <olsner> let's see... sw=4 ts=4 sts=4 noet cinoptions={0,:0,t0,g0,^0,e0,n0,p2s,(2s,f0 cinkeys=0{,0},0),:,0#,!^F,o,O,e
22:23:25 <elliott> olsner: no, that was a non-vim question :)
22:23:30 <olsner> I guess that's the relevant part of my vimrc for indentation style
22:23:43 <kallisti> help vim scares me.
22:23:46 <kallisti> vim scares me more than emacs.
22:23:50 <ais523> I actually know at least one person, probably more, who's a casual vim fanboy (think offhand Emacs-bashing and using vim at every opportunity) yet spends their time moving around with the arrows in insert mode
22:24:11 <ais523> elliott: and asking if there was an ssh port for the amiga, when the topic came up about how good it was at playing nethack
22:24:19 <elliott> ais523: I can yell at them for you, if you'd like
22:24:30 <ais523> topic's changed, unfortunately
22:24:34 <ais523> you could yell at him on general principles
22:24:35 <elliott> I meant
22:24:35 <elliott> <ais523> I actually know at least one person, probably more, who's a casual vim fanboy (think offhand Emacs-bashing and using vim at every opportunity) yet spends their time moving around with the arrows in insert mode
22:24:40 <ais523> oh
22:24:42 <ais523> that's real-life knowing
22:24:47 <ais523> so you'd have to come to Birmingham
22:24:48 <elliott> oh
22:24:49 <elliott> my condolences
22:24:53 <kallisti> ais523: I do quite a bit of arrow-moving in Emacs when I probably could avoid it sometimes.
22:24:56 * elliott adds to "list of reasons to avoid birmingham"
22:25:03 <ais523> elliott: heh
22:25:05 -!- Phantom_Hoover has joined.
22:25:29 <ais523> the person I have in mind is my other boss (I have two part-time jobs, he's the boss for half the teaching one rather than Dan who's the boss for the other half + the PhD)
22:25:35 -!- pikhq has joined.
22:25:52 -!- pikhq_ has quit (Read error: Operation timed out).
22:26:02 -!- Ngevd has quit (Quit: dredmor time).
22:26:24 <ais523> hmm, is Dredmor good enough that I should buy it, I wonder? opinions of the channel?
22:26:26 <ais523> and how much time is left?
22:26:44 <kallisti> elliott: oh and google has once again changed
22:26:55 <olsner> elliott: I never learned what the style is called
22:26:59 <elliott> ais523: I haven't played it yet, but have you played any introversion games?
22:27:03 <olsner> but the one with braces on their own lines and unindented, tab indented, tabs at 4 spaces (obv. works fine for other tab widths...)
22:27:08 <ais523> I'm not sure; probably not
22:27:15 <elliott> olsner: Any alignment?
22:27:17 <ais523> unless I've played one without mentally noting the developer, which is possible
22:27:17 <elliott> ais523: Buy it
22:27:18 <kallisti> olsner: gross
22:27:29 <olsner> elliott: no, I just indent continuations by one or two indents
22:27:35 <kallisti> olsner: I prefer the open brace on the same line as the statement
22:27:41 <elliott> ais523: Uplink is amazing, Darwinia is meant to be even more amazing but I haven't played it yet, DEFCON is cool
22:27:48 <oklopol> ais523: DID YOU SEND A PAPER TO STACS
22:27:56 <ais523> oklopol: I don't think so
22:27:58 <elliott> ais523: 5 days are left
22:28:12 -!- oerjan has quit (Quit: Good night).
22:28:20 <oklopol> do you know stacs? i suppose it might be for more theoretical stuff than yours
22:28:31 <ais523> elliott: gah, they sent me an email in Markdown, that's almost enough to boycott them
22:28:33 <ais523> oklopol: I don't
22:28:44 <elliott> ais523: err, Markdown was intended to be suitable for emails
22:28:48 -!- Patashu has joined.
22:29:03 <elliott> ais523: but who did?
22:29:08 <ais523> elliott: Humble Bundle
22:29:15 <kallisti> elliott: it would be cool if df allowed you to have more control over how your soldiers fight
22:29:16 <ais523> and () around URLs is just so ugly
22:29:19 * elliott receives those as HTML mail
22:29:22 <kallisti> elliott: maybe with like... scripts.
22:29:27 <elliott> ais523: that's why you use the alternate link syntax
22:29:30 <kallisti> simple declarative scripts
22:29:35 <ais523> elliott: that one was using []()
22:29:36 <olsner> elliott: have I answered your question now? :)
22:29:39 <kallisti> that you can turn on and off. like "fighting styles"
22:29:43 <ais523> is /that/ enough of a reason to hate the email?
22:29:44 <elliott> olsner: yes, unfortuantely it means you're useless
22:29:51 <elliott> ais523: no
22:30:23 <olsner> oh noes! he said I'm useless
22:31:00 <oklopol> olsner you know you alright.
22:31:04 <kallisti> useless sounds fun when you pronounce the use as though it were the verb use
22:31:13 <kallisti> yooze instead of yoose.
22:31:30 <oklopol> also different emphasis
22:31:41 -!- Klisz has quit (Ping timeout: 248 seconds).
22:31:44 <elliott> wait, I know!
22:31:48 -!- Klisz has joined.
22:31:53 <ais523> gah, seems that Amazon is memorizing my credit card number too
22:32:04 <olsner> elliott: what use did you hope to have of me?
22:32:06 <ais523> in /addition/ to running no security checks on the card number
22:32:09 <oklopol> well isn't that nice, you don't have to give it to them every time
22:32:12 <kallisti> ais523: it just /really/ wants everything to be convenient for you doesn't it?
22:32:20 <ais523> err, debit card
22:32:28 <elliott> olsner: if you used tabs-for-indentation-spaces-for-alignment and vim
22:32:45 <ais523> kallisti: it's reasonable from Amazon's point of view, but not from the bank's
22:32:50 <kallisti> elliott: I use all-spaces, out of habit from my Python days.
22:33:03 <kallisti> ais523: fuck the bank. :P
22:33:05 <elliott> kallisti: you also don't use vim afaik
22:33:16 <kallisti> elliott: what makes vim important here?
22:33:18 <olsner> I think I've only seen alignmentism together with fundamentalist spaceism
22:33:29 <elliott> kallisti: you don't know
22:33:42 <kallisti> elliott: wow you have amazing deduction skills.
22:35:19 <olsner> oh well, I believe it has become DS9 time again
22:35:25 <kallisti> olsner: is "alignmentism" kind of like "being really OCD about aligning things"?
22:35:28 <kallisti> because I'm that.
22:35:59 <kallisti> I might switch to tabs though. it makes more sense to me.
22:36:15 <kallisti> tab-indents with spaces for alignment
22:36:16 <olsner> kallisti: something like that yes
22:36:40 <ais523> elliott: I'm also considering boycotting Introversion for making every single image on their webpage set a cookie
22:37:25 <kallisti> ais523: oh no, not cookies
22:37:43 <ais523> kallisti: there is no reason to set a cookie in more than one image from the same domain in a page
22:37:57 <ais523> and it aggravates people who approve/disapprove all cookies manually
22:38:02 <kallisti> I too am really concerned about this common nearly unavoidable feature of modern websites.
22:38:12 <kallisti> ais523: maybe you shouldn't do that. that sounds terrible.
22:38:14 <ais523> kallisti: cookies can be useful, when they have a reason to exist
22:38:28 <kallisti> like, basically every webpage starts with you clicking a bunch of dialogs right?
22:38:34 <ais523> the only sensible use of setting a cookie in an image that I've seen is Wikimedia's cross-site logon thing, though
22:38:42 <ais523> kallisti: far from every, maybe about 5-10%
22:38:53 <ais523> most of them are well-designed cookie-wise, and only require a couple of allow/deny
22:39:14 <ais523> quite a lot of sites set two cookies then modify one; I think it's some sort of anti-bot mechanism
22:40:23 <ais523> elliott: hmm, Uplink's premise seems very mindlessly destructive
22:40:33 <ais523> all the Introversion advertising just implies to me "this is not the sort of game ais523 would enjoy"
22:40:47 * elliott has never once looked at the advertising.
22:41:07 * kallisti has adblock installed in his brain.
22:41:32 <kallisti> if I go to the mall, then the people trying to advertise stores just disappear when they start talking to me.
22:41:46 <Sgeo> I'd say only 99% is mindless destruction
22:41:52 <kallisti> (note: I don't actually go to the mall, but it's happened before)
22:42:01 <elliott> ais523: anyway, Darwinia is one of the best-reviewed games I've ever heard of, if that means anything
22:42:07 <ais523> hmm
22:42:07 <kallisti> ais523: best game ever is magicka
22:42:14 <ais523> I suppose I'd prefer to trust reviewers I trust
22:42:20 <Sgeo> elliott, is it safe to say that 1% of Uplink is NOT mindless destruction?
22:42:29 <ais523> I bought Advance Wars based entirely on the recommendation of Teletext's computer game review column
22:42:35 <ais523> and then went and bought all its sequels
22:42:37 <kallisti> magicka is 100% careful deliberate mindless destruction
22:42:40 <elliott> Uplink would be hard to play if you just mindlessly destroyed thinsg.
22:42:47 <elliott> Generally people who want files stolen don't want you just to trash a machine.
22:42:58 <Sgeo> elliott, I'm in particular referring to plot
22:43:01 <Phantom_Hoover> <Sgeo> elliott, is it safe to say that 1% of Uplink is NOT mindless destruction?
22:43:20 <elliott> Sgeo: Umm, not the Arunmor storyline?
22:43:22 <kallisti> Phantom_Hoover is typing.
22:43:25 <Phantom_Hoover> It's more than possible to go through the game having never deleted anything, although I think the story does require it.
22:43:31 <Sgeo> elliott, I was referring to that in particular
22:43:38 <elliott> "Half the plot" = 1% of the game
22:44:05 <Phantom_Hoover> ISTR that the Arunmor storyline requires at least one destructive attack.
22:44:13 <kallisti> elliott: didn't you know that plot is only like 2% of a game?
22:44:34 <Sgeo> ais523, there you go. Half the plot, minus a bit, is not mindless destruction
22:44:55 <ais523> haha
22:45:03 <kallisti> magicka is probably better than uplink
22:45:09 <elliott> ais523: anyway, even if the /idea/ is mindless destruction, the gameplay isn't
22:45:10 <kallisti> I base this on my extensive knowlege of uplink
22:45:12 <kallisti> (not really)
22:45:16 <Phantom_Hoover> Oh, wait, no it doesn't.
22:46:02 <Phantom_Hoover> It requires that you destroy Arunmor's ISM as a false flag operation, but that's hardly mindless destruction.
22:46:13 <kallisti> GAH SPOILERS EVERYTHING IS RUINED
22:46:41 <elliott> Honestly, hardly any of Uplink is mindless destruction.
22:46:59 <elliott> It's not like even Andromeda hire you to FUCK SHIT UP.
22:47:38 <Phantom_Hoover> Yeah they do, they just think the shit is pernicious.
22:48:45 <Phantom_Hoover> ais523, anyway, Darwinia is extremely good.
22:49:05 <Sgeo> I can't even seem to get started with Darwinia
22:49:15 * Sgeo sucks at Darwinia. Can barely do the tutorial
22:49:28 <Phantom_Hoover> You can't make it through Garden?
22:49:31 <Phantom_Hoover> Seriously?
22:49:48 <Phantom_Hoover> The level which consists of "create squad, right click until virii are gone."
22:50:10 <kallisti> Sgeo: don't ever play starcraft.
22:51:51 <Sgeo> The virii keep killing my squad
22:52:12 <Sgeo> It took a while before I worked out that I needed to make a squad
22:52:22 * Sgeo is easily amused by the Darwinia intros
22:52:28 <Phantom_Hoover> Sgeo, did you know that there are these things called ranged attacks.
22:52:46 <Phantom_Hoover> You can use them to pick the virii off before they get near enough to damage your squad.
22:53:42 <ais523> Phantom_Hoover: real-time strategy?
22:53:57 <Phantom_Hoover> It's kind of a mixture, I suppose.
22:54:19 <Phantom_Hoover> Darwinian control is RTS, but I still haven't reached the point where that's meant to come in.
22:54:28 <kallisti> I think I just came up with the worst game idea ever: Mario Party MMO
22:54:53 <Phantom_Hoover> Otherwise, it's kind of a top-down shooter thing?
22:55:33 * Sgeo decides that playing Darwinia windowed is not feasible
22:56:52 <ais523> Phantom_Hoover: a mixture with which?
22:57:10 <ais523> kallisti: there's a game mode in Pokémon HeartGold/SoulSilver which is pretty much exactly that
22:57:11 <Sgeo> Yay wireless headphones
22:57:14 <ais523> but with Pokémon instead
22:57:15 <Phantom_Hoover> Top-down shooter thing.
22:57:29 <Phantom_Hoover> Sgeo, I managed fine.
22:57:50 <Phantom_Hoover> ais523, you directly control squads by left clicking on destinations and right clicking to fire.
22:58:22 <ais523> hmm, like an RTS except requiring more micromanagement
22:58:27 <Phantom_Hoover> You control Darwinians by promoting one of them to an officer, and controlling that through a similar method to a squad, except all the commands tell the Darwinians where to go.
22:58:51 <Phantom_Hoover> Not really; it's designed so you only use one squad at a time.
22:59:16 <Phantom_Hoover> They have autofire, but it's basically useless.
22:59:41 <ais523> bleh, my TV Tropes links-clicked-per-page rate is now sufficiently below 1 that I can never stay there very long
23:00:18 <Phantom_Hoover> ais523, probably the best way to see what the gameplay's like is just to play the first level, which is short and extremely easy if you're not Sgeo.
23:00:27 * Phantom_Hoover → sleep
23:00:27 <coppro> ais523: which mode is the mario party mmo?
23:00:28 -!- Phantom_Hoover has quit (Quit: Leaving).
23:00:31 <ais523> but that'd mean downloading and installign and running the game
23:00:40 <elliott> olsner: is there a way to stop vim from creating the .swp files
23:00:44 <ais523> coppro: oh, I've forgotten what it's called, but it has Poké Floats in it
23:00:47 <elliott> i keep getting OMG SWAP FILE when i open a vim
23:00:54 <kallisti> ais523: that's pretty much exactly how starcraft works. left click to move right click to fire.
23:01:13 <coppro> ais523: that's a smash bros stage
23:01:36 <ais523> coppro: I know, it's based on the Pokémon game mode (all smash bros stages but final destination are references to /something/)
23:02:11 <kallisti> Hanenbow I don't think is a reference to anything in the Nintendo universe.
23:02:19 <kallisti> but it's kind of a special stage.
23:02:28 <kallisti> also, just to nitpick, Battlefield isn't based on anything.
23:03:14 <kallisti> oh nevermind
23:03:22 <kallisti> Hanenbow (pronounced Hay-nin-bow) is a new unlockable stage in Super Smash Bros. Brawl. It comes from a music-themed Nintendo DS game, which features extensive interactivity with the microphone; called Electroplankton.
23:03:38 <ais523> coppro: found it: Wi-fi Plaza
23:03:48 <ais523> http://bulbapedia.bulbagarden.net/wiki/Wi-Fi_Plaza
23:05:03 <elliott> hmm, I hate booleans
23:05:22 <ais523> elliott: use Maybe () instead?
23:05:39 <kallisti> elliott: use const and flip const instead.
23:05:40 <elliott> heh
23:05:43 <kallisti> much better.
23:05:46 <elliott> those are just church booleans!
23:05:50 <kallisti> EVEN BETTER
23:07:14 <ais523> elliott: OK, use 1 and 2 then, and make it arbitrary which is true and which is false depending on what you want to use them for
23:07:26 <ais523> </intercal>
23:07:30 <elliott> these are all just different representations of booleans ;P
23:07:31 <elliott> *:P
23:07:48 <ais523> elliott: OK, then, use 01XLHWU-
23:08:00 <ais523> hmm, I've probably forgotten a possible value there
23:08:02 <kallisti> elliott: use Maybe Bool instead
23:08:02 <elliott> "The ulimit -v command can be used with ASan-ified binaries. However, you should remember that ASan consumes 16 terabytes of virtual memory for shadow state and the ulimit -v value should be set accordingly."
23:08:13 <kallisti> elliott: three-value logic ftw
23:08:26 <kallisti> elliott: or use integers for many-valued logic!!!
23:08:29 <ais523> kallisti: VHDL std_logic beats three-value logic out the water
23:08:45 <ais523> it models error conditions for booleans as well as the usual values 0 and 1
23:08:54 <ais523> oh, and Z
23:08:58 <ais523> 01XLHWZU-
23:08:59 <ais523> there we go
23:09:01 <ais523> nine-valued booleans
23:09:05 <kallisti> ais523: also unknown
23:09:12 <elliott> that's U, one presumes
23:09:41 <ais523> not quite; U means unknown state at power on, - means a value that's being disregarded (i.e. don't know and don't care)
23:09:52 <ais523> either is a reasonable description of unknown
23:11:11 <MDude> Are any of them mu?
23:11:18 <elliott> mu is a !boolean
23:11:34 <kallisti> elliott: if you solve the halting problem you can just use terminate and non-terminate
23:11:48 <elliott> that's another representation of a boolean!
23:11:55 <MDude> Well yes, it's not boolean, that's why it's included~
23:12:03 <kallisti> elliott: I'm not sure I understand what you want to replace booleans with then.
23:12:04 <MDude> Or should be.
23:12:04 <ais523> MDude: nope, the problem with mu is that it unasks the question, and the hardware equivalent would be sending electrons in the other direction
23:12:16 <ais523> except that typically, electrons flow one way for true and the other way for false
23:12:29 <elliott> ais523: ONLY TYPICALLY!!!
23:12:40 <elliott> kallisti: I never even said I wanted to, I just said I hate booleans
23:13:42 <MDude> I thought mu was more just "your question is stupid presumes something that is wrong".
23:13:51 -!- Klisz has quit (Quit: You are now graced with my absence.).
23:13:56 <elliott> your grammar is stupid presumes something that is wrong :D
23:14:00 <ais523> <NetHackWiki> The most important thing to remember is: Don't Panic. Or at least, panic at your leisure.
23:14:06 * Sgeo remembers a post on Less Wrong
23:14:46 -!- Klisz has joined.
23:14:52 <kallisti> elliott: dude I just figured out natural language
23:15:00 <kallisti> so basically you use a clever evaluation strategy.
23:15:16 <kallisti> for example: "your mom" evaluates to the value "your mom"
23:15:28 <kallisti> which can then be composed with other expressions
23:15:40 <elliott> hmm, this is annoying
23:15:54 <Sgeo> http://lesswrong.com/lw/po/three_dialogues_on_identity/
23:16:02 <elliott> ais523: quick, should I worry about a duplicate hashtable lookup?
23:16:22 <kallisti> elliott: nah it's still O(1)
23:16:25 <ais523> elliott: if you're not using a cryptosecure hash, yes
23:16:32 <kallisti> (:P)
23:16:35 <ais523> you're going to get collisions in practice
23:16:45 <elliott> ais523: err, wait, what?
23:16:47 <ais523> it's OK to use an inefficient resolution mechanism unless you have a very small hashtable, though
23:17:01 <ais523> elliott: I don't think anyone uses cryptohashes for hash tables
23:17:07 <elliott> ...
23:17:10 <ais523> but, you never know, with enough memory/disk space you /could/
23:17:33 -!- sebbu has quit (Ping timeout: 248 seconds).
23:17:36 <elliott> ais523: are you sure you haven't misread my statement?
23:17:36 <ais523> and for something like git/sg's stores by hash, it makes sense
23:17:39 <ais523> elliott: no
23:17:46 <elliott> ais523: try looking at it again
23:17:58 <ais523> I'm having difficulty parsing "duplicate hashtable lookup"
23:18:23 <elliott> aka two identical hashtable lookups to do one operation
23:20:41 <elliott> oh dear, I killed the wrong chromium proecss
23:22:44 <ais523> it can recover, right?
23:22:57 <elliott> no, it was the root one
23:23:50 <ais523> elliott: if Firefox gets accidentally killed, even the whole thing, it can go back to the point it was at upon restart
23:24:02 <ais523> often with a confirmation in case one of the pages crashes it again
23:24:05 <elliott> so can chrome
23:24:17 <ais523> yep, that's what I was referring to, I'd be shocked if Chrome couldn't
23:27:10 -!- sebbu has joined.
23:27:10 -!- sebbu has quit (Changing host).
23:27:11 -!- sebbu has joined.
23:28:20 <elliott> ais523: pls reassure me that hashtable lookups are fast
23:28:34 <ais523> elliott: they're almost as fast as array lookups on modern processors
23:29:29 <elliott> ais523: but that's one, two, three, four, five -- five array lookups in total!! five duplicated array lookups!
23:30:10 <ais523> elliott: wow, I wouldn't have expected /you/ to reference Sesame Street
23:30:35 <pikhq> Was that even aired in the UK?
23:30:38 <ais523> (which was recentishly in the news because someone hacked their YouTube channel to show hardcore porn)
23:30:41 <ais523> pikhq: indeed, on Channel 4
23:30:51 * elliott wasn't doing it intentionally, but I think there was some kind of ... subconscious resonant recognition before he hit enter.
23:31:07 <elliott> I was actually counting them out.
23:31:19 <elliott> pikhq: doesn't sesame street air /everywhere/? (also, "was"?)
23:31:39 <ais523> elliott: I'm not sure if it still airs nowadays in the UK
23:31:42 <ais523> admittedly, I haven't checked for years
23:32:44 <pikhq> elliott: Eh, could be. I'm not in the habit of monitoring where children's programming is aired.
23:33:19 <elliott> /* relies on implementation-defined arithmetic shift behaviour */
23:33:20 <elliott> I like how I leave comments for things like this but gleefully name new types foo_t
23:35:34 <elliott> bool world_handle_chunk(jint x0, jint y0, jint z0, jint xs, jint ys, jint zs, struct buffer zb, struct buffer zb_meta, struct buffer zb_light_blocks, struct buffer zb_light_sky, bool update_map);
23:35:40 <elliott> I can't help but feel this function needs a few more parameters.
23:36:34 <pikhq> bool world_handle_chunk(struct world_handle_chunk_args); There you go.
23:36:34 <elliott> wait, why is it never called with the last parameter set to false...
23:36:45 <elliott> pikhq: that's fewer!
23:37:18 <pikhq> And then you can call it with world_handle_chunk((struct world_handle_chunk_args){ ... })
23:37:30 <pikhq> (pointless unless you want a lot of things to be 0, of course)
23:43:29 -!- MSleep has joined.
23:45:49 -!- ais523 has quit (Ping timeout: 248 seconds).
23:46:53 -!- MDude has quit (Ping timeout: 248 seconds).
2011-12-02
00:03:06 -!- MDude has joined.
00:06:37 -!- MSleep has quit (Ping timeout: 248 seconds).
00:18:27 -!- pumpkin has joined.
00:20:29 -!- pumpkin has changed nick to copumpkin_.
00:21:10 -!- copumpkin has quit (Ping timeout: 252 seconds).
00:21:15 -!- copumpkin_ has changed nick to copumpkin.
00:31:41 -!- azaq23 has quit (Ping timeout: 248 seconds).
00:39:19 * elliott sends an email that pikhq will see without sending an email to pikhq.
00:42:17 <zzo38> Is it a public mailing list?
00:44:27 <pikhq> Yup.
00:44:34 <pikhq> I saw said email.
00:48:49 -!- azaq23 has joined.
00:48:57 -!- azaq23 has quit (Max SendQ exceeded).
00:49:30 -!- azaq23 has joined.
00:53:32 -!- pikhq_ has joined.
00:53:37 -!- pikhq has quit (Ping timeout: 252 seconds).
00:59:54 <elliott> pikhq_: ENJOY HAVING YOUR EYEBALLS ACCOSTED WITH WORDS
01:01:19 <elliott> kallisti: How do I run a subcommand in Perl safely, without running into shell interpolation problems
01:23:52 -!- azaq23 has quit (Quit: Leaving.).
01:26:34 <elliott> Wow, someone asked to become admin on the wiki who ISN'T Timwi :P
01:52:57 <elliott> Vorpal: wow, skyrim depends on steam even when bought in-store?
01:54:51 <pikhq_> Huh. I thought Valve was the only group that pulled that.
01:54:58 <pikhq_> s/group/company/
02:23:44 <pikhq_> http://memegenerator.net/cache/instances/400x/11/11536/11813483.jpg XD (translit: "hajimemasite"tte? NIHONGO JŌZU translat: "Nice to meet you"? *You're good at Japanese!*)
02:30:50 -!- allanpes12 has joined.
02:31:01 -!- allanpes12 has quit (Client Quit).
02:34:20 -!- hagb4rd has joined.
02:34:53 -!- pikhq_ has quit (Quit: Reconnecting).
02:34:59 -!- pikhq has joined.
02:41:41 -!- Gregor has quit (Ping timeout: 260 seconds).
03:31:25 -!- esowiki has joined.
03:31:25 -!- glogbot has joined.
03:31:26 -!- HackEgo has joined.
03:31:28 -!- EgoBot has joined.
03:31:29 -!- esowiki has joined.
03:31:30 -!- esowiki has joined.
03:31:38 -!- Gregor has joined.
03:31:51 <elliott> @tell Gregor Makes me kinda nervous that glogbackup parts before glogbot joins.
03:31:52 <lambdabot> Consider it noted.
03:32:51 <Gregor> elliott: glogbackup parts once glogbot joins #glogbot, which is the first one it joins.
03:32:51 <lambdabot> Gregor: You have 1 new message. '/msg lambdabot @messages' to read it.
03:33:12 <elliott> Gregor: OK, but people could still talk before glogbot rejoins every channel :P
03:33:13 <Gregor> @messages
03:33:14 <lambdabot> elliott said 1m 22s ago: Makes me kinda nervous that glogbackup parts before glogbot joins.
03:33:21 <Gregor> elliott: Fair 'nuff *shrugs*
03:34:41 <elliott> "Let's call the flag -Ewarn, by analogy with -Werror."
03:35:25 <Gregor> Uhhhh, is this some imaginary flag that converts /errors/ into /warnings/ (a concept which doesn't even make sense)?
03:36:09 <pikhq> It also solves the halting problem and summons bacon.
03:36:35 <elliott> Gregor: Yes. A flag that is actually being implemented in GHC :P
03:36:45 <elliott> More specifically, it turns certain kinds of type errors into warnings + runtime errors.
03:36:49 <elliott> For debugging.
03:37:15 <elliott> I don't think that quote was even a joke, and it was by one of the Simons (I forget which by now), so it might even be called that :P
03:38:59 <Gregor> Ah, I see.
03:39:06 <Gregor> I just assumed GCC due to the "by analogy to -Werror"
03:39:15 <Gregor> It makes more sense in many other contexts.
03:39:26 <elliott> GHC nabs gcc's -Wall, -W and -Werror.
03:39:28 <Gregor> The only errors there are in C are "I have no clue how to compile this shit, dude"
03:39:39 <elliott> Except -Wall means "a lot of warnings" and -W means "literally every warning"
03:40:11 <elliott> Similarly it copies gcc's -On options, where -O0 does nothing, -O does most optimisations, and -O2 slows compilation down massively and doesn't help in the majority of cases.
03:40:15 <elliott> So... they shifted the numbers a bit :P
03:40:21 <elliott> Gregor: Not QUITE.
03:40:34 <elliott> Gregor: You could feasibly bypass C's type checker.
03:40:43 <zzo38> Gregor: Possibly other errors are possible in C as well, such as lack of address space for declared variables
03:41:11 <elliott> zzo38: Sounds like "I have no clue how to compile this" to me :P
03:41:16 <Gregor> elliott: But virtually any case where the type checker fails, it fails because it doesn't know how to compile it.
03:41:28 <zzo38> elliott: OK, maybe that is what it is, then.
03:41:42 <elliott> Gregor: Not really? Pointer casting, f'rinstance.
03:41:50 <elliott> Which is a looooooot of errors in C prorgams.
03:41:58 <elliott> Well, at least a fair amount :P
03:42:07 <elliott> Are there even any other type errors??
03:42:46 <Gregor> I know of no pointer cast that would give you an error (as opposed to a warning) in default GCC. I suppose int x; int y; y = *x; wouldn't compile, but it also doesn't have enough information to.
03:42:59 <elliott> Cast x to (int *) :P
03:43:06 <Gregor> Then there's no error.
03:43:19 <pikhq> Then it "merely" hits UB.
03:43:33 <elliott> Gregor: I mean automatically.
03:43:48 <pikhq> *groan*
03:43:56 <elliott> Gregor: The machine has no notion of a pointer type, soooo :P
03:44:09 <Gregor> elliott: But how do you know it wanted an /int/ * as opposed to a /char/ * or a /wtf/ *? That's the "doesn't know how to compile it" part.
03:44:22 <elliott> Gregor: Because y is an int.
03:44:24 <elliott> Duh.
03:44:29 <elliott> It's like you're not even trying!
03:44:34 <Gregor> Heh, fair 'nuff.
03:44:38 <pikhq> Perhaps you want (int*)(char*) though?
03:44:44 <Gregor> But that's not so much bypassing the type checker as doing nonsense type inference :P
03:44:50 <elliott> pikhq: Well fuck you, you're compiling an invalid program, be happy it works :P
03:44:55 <elliott> FSVO work
03:45:10 <elliott> Gregor: Now I want a list of gcc's errors...
03:45:18 <Gregor> :P
03:45:22 <zzo38> I think in C, it ought to be error to use something that isn't a pointer where a pointer is required unless you have an explicit cast (possibly with some exceptions if it would help to do so)
03:45:40 <pikhq> zzo38: In C, it is.
03:45:50 <Gregor> pikhq: Mmmmm, not quite.
03:46:01 <pikhq> Well, I think except for confusing circumstances.
03:46:03 <Gregor> pikhq: int a(int *x); void foo() { a(42); }
03:46:04 <zzo38> pikhq: In GCC it is usually a warning but not an error when I do that
03:46:16 <pikhq> Most notably, I *think* using an integer literal as a pointer is a warning.
03:46:20 <elliott> Dear C: WHY DON'T YOU HAVE LAMBDAS
03:46:24 <Gregor> pikhq: 'tis, 'tis.
03:46:29 <elliott> #define TRANSFORM_RGB(expr) \
03:46:29 <elliott> do { \
03:46:29 <elliott> uint8_t x; \
03:46:29 <elliott> x = rgba.r; rgba.r = (expr); \
03:46:29 <elliott> x = rgba.g; rgba.g = (expr); \
03:46:30 <elliott> x = rgba.b; rgba.b = (expr); \
03:46:31 <elliott> } while (0)
03:46:33 <elliott> I WANT TO REPLACE THIS HORRIBLE THING
03:46:48 <Gregor> pikhq: But dereferencing an integer literal is a no-go as it doesn't know the pointer type.
03:46:57 <pikhq> elliott: https://github.com/pikhq/clambda-demo/blob/master/lambda.h
03:47:07 <elliott> Gregor: See, B just only had words.
03:47:09 <elliott> So there was no problem.
03:47:14 <elliott> You'd read a word, obviously.
03:47:22 <Gregor> :)
03:47:29 <elliott> B: better than C?
03:47:33 <zzo38> It is due to the C preprocessor having a few thing missing. Some things I made in Enhanced CWEB allow you to add your own compile-time codes
03:47:53 <elliott> pikhq: I can't tell you how INTENSELY willing I am to use this.
03:47:57 <elliott> It's giong into mcmap RIGHT NOW.
03:48:00 <elliott> *going
03:48:09 <zzo38> There is another programming language BLISS which has far more powerful macro capability and record types than C
03:48:22 <elliott> pikhq: What happened to town, btw (GITHUB STALKING IS BEST)
03:48:38 <pikhq> elliott: I didn't do much with it?
03:48:47 <elliott> Bah :P
03:48:51 <pikhq> I've spent the past few months basically doing fuck-all on github. :P
03:49:39 <elliott> pikhq: And it mixes tabs and spaces too :'(
03:52:15 -!- MDude has quit (Ping timeout: 248 seconds).
03:53:46 <zzo38> The STRUCTURE command in BLISS allows you to do a lot of things; the structure can contain arbitrary commands (it does not have to contain only field declarations)
04:03:33 <zzo38> OWN X; LITERAL MARK = 4; MACRO M = MARK + %UNQUOTE MARK %; BEGIN LITERAL MARK = 5; X = M; END What will the value of X be in this program? It will be 9
04:07:44 <Gregor> int *a = alloca(sizeof(*a)); /* this works, but feels so wrong */
04:08:36 -!- kmc has quit (Quit: Leaving).
04:09:10 <pikhq> Sure 'nough.
04:09:31 <elliott> Gregor: Which part of it
04:09:32 <pikhq> It also involves like 20 preprocessor directives to use it "portably".
04:16:50 <Gregor> elliott: The fact that that the definition of a refers to a :P
04:17:02 <elliott> Gregor: Uhh, but that's a standard idiom with malloc...
04:17:11 <elliott> To avoid repeating yourself in case you e.g. change a's type.
04:17:32 <Gregor> Oh? I don't think I've seen that ... usually I've seen type a = malloc(sizeof(type));
04:17:38 <Gregor> Err, type *a of course
04:17:46 <elliott> Gregor: ...type *a?
04:17:55 <elliott> Oh, right.
04:18:05 <elliott> Gregor: Yeah, that's more common, but *a is fairly common too.
04:18:12 <Gregor> Hm *shrugs*
04:18:26 * elliott usually embds type because he finds refactoring the expression to be a more compelling example than retyping a variable.
04:18:30 <Gregor> Long story short, I'm at 2037 code bytes :P
04:18:41 <elliott> Of course I'd prefer to be able to just omit the "type " on the LHS :P
04:18:46 <elliott> Bring back auto, dudes!
04:18:54 <elliott> C++ did it!
04:19:10 <elliott> Gregor: For what this time?
04:19:30 <Gregor> elliott: ... same as always?
04:19:47 <elliott> Gregor: Well, OK, you talked about doing something else at one point though :P
04:20:53 <Gregor> I considered it, couldn't think of a way to make it truly obtuse that wasn't also lame.
04:21:52 <Gregor> ALTHOUGH WE COULD DO A COLLAB
04:23:43 <elliott> Gregor: You mean the MIDI thing?
04:24:21 <Gregor> Yuh
04:24:44 <elliott> Gregor: I dunno, I don't think it'd have to be very obfuscated if it produced something nice-sounding given untweaked input...
04:25:15 <elliott> But "nice" is relative, I'm sure the demoscene could synthesise semi-realistic piano and strings within IOCCC limits :P
04:25:15 <Gregor> Exactly.
04:25:41 <Gregor> That was the issue, I couldn't think of a way to make it obtuse.
04:25:50 <pikhq> elliott: ... If they don't already.
04:25:57 <Gregor> Also, piano: Sure. Pianos are easy. Strings: lolno.
04:25:57 <elliott> Gregor: Are we using different definitions of obtuse?
04:26:13 <elliott> I don't think obtuseness really matters if the result is impressive... the golfing makes code pretty hard to read to start with :P
04:26:18 <elliott> Strings was facetious.
04:27:19 <Gregor> Idonno, I just don't feel like the result would be very obfuscated.
04:27:32 <Gregor> Nor do I think it would be sufficiently impressive, though maybe it would be.
04:28:44 <elliott> I was thinking maybe a MOD player instead... those sound better, but that loses the synthesis element, and I dunno if the effects stuff that MOD players has are hard enough to implement that it'd be impressive :P
04:29:34 <Gregor> Hmmmmmmmmmmmm
04:29:38 <Gregor> Idonno much about MOD.
04:29:57 <Sgeo> http://www.scp-wiki.net/clef101
04:30:52 <elliott> Gregor: All I know is it has samples and channels of notes :P
04:31:39 <elliott> Sgeo: six paragraphs in and this is the worst writing ever
04:31:51 <elliott> seven paragraphs and it's worse
04:32:03 <elliott> wow this is bad i'm not going to read it any more
04:32:34 <Gregor> elliott: That's all I know toooooo 8-D
04:32:37 <Sgeo> http://scp-wiki.wikidot.com/skybluesky
04:33:42 <zzo38> Is there any MML compiler to MOD?
04:34:15 <elliott> Gregor: So there's at least hacky resampling involved (in case /dev/audio doesn't have the right Hz), modifying the tone of samples, and I think applying various effects to a sample.
04:41:18 <Gregor> Hmmers.
04:44:23 <tswett> Accessing memory-mapped files is just as efficient as accessing ordinary memory, as long as I don't do anything that actually requires disk access. Right?
04:47:02 <elliott> tswett: Are you asking whether mmap() caches?
04:47:08 <elliott> Because, yes, your OS has disk caches.
04:47:21 <tswett> Excellent.
04:47:32 * tswett replaces malloc with mmap. Save all the things.
04:47:45 <elliott> tswett: malloc is implemented with mmap for large enough allocations in all common libcs.
04:47:48 <elliott> Something like >4k.
04:48:10 <tswett> Huh, neat.
04:48:24 <shachaf> @where #haskell
04:48:24 <lambdabot> Right here, silly!
04:48:27 <shachaf> Did you know?
04:48:48 <elliott> @where #esoteric
04:48:49 <lambdabot> I know nothing about #esoteric.
04:48:52 <elliott> @where+ #esoteric Right here, silly!
04:48:53 <lambdabot> It is stored.
04:54:27 -!- Jafet has joined.
04:57:47 <Sgeo> http://www.scp-wiki.net/scp-1025
04:58:02 <Sgeo> elliott, read that completely, don't stop reading just because
04:58:19 <elliott> But I like stop reading just because!
05:01:52 <elliott> Sgeo: OK that was amusing.
05:26:41 <elliott> @tell kallisti By the way, (const undefined) is also strict, but doesn't evaluate its argument.
05:26:41 <lambdabot> Consider it noted.
05:27:01 <elliott> @tell kallisti Proof: const undefined _|_ = undefined = _|_.
05:27:02 <lambdabot> Consider it noted.
05:32:36 -!- jix has quit (Ping timeout: 240 seconds).
05:33:18 -!- jix has joined.
05:34:36 -!- Zuu has quit (Read error: Connection reset by peer).
05:39:29 -!- Zuu has joined.
05:53:57 -!- GreaseMonkey has quit (Quit: The Other Game).
06:29:47 <elliott> @ping
06:29:48 <lambdabot> pong
06:32:02 <elliott> took you a while
06:35:21 -!- elliott has quit (Quit: Leaving).
06:35:25 -!- elliott_ has joined.
06:38:29 <zzo38> What is the way to select a $2n$ by $2n$ matrix of booleans such that there is exactly $n$ true in each row and in each column, from all possible ones, uniformly?
06:40:43 <elliott_> It's impossible.
06:41:07 <elliott_> (Note: I am lying.)
06:45:52 -!- tytythetyty has joined.
06:45:59 <monqy> hi
06:46:50 <tytythetyty> hi
06:47:48 <tytythetyty> i am having trouble with stochastic cellular automata, and i stumbled across this link (http://www.conwaylife.com/forums/viewtopic.php?f=3&t=398) do you guys talk about that in here??
06:48:21 <elliott_> sure
06:48:27 <zzo38> Ask the question; they sometimes talk about various things in here and possibly someone knows
06:48:38 <elliott_> oh, ##gameoflife, heh
06:48:42 <elliott_> that channel lasted uh... a few days
06:48:51 <tytythetyty> lol sad
06:48:58 <elliott_> Phantom_Hoover is still a regular here though
06:49:06 <elliott_> I can't say we get CA talk very often but when we do it tends to be lively
06:49:18 <elliott_> although it's quiet hours right now
06:49:25 <tytythetyty> my question is to design two different stochastic cellular automata:
06:49:36 <tytythetyty> 1. Design a 1D stochastic cellular automata that uses on rules involving two adjacent cells at at time that (with high probability) do the following tasks:
06:49:40 <tytythetyty> a. If the majority of cells are initially 0, the final state is all zeros. If the majority of cells is initial 1, the final state is 1.
06:49:45 <tytythetyty> b. Starting with all cells at 0, reach a final state in which one cell is a 1 and the rest are 2.
06:50:11 <elliott_> hmm, cool
06:50:17 <elliott_> this isn't homework, is it? :p
06:50:32 <tytythetyty> ABSOLUTELY NOT :P
06:51:11 <elliott_> oklopol works in CA, although you may find his answers rather unwantedly vague for a question he considers too trivial :P
06:51:37 <elliott_> and I don't think he's here right now
06:51:45 <tytythetyty> lol, that is typically the case for IRC channels
06:52:10 <elliott_> not us! we're helpful and cuddly and nice. well... occasionally
06:52:19 <tytythetyty> haha nice
06:52:30 <tytythetyty> do you have any idea on this??
06:52:47 <elliott_> not personally, but there are like three people off the top of my head who might be able to help who aren't here right now :P
06:52:55 <tytythetyty> sux
06:53:31 <elliott_> ask monqy; you probably won't get an answer but the non-answer might be entertaining
06:53:43 <tytythetyty> lol kk
06:53:57 <tytythetyty> wouldn't he just see this?? how should i ask??
06:54:06 <elliott_> smoke signals
06:54:20 <elliott_> he responds by sending "hi"s in morse code
06:55:06 <tytythetyty> I SUMMON THY MONQY
06:55:08 <tytythetyty> .... .. .... .. .... ..
06:55:25 <monqy> hi
06:55:27 <Jafet> @google majority problem
06:55:29 <lambdabot> http://en.wikipedia.org/wiki/Majority_problem_(cellular_automaton)
06:55:29 <lambdabot> Title: Majority problem (cellular automaton) - Wikipedia, the free encyclopedia
06:56:47 <monqy> I don't know enough about cellular automata
06:57:24 <tytythetyty> me neither :P
06:59:53 <zzo38> Do you know how I could figure out the answer to my question?
07:01:01 <monqy> ask someone who knows and is willing and able to answer appropriately
07:02:08 <tytythetyty> lol
07:02:16 -!- DCliche has quit (Quit: You are now graced with my absence.).
07:08:52 <Sgeo> elliott_, update
07:44:25 <zzo38> I think I might have figured out what contramonads and contracomonads is supposed to be: contrareturn :: (a -> m ()) -> m a; contrajoin :: m (m a) -> m (a -> m ()); contraextract :: w a -> a -> w (); contraduplicate :: w (a -> w ()) -> w (w a); I don't know how good this is, though. Maybe I made a few mistakes?
08:10:31 <olsner> elliott_: yes, there's a setting for it
08:12:34 <olsner> elliott_: :help swapfile
08:35:26 <Sgeo> http://www.scp-wiki.net/sandrewswann-s-proposal
08:36:08 <zzo38> Does "But your thoughts are nothing except hallucination!" have anything to do with "greedy reductionism"?
08:39:51 -!- monqy has quit (Quit: hello).
08:47:49 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
08:53:59 <Slereah> I wonder what research on cellular automatons look like
08:54:17 <Slereah> How much is math and how much is just trying stuff on it
08:59:51 -!- zzo38 has quit (Remote host closed the connection).
09:28:08 <kallisti> elliott_: hi
09:28:09 <lambdabot> kallisti: You have 2 new messages. '/msg lambdabot @messages' to read them.
09:28:14 <kallisti> qx'blah blah blah'
09:30:46 <kallisti> elliott_: is how you prevent Perl from interpolating in a shell command
09:31:06 <kallisti> if you're using system or whatever else you would just pass a single quoted string obviously.
09:33:35 <kallisti> > (const undefined undefined) `seq` "hi"
09:33:38 <lambdabot> "*Exception: Prelude.undefined
09:36:22 <kallisti> elliott_: similarly, using single quotes as a delimiter for any other interpolating quoke-like operator (except for qq, which always interpolates) will turn off interpolation
09:37:29 <oklopol> Slereah: there is a lot of bullshit being done with cellular automata, which is why we're not taken very seriously
09:37:42 <kallisti> s'blah'blah', m'blah', qr'blah'
09:37:51 <kallisti> ...I... don't remember if qw interpolations.
09:38:16 <kallisti> !perl my ($x,$y,$z) = 1..3; print qw($x $y $z)
09:38:19 <EgoBot> ​$x$y$z
09:38:21 <Jafet> oklopol: clearly you should work for a prestigious research group like Wolfram
09:38:22 <kallisti> nope
09:38:36 <oklopol> :D
09:38:54 <Jafet> I hear they get great press coverage
09:39:01 <kallisti> !print ?bahahahahaha?
09:39:22 <kallisti> !print $_="hi"; print ?hi?
09:39:32 <kallisti> !print $_="hi"; print /hi/
09:39:35 <oklopol> actually wolfram invented one of the most important concepts of CA on which i too work every day
09:39:37 <oklopol> the limit set
09:39:43 <oklopol> well he didn't actually define it
09:39:48 <oklopol> because he's a retard
09:40:04 <oklopol> but still, he had quite an influence there
09:40:42 <oklopol> or maybe he actually gave a definition, but you know for the sake of this story.
09:40:59 <oklopol> at least he doesn't have any actual results
09:41:39 <oklopol> Slereah: anyhow, searching for counterexamples is, as in any branch of math, rather ad hoc
09:42:54 <oklopol> otherwise, we use measure theory, compactness arguments, symbolic dynamics and ergodic theory on a daily basis. but any sort of deep results are needed rarely.
09:43:40 <oklopol> just the basic theory
09:44:54 <oklopol> for instance, i've needed a point whose ergodic fibre is the uniform bernoulli measure a few times when studying the besicovitch space, such a point is not that easy to construct, but it follows from ergodic theory that pretty much all points have this property
09:46:48 <oklopol> symbolic dynamics is really where most of the math happens, so if CA wasn't so easy to write, i'd always talk about endomorphisms of the shift just to keep the CA people out
09:47:39 <oklopol> there was this guy in a conference who said he's a computer scientiest but also does a lot of math. he said he's working on cellular automata, and said that HE HAD HEARD THAT YOU CAN GIVE A TOPOLOGY TO THE FULL SHIFT
09:47:43 <oklopol> :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
09:48:12 <kallisti> oklopol: whoosh
09:48:16 <kallisti> there went the joke
09:48:18 <kallisti> over my head.
09:48:30 <oklopol> kallisti: you can't do anything with CA without the cantor topology on the space
09:48:43 <kallisti> ah.
09:48:54 <kallisti> see I thought you were implying it was impossible or something which... sounded unlikely to me.
09:49:23 <oklopol> he studied something like gliders in elementary CA
09:49:29 <oklopol> what the fuck kind of research is that
09:49:33 <kallisti> ...heh
09:49:36 <kallisti> DUDE THEY LIKE
09:49:37 <kallisti> MOVE
09:49:39 <kallisti> IN A LINE
09:49:46 <kallisti> ITERATING IN A CYCLE
09:49:46 <oklopol> that's so coooool
09:50:10 <Jafet> I guess that's the non-mathematical side of CA research
09:51:09 <oklopol> Slereah: if you want links to the good kind of research, i can show some good representatives of the techniques
09:51:39 <oklopol> if you want to know more about the bad kind, you could always read nkos
09:53:42 <kallisti> > sum . map (\(n,x) -> 2*x / 3^n ) $ zip (cycle [0,1]) [1..]
09:53:46 <lambdabot> mueval-core: Time limit exceeded
09:54:14 <kallisti> oklopol: wow shocking
09:55:01 <oklopol> this is a pretty good representative: http://www2.math.umd.edu/~mboyle/papers/automata20oct98.pdf
09:55:42 <kallisti> I wonder how one would convert points in a cantor space to real numbers in Haskell. :>
09:55:47 <kallisti> it seems... difficult.
09:59:59 <oklopol> tytythetyty: that's an easy consequence of http://www.cs.bu.edu/~gacs/papers/long-ca-ms.pdf
10:00:21 <oklopol> sorry, i didn't read any log
10:00:56 <tytythetyty> kk thanks! i will look at this :)
10:01:34 <kallisti> lol fault tolerant cellular automata
10:02:10 <Jafet> CAs can be used to model networks
10:02:19 <Jafet> So yes, you might ask whether they're fault tolerant
10:02:49 <oklopol> tytythetyty: but apart from being a consequence of that, stochastic automata are very hard to work with, and i don't know if anyone but gacs has really ever succeeded
10:03:09 <oklopol> tytythetyty: err actually
10:03:42 <oklopol> i think if i told someone at work that i just linked gacs to some random guy on irc to read, they would punch me in the face
10:04:06 <oklopol> see, apart from gacs, only one person has ever managed to read all of that
10:04:13 <tytythetyty> lol i was typing this
10:04:14 <tytythetyty> phosphoglycerate kinase
10:04:17 <tytythetyty> dammmit!
10:04:18 <tytythetyty> nevermind
10:04:35 <tytythetyty> i was gonna ask if there is a specific section that is applicable??
10:04:36 <tytythetyty> in that pdf
10:04:38 <oklopol> why did you ask your question in the first place?
10:05:20 <kallisti> "So there are as many points in the Cantor set as there are in [0, 1], and the Cantor set is uncountable "
10:05:23 <oklopol> well you probably need only a part of the construction. i can link you the reader's guide
10:05:27 * kallisti mind blown
10:05:30 <tytythetyty> i am doing some work in a Synthetic Biology seminar
10:05:36 <tytythetyty> and it was a challenge
10:05:44 <oklopol> http://www.cs.bu.edu/~gacs/papers/long-ca-ms.pdf
10:05:50 <tytythetyty> to people in the seminar
10:05:59 <oklopol> who gave it?
10:06:32 <tytythetyty> do you know random people in synth bio??
10:06:33 <tytythetyty> :P
10:07:09 <oklopol> well no but i mean did they know what they were asking... of course if you just want to have good approximations, you can just try stuff out
10:07:49 <tytythetyty> oh i see haha
10:07:58 <oklopol> gacs' automaton, afaiu, works with any probability, and simulates any CA you like reliably with high probability
10:08:00 <tytythetyty> yeah, he likes this stuff
10:08:39 <kallisti> synth bio... is that similar to mathematical biology?
10:08:40 <tytythetyty> cool, i will look at these, thanks!
10:08:44 <tytythetyty> errr
10:08:45 <tytythetyty> not really
10:08:53 <oklopol> i should ask what the exact results are at the university, i'm more into symbolic dynamics myself
10:09:07 <oklopol> so i don't really wank to gacs' paper unlike most CA ppl
10:09:42 <oklopol> since it solved like every problem ever
10:10:06 <tytythetyty> math bio is more modeling bio systems with math, synth bio is more engineering genetic pathways
10:10:13 <oklopol> well incidentally it didn't solve the problem of finding a uniquely ergodic CA which my colleague did this week, awesome right
10:10:47 <tytythetyty> i think so :P not sure what a uniquely ergodic CA is
10:17:24 <kallisti> tytythetyty: wow, I didn't realize how far we've come with genetic engineering.
10:17:30 * kallisti is reading about gene networks.
10:18:51 <tytythetyty> kallisti: if you have access to this somehow (i.e. an academic proxy), or an actual subscription, this is a good overview
10:18:52 <tytythetyty> http://www.sciencemag.org/site/special/syntheticbio/
10:19:10 <kallisti> not currently no.
10:19:27 <kallisti> well, hmmm, actually I may be able to.
10:21:18 <oklopol> tytythetyty: uniquely ergodic means there's only one dynamics-invariant measure for your dynamical system (the dynamics being the CA). this measure is then automatically ergodic.
10:21:25 <oklopol> but in the case of CA
10:21:26 <tytythetyty> kallisti: this is interesting too, this is the undergraudate synth bio team at my school, who recently won the international undergrad competition (http://2011.igem.org/Team:Washington)
10:21:46 <oklopol> it means that in every column, the density of some symbol 0 always gets bigger and bigger
10:21:49 <tytythetyty> oklopol: ahhh i see
10:23:36 <oklopol> but umm i applied for this grant and they said they'd notify recipients by end of march. i heard rumors that i got it but there's another ville who applied and now no one just knows anything. except that i wasn't notified, so i probably didn't get it. well, today, i got an email that says something like dear recipient, please fucking register for our party already.
10:24:35 <oklopol> and i'm confused, did they just send that to everyone who applied and filter out non-recipients by addressing it to recipients (non-recipients have not been notified)
10:25:38 <oklopol> i should probably go talk to someone at the university... we already changed where i'm getting my next year's funding based on me not getting the grant :D
10:25:52 <oklopol> erm i mean my whole 4 year plan
10:27:15 <Jafet> Go to the party and make so many friends that they can't kick you out
10:27:44 <oklopol> good idea
10:27:46 <oklopol> bye
10:28:12 <kallisti> @source nDerivs
10:28:12 <lambdabot> nDerivs not available
10:28:16 <kallisti> :t nDerivs
10:28:17 <lambdabot> forall a i. (Num i, Num a) => (Dif Expr -> Dif a) -> i
10:28:24 <kallisti> > nDerivs sin
10:28:28 <lambdabot> mueval-core: Time limit exceeded
10:28:31 <kallisti> > nDerivs log
10:28:37 <lambdabot> mueval-core: Time limit exceeded
10:29:15 <tytythetyty> grants are a bitch sometimes :/
10:29:19 <tytythetyty> and interviews
10:29:34 <tytythetyty> i had a microsoft interview today, didn't go as well as it should have
10:35:51 -!- hagb4rd has joined.
10:37:42 <tytythetyty> kallisti and oklopol: good talking to you guys! thanks for the help
10:37:45 <tytythetyty> have a good night
10:38:22 <kallisti> night
10:38:36 -!- tytythetyty has quit (Quit: Page closed).
10:57:25 -!- itidus21 has quit (Ping timeout: 240 seconds).
11:17:51 <hagb4rd> hail eris
11:21:32 <kallisti> hail
11:38:41 -!- oerjan has joined.
12:03:57 <kallisti> http://en.wikipedia.org/wiki/Mystical_Ninja_Starring_Goemon
12:04:01 <kallisti> has anyone else played this game?
12:04:45 -!- ais523 has joined.
12:13:23 -!- Phantom_Hoover has joined.
12:28:42 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
12:32:55 <kallisti> ais523: hi
12:33:04 <ais523> hi kallisti
12:33:10 <kallisti> http://en.wikipedia.org/wiki/Mystical_Ninja_Starring_Goemon
12:33:13 <kallisti> have you played this game?
12:33:17 <kallisti> N64 game.
12:33:32 <ais523> no
12:33:35 <ais523> I don't own an N64
12:34:04 <ais523> (I /have/ played a very few N64 games on other people's N64s, but a small selection)
12:34:28 <kallisti> ah
12:34:53 <kallisti> some weird Japanese game I played as a kid. I just rediscovered it and my nostalgia glands kicked in.
12:34:57 <Vorpal> <elliott> Vorpal: wow, skyrim depends on steam even when bought in-store? <-- yes
12:35:33 <kallisti> "A cellular automaton is said to be reversible if for every current configuration of the cellular automaton there is exactly one past configuration (preimage)."
12:35:49 <kallisti> psh, come on. you can totally non-deterministically reverse to multiple past images.
12:35:50 <ais523> elliott_: I'm surprised that you're surprised at that; it's become more and more common recently
12:35:55 <ais523> I'm upset by it, but not surprised
12:36:12 <kallisti> what's wrong with requiring Steam? it's free right?
12:36:40 <ais523> kallisti: assumes you're going to have a network connection when you play the game
12:36:47 <ais523> this is almost always not the case for me, I typically play games offline
12:37:09 -!- elliott_ has quit (Ping timeout: 245 seconds).
12:37:33 <kallisti> I was under the impression that Steam had an offline mode as well.
12:37:52 * kallisti doesn't actually play PC video games often.
12:38:20 <kallisti> but when I do, I prefer Dos Equis.
12:38:30 <Jafet> Only pirates, criminals and communists play offline
12:38:55 <Jafet> And people who might not live in the first world, but they're mostly pirates, criminals and communists anyway
12:39:09 <ais523> bleh, I prefer "anarchists, lunatics, and terrorists"
12:39:20 <fizzie> Steam has an "offline mode" if you check the "save login details" box, or something like that.
12:39:37 <ais523> but you'd still need an Internet connection to install the game
12:39:58 <fizzie> Yes, well, it's a Internet-based delivery system, after all. But not when you play it.
12:39:58 <ais523> it used to be that you could go to a shop, buy a game, take it home, and install it on a non-networked computer
12:40:15 <ais523> and the only DRM would be requiring the disk to stay in the drive, together with measures to make the disk harder to copy
12:41:01 <kallisti> ais523: it also used to be that there was this thing called "dial-up"
12:41:04 <ais523> meanwhile, "Scaffolding" seems like an interesting name for an esolang
12:41:11 <ais523> kallisti: it still exists, believe it or not
12:41:16 <kallisti> well, yeah..
12:41:35 <ais523> at least one ISP gave free dial-up internet access to Egypt when the government cut off all the ISPs
12:41:35 <kallisti> it much the same way that floppy drives still exist.
12:41:45 <ais523> on the basis that they had all this dial-up capacity that was hardly being used
12:41:50 <ais523> kallisti: I actually have a USB floppy drive
12:42:00 <kallisti> .......why
12:42:30 <kallisti> are you a digital archeologist?
12:42:31 <fizzie> At one point in time multiple laptops came out bundled with USB floppy drives.
12:42:37 <kallisti> unearthing ancient tombs filled with floppy disks?
12:42:49 <ais523> kallisti: because I used to back things up to floppy disks, back before CD burners were common
12:43:24 <ais523> also, because floppy disk is quite a convenient way to quickly transfer files from one computer to another; it's pretty much as fast as doing it via USB stick, just with a lower capacity
12:43:51 <kallisti> I have this thing
12:44:09 <kallisti> where I can put up to 5 GBs of information onto a server probably hundreds of miles away.
12:44:17 <kallisti> and then log into that server on another computer
12:44:23 <kallisti> and download the information
12:44:41 <kallisti> I guess it's not as fast as a floppy
12:44:48 <kallisti> when you're like, physically next to both computers
12:45:09 <ais523> why would you send data hundreds of miles to transfer it across the room?
12:45:11 <fizzie> According to Wikipedia, "the average sequential read speed is 30–70 kB/s".
12:45:34 -!- elliott_ has joined.
12:45:49 <ais523> if both computers are on the same network, I'd just use that network to send it
12:46:03 <kallisti> ais523: it's okay it's traveling at light speed.
12:46:15 <kallisti> and yeah
12:46:18 <ais523> the only time bouncing off an external server would make sense for a same-room transfer would be if there was some sort of firewall between them
12:46:20 <kallisti> it would be silly.
12:46:45 <kallisti> ais523: well I'm referring to Dropbox. if you have it installed on both computers it's even easier.
12:46:50 <kallisti> but it's also possible to login from any computer.
12:46:59 <kallisti> via a web interface
12:47:05 <ais523> (extreme example: the wireless connection here in my office is outside the department's firewall, the wired connection is inside, so I'm careful not to use both at once; and the wired connection is really heavily monitored, to the extent that Chrome refuses to access Google, because I think it's MITMing the https)
12:47:10 <oerjan> that's ridiculous, i demand heavy speed!
12:47:23 <fizzie> We used to use MageLink for transferring files between the computers at the computer classroom at school. It's the spiffiest-looking IPX file transfer thing there is.
12:47:38 <ais523> haha, now I remember XPDT
12:47:48 <fizzie> Sadly an image search for 'MageLink' is not being very helpful.
12:48:14 <ais523> it seems that none of the file-transfer stuff that comes with Windows allows transferring over a serial link from Windows 95 to Windows XP, or the other way round
12:48:14 <ais523> so I wrote my own program to do that
12:48:54 <fizzie> Do they still bundle a LapLink-like thing in modern Windowses? I suppose not.
12:49:24 <fizzie> The "null-printer" cable, the silliest name.
12:49:54 <fizzie> (By analogy with null modem cables.)
12:53:21 <fizzie> Debian's installation manual has a PLIP-based installation method described.
12:54:43 -!- ais523 has quit (Ping timeout: 252 seconds).
12:56:33 <fizzie> "Windows Vista drops support for the Direct cable connection feature [4] as ethernet, Wi-Fi and Bluetooth have become ubiquitous on current generation computers. To transfer files and settings, Windows Vista includes Windows Easy Transfer, which uses a proprietary USB-to-USB bridge cable known as the Easy Transfer Cable." <- right, they've given it up.
12:59:57 -!- ais523 has joined.
13:02:36 <kallisti> On Talk:Afterparty: This sure doesn't answer anything. Also, it's "after party", not one word. It's also a lame concept. (Wow, I wanted to go on a pro-Communist rant there, but stopped.) More needs to be written, otherwise, it just seems like a myth of some sort. Besides (stopping myself again from going totally anti-suburbs here). Apple8800 (talk) 17:26, 29 March 2011 (UTC)
13:03:43 <kallisti> fucking capitalists and their afterparties (one word)
13:06:47 -!- itidus21 has joined.
13:09:50 <kallisti> itidus21: hi
13:32:10 -!- kallisti has quit (Quit: Lost terminal).
13:36:28 <Vorpal> <ais523> also, because floppy disk is quite a convenient way to quickly transfer files from one computer to another; it's pretty much as fast as doing it via USB stick, just with a lower capacity <-- not really, floppies are really slow
13:36:53 <ais523> fast enough when you're only transferring a few tens of kilobytes, which is typical
13:37:38 <Vorpal> <ais523> kallisti: I actually have a USB floppy drive <-- I have two of them I think. One pure USB floppy drive and one that doubles as a "ultrabay-for-old-dell floppy device" and USB one
13:38:06 <Vorpal> ais523: Hm I seldom transfer less than a mb or so
13:38:21 <Vorpal> ais523: and quite often something like 10 GB
13:38:30 <ais523> you can't fit 10 GB on a floppy
13:38:33 <Vorpal> indeed
13:38:47 <ais523> last time I needed to transfer that sort of data, I put the two computers physically next to each other and connected them with an Ethernet crossover cable
13:38:49 <ais523> then used rsync
13:38:52 <Vorpal> I used to use ethernet over firewire back when my desktop only had 100 mbit connection. Because firewire allowed 400 mbit
13:38:52 <ais523> *that sort of amount of data
13:39:15 <Vorpal> now I have gbit ethernet on both my desktop and laptop
13:39:24 <Vorpal> so generally the disk speed in the laptop is the bottleneck
13:40:16 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
13:41:18 <Vorpal> hm PSU at the bottom seems to be getting more and more popular in high end chassis these days.
13:41:29 <Vorpal> what is actually the point of PSU at the bottom
13:42:16 <Vorpal> my computer has that, but it just messes up with the cables as far as I'm concerned (since the PSU uses flat cables with connectors on the side of the cable. And it is designed for mounting at the top.
13:42:54 <Vorpal> ais523: maybe you would know what the advantages of PSU at the bottom of the computer case is?
13:42:59 <ais523> Vorpal: it's so that when YouTube upgrade their video service, it still works if you turn the entire computer case upside-down
13:43:08 <Vorpal> ...
13:43:08 <ais523> which gives even better performance than just inverting the monitor
13:43:11 <Vorpal> what?
13:43:26 <Vorpal> inverting monitor? I don't get the joke.
13:43:42 <ais523> it was YouTube's April Fools thing this year (or maybe last year?)
13:43:47 <Vorpal> ah
13:43:50 <ais523> where they turned the entire site layout upside-down, also the videos
13:43:55 <Vorpal> ah okay
13:43:59 <Vorpal> ais523: but seriously, any idea?
13:44:04 <ais523> on the basis that they'd discovered that videos looked better if you turned the monitor upside-down
13:44:08 <ais523> and no, not offhand
13:44:19 <ais523> it wouldn't surprise me if it was something to do with cooling, but I don't see how it would help offhand
13:44:23 <ais523> *if it were
13:45:32 <Vorpal> ah
13:47:53 <ais523> 1.1.1 The droll business is, whether you be convinced active it, the cares you should get are each familiar meaning! How does it effort? Besides solely, individual moves any earful most you, possibly on-line or conceivably eve via any scrap send that you tossed in the crank without eve trigger-happy it up.
13:49:28 <fizzie> Sounds fungotty.
13:49:28 <fungot> fizzie: ' cheers,' said lu-tze.
13:50:13 -!- itidus21 has left ("Leaving").
13:50:26 -!- kallisti has joined.
13:50:28 <ais523> fungot: go on
13:50:28 <fungot> ais523: " no we ain't," said esk. " granny always says that to women, for the arms, two twigs.
13:50:38 -!- kallisti has quit (Changing host).
13:50:38 -!- kallisti has joined.
13:50:44 <kallisti> `word 25
13:50:51 <HackEgo> eszykkakemed obatleue raieffenisteinges paghters ac gan roleyum appard lvatoulphonicae hendfelletharbrogg ratereur bee tocitz bratous aeurrosly pred pic sten reanclan tlnhek bie un dodus blertrigentmousalgilemanatimend ro
13:51:44 -!- itidus21 has joined.
13:52:16 <kallisti> huh, for some reason youtube is saying "missing plugin" for every video.
13:52:34 <ais523> kallisti: perhaps you don't have a Flash plugin?
13:52:44 <kallisti> I most definitely do
13:52:46 <ais523> "bee" is a real word, out of that list
13:52:53 <kallisti> I just restarted after some updates though.
13:53:09 <ais523> and quite a few of them sound like they could be real words
13:53:11 <kallisti> ais523: it happens. especially with short words. only so many possibilities in a markov model.
13:53:14 <kallisti> ais523: good
13:53:15 <ais523> indeed
13:53:19 <ais523> `word 25
13:53:22 <HackEgo> fuermarabev as gcommenfer dumallyley wychafr mam zat tb tuproassitara man apitenins jurg autory cler hydrouzhdu aflutz flits ine boni met soirodestsovegeble bolia formagged lopui ch
13:53:52 <kallisti> aflutz :)
13:54:01 * kallisti has flits and aflutz
13:54:08 <itidus21> man
13:54:16 <ais523> I've seen people seriously attempt to use "boni" as the plural of "bonus"
13:54:22 <kallisti> ..
13:54:22 <ais523> "as" is also a word, as is "man"
13:54:27 <itidus21> met
13:54:32 <fizzie> "pic" and "pred" out of that first list were also rather common abbreviations.
13:54:36 <ais523> actually, "formagged" is possibly the best nonword there
13:54:59 <kallisti> no soirodestsovegeble?
13:55:14 <oerjan> ais523: at least boni is correct latin, i think
13:55:33 <oerjan> unlike some other examples
13:55:47 <ais523> yep, I think so
13:55:59 <oerjan> formagged obviously means turned into cheese
13:56:47 <kallisti> heh
13:57:03 <kallisti> `word 50
13:57:05 <HackEgo> monsumizehutand senselees atticheler jnaal tans ber ozamoloupne dovolowx hici unthiries subs auroo zu pribacc obikanba vity iscu lammenleres ken meduratctrae wd troasakic venderpugaryszus alierectracist mesi bouraps bbizosinizaria fandombori obed uienyonoseranottinscrenzy wander rheetess syraibia te tro ruardentiminesta hus sesined thl metion sch brica inuce howmrech narremietty baarimptinfon bnue boletadvaligny cluvra kancr
13:57:18 <kallisti> monsumizehutand -- ancient Aztech ruler
13:57:30 <ais523> "fandombori"
13:57:37 <kallisti> heh
13:57:56 <fizzie> What a senselees list of words.
13:58:43 <fizzie> Is an 'alierectracist' a person who won't submit to being probed by extraterrestials, or what?
13:58:52 <kallisti> .......
13:58:55 <kallisti> I think so?
13:59:41 <itidus21> `word 1
13:59:43 <HackEgo> urganaidonoropedeechl
14:00:26 <kallisti> :t zip`ap`tail
14:00:29 <lambdabot> forall b. [b] -> [(b, b)]
14:01:06 <itidus21> err-gah-nah-ee-doh-noh-ropey-dee-ch-L
14:01:32 <kallisti> yep
14:01:46 <itidus21> god thats difficult
14:01:47 * kallisti has gotten the hang of pronouncing these things.
14:01:56 <kallisti> a little creative discretion is allowed
14:02:09 <itidus21> in english you must remember that pronunciation does not follow from spelling :P
14:02:10 <kallisti> as it's "pseudoEnglish" in nature
14:02:19 <kallisti> which already has a wide variety of different ways to pronounce combinations of letters
14:02:49 <kallisti> itidus21: no it does, it's just based on a wide variety of linguistic influenced
14:03:01 <kallisti> *influences
14:03:20 <itidus21> it seems to me like it simply borrows several pronunciation systems
14:03:45 <kallisti> everything is "borrowed" and slightly reinvented in natural language
14:03:47 <kallisti> and, well, a lot of things.
14:05:12 <fizzie> Speech synthesis thingies often have (in addition to a large pronunciation dictionary) some sort of a rule-based device to generate plausible phonemes for OOV words.
14:05:22 <itidus21> perhaps the idea of english is to acquire the shibbaleths of their eneies
14:05:34 <itidus21> ^enemies
14:05:58 <kallisti> music, art, religions, holidays, sports, mythologies
14:06:17 <itidus21> someones probably already done a phd on that possibility i suggested and found it's a dead-end
14:06:20 <fizzie> echo 'monsumizehutand senselees ... cluvra kancr' | festival --tts # the best babble ever.
14:06:23 <kallisti> if you look at all of these things you'll see a (mostly) linear progression of linear through history.
14:06:38 <kallisti> `run festival --help
14:06:40 <HackEgo> bash: festival: command not found
14:06:55 <fizzie> It's so fast I can't make anything out of it, and I don't quite recall how to control speaking speed.
14:07:20 <itidus21> `word 5
14:07:22 <HackEgo> parne euwessoly coms coaulanquicolve tra
14:07:25 <kallisti> yes a linear progression of linear.
14:07:32 <kallisti> itidus21: 25 is a good number
14:07:36 <kallisti> bound to find something interesting.
14:07:48 <fizzie> Sometimes it heuristicizes into pronouncing things as lettersims; like "sch" and "wd" it does like that.
14:08:30 <fizzie> The prosody for that "sentence" is... somewhat arbitrary too.
14:08:54 <kallisti> `word 30
14:08:57 <HackEgo> imerapposan ccyptyrs strcd plitaspet plation cxlere decocs vie chya schth sap cont eldenernefl chron diss ophyphofe symo imbee hoyoj dro einee dion eouciircloromplam wehenss remed nifteng jeeppertia sa sch dimely
14:09:14 <kallisti> strcd sounds like a string.h function
14:09:14 <fizzie> There's a short break between uienyonoseranottinscrenzy and wander, like a comma, for some reason.
14:09:35 <kallisti> schth -- best word
14:11:05 <kallisti> eldenernefl - el-den-nur-neh-ful
14:11:16 <kallisti> fizzie: unfortunately I believe googles data contains roman numerals
14:11:29 <itidus21> my pseudo-intelligence leads me to say, ("ais523") = "523". ("523") = '5', '2', '3'. ('5') = 5. ('2') = 2. ('3') = 3. 5+2+3 = 10
14:11:29 <kallisti> which sometimes leads to ridiculous things like triple i's
14:11:38 <itidus21> `word 10
14:11:40 <HackEgo> tris bayions au minis tolotti ital coneu via tchliplanosleociot exillesta
14:12:19 <fizzie> Festival pronounces eldenernefl with pretty much a silent "den"; el-ner-neh-ful.
14:12:33 <itidus21> i quite like tchliplanosleociot
14:12:33 <fizzie> Sorry, 'de'.
14:12:59 <itidus21> as for exillesta... thats just a kick ass word
14:12:59 <kallisti> itidus21: it's squishy in my mouth
14:13:11 <fizzie> In fact, I can't hear any difference between elnernefl and eldenernefl. Maybe the latter is just archaic spelling for the former?
14:13:29 <kallisti> most likely...
14:14:34 <kallisti> `word
14:14:37 <HackEgo> sen
14:14:51 <fizzie> That's valid Finnish.
14:15:13 <fizzie> And I suppose quite a few other languages too.
14:15:30 <fizzie> Japanese and Swedish, at least.
14:15:37 <oklopol> yay i got 23000 euros today
14:15:47 <fizzie> Don't spend it all at once now.
14:15:47 <kallisti> `word
14:15:49 <HackEgo> progyribure
14:15:54 <kallisti> oklopol: grant?
14:15:56 <oklopol> yes
14:16:04 <oklopol> but that sounds less cool
14:16:13 <kallisti> oklopol: you have to like spend it a certain way don't you
14:16:17 <kallisti> ?
14:16:26 <oklopol> it's for living expenses
14:16:30 <kallisti> ah cool.
14:16:41 -!- Slereah_ has joined.
14:17:14 -!- Slereah has quit (Ping timeout: 252 seconds).
14:17:14 <kallisti> oklopol: you should buy a nice TV and a PS3 and play Demons' Souls
14:17:27 <fizzie> And maybe some food too.
14:17:37 <fizzie> If there's any money left after the essentials.
14:17:44 <fizzie> Like those mentioned above.
14:17:45 <ais523> oklopol: my grant comes more gradually
14:17:46 <kallisti> eh 23000 euros is plenty for food. poor American white trash could live off of that for a year at least.
14:17:54 <ais523> I just look at my bank account and find that there's more money in there than I remember
14:18:09 <oklopol> ais523: mine too, probably. i'm just polishing the facts a bit.
14:18:25 <oklopol> i have to live off it for a year. it's actually just my normal salary.
14:18:35 <fizzie> My grant just somehow goes into some (rather large, I think maybe 80% or so?) percentage of my regular monthly salary.
14:18:38 <oklopol> perhaps even slightly less since i just got a raise.
14:18:40 <fizzie> I don't really know the details.
14:18:50 <oklopol> yeah maybe mine does too
14:18:55 <oklopol> it's from väisälä, you may know it
14:19:01 <kallisti> oklopol: you could probably get like, what, 92 high-class escorts (read: prostitutes)?
14:19:14 <oklopol> i don't know where to get those in finland
14:19:28 <fizzie> Also the rest of the paycheck comes from some place, but I don't know where. Maybe it's the... department? I don't know, the bureaucracy is confusing.
14:19:51 <ais523> kallisti: I'm amused that you know the price that accurately
14:19:55 <kallisti> all of you guys have grants? weird.
14:20:01 <kallisti> I just get paid.
14:20:13 <ais523> fizzie: my grant and paycheck are added separately
14:20:18 <oklopol> my paycheck currently comes from the "project" of my supervisor (in math, project just means... nothing)
14:20:18 <kallisti> ais523: well it was an estimate.
14:20:19 <itidus21> i don't have an income. i get 'supported' by my family
14:20:25 <ais523> amusingly, the paycheck has many times more bureaucracy
14:20:31 <itidus21> not to complain. i do nothing to deserve an income
14:20:43 <ais523> itidus21: that was the case for me before I got a job, too
14:20:52 <ais523> and I imagine it's the case for pretty much everyone too young to have a job
14:21:24 * kallisti is currently supported by his family /and/ making money.
14:21:25 <itidus21> im not on a dole either.. and im relatively happy really
14:21:28 <oklopol> kallisti: up to now, i just had a paycheck, but my supervisor asked me to apply for a grant since he ran out of money for next year because he desperately needed to fish a good student for himself.
14:21:33 <kallisti> at least for now. I intend to move out sometime next year.
14:21:46 <kallisti> oklopol: academia is weird.
14:22:08 <oklopol> since the student might have gone with a different professor if he'd waited.
14:22:15 <itidus21> i chat with a lot of people more intelligent than me
14:22:36 <itidus21> it's not good for my relative sense of intelligence :D
14:22:52 <ais523> itidus21: I think most people do, actually; people tend to gravitate towards people with similar levels of intelligence
14:22:56 <fizzie> ais523: Well... I have a regular salary selected from our salary tables, but I have this four-year "Doctoral Programme" position from http://www.cs.helsinki.fi/hecse/ too, so that money gets somehow funneled in as a "funding source" into whatever percentage of my salary it happens to cover, and the department makes up for the difference from some other project/funding/whatever.
14:23:02 <ais523> and thus will tend to meet people more intelligent than themselves, no matter how intelligent they are
14:23:08 <ais523> fizzie: hmm, how complex
14:23:10 <itidus21> ais523: oh.. thats a positive
14:23:22 * kallisti makes terrible web apps for a living.
14:23:24 <itidus21> i gravitated towards #esoteric
14:23:27 <ais523> (exception: the most intelligent few people in the world)
14:23:52 <kallisti> itidus21: I'm certainly not as intelligent as most people on this channel, but I still consider myself intelligent. do you know why?
14:23:56 <kallisti> because: real world
14:23:58 <kallisti> people are stupid
14:24:05 <ais523> fizzie: it's much simpler for me; I have a 75% part-time PhD (which I'm being funded by the department to work on, at the suggestion of my supervisor), and am paid directly for a 25% part time teaching job
14:24:29 <itidus21> kallisti: if i had to judge, my question would be, do you realize there are inherent contradictions to such statements? :D
14:24:31 <kallisti> I've considered going getting a Phd at some point, but... I don't know if it's worth it.
14:24:50 <kallisti> itidus21: there aren't
14:25:17 <itidus21> taking oneself too seriously leads to a holistic decrease in intelligence
14:25:25 <kallisti> hm?
14:25:35 * kallisti takes everything SERIOUSLY AAAAAAH
14:25:38 <kallisti> .. :)
14:26:35 <itidus21> i mean... eh.. nevermind.. i need to be in another mood for that silly topic of mine
14:26:43 <fizzie> Also Condor, this "let's use our idle desktops as a computing grid" thingie, has a confusing -help for some commands:
14:26:44 <kallisti> ais523: oklopol: fizzie: the problem with me getting a Ph.D in Computer Science is that I don't really think I will be very /good/ at research.
14:26:44 <fizzie> $ condor_hold -help |& grep addr
14:26:44 <fizzie> -addr <ip:port> Connect directly to the given "sinful string"
14:26:48 <kallisti> or pretending that I'm researching.
14:27:19 <fizzie> What makes an "ip:port" sinful is unclear to me. Maybe it refers to struct sin_addr.
14:27:21 <ais523> hmm, that could be a problem
14:27:33 <ais523> it helps to have an obvious thing to be working on already
14:27:38 <oklopol> i thought i might just be a good student and a horrible researcher, but this seems to be going well
14:27:40 <ais523> like the hardware compiler, in my case
14:27:44 <oklopol> i have something like 50 theorems now
14:27:51 <ais523> wow
14:27:56 <kallisti> ais523: I work on side projects sure, but nothing that's groundbreaking
14:28:02 <ais523> meanwhile, I have 3 papers, which contain an average of less than one theorem each
14:28:03 <oklopol> and three publications
14:28:08 <kallisti> I wouldn't write a paper on how I made a program that randomly generates words. :P
14:28:15 <ais523> indeed, it's known techniques
14:28:21 <fizzie> oklopol: I hope you are naming them with a numbering scheme, so that you can have people referring to "oklopol's 37th theorem".
14:28:25 <ais523> the general point of PhDs is that you're expanding the boundaries of knowledge
14:28:30 <kallisti> right.
14:28:43 <ais523> oklopol is proving new results, whereas what I'm doing is basically programming
14:28:52 <itidus21> kallisti: uhhh.... this is a difficult topic. in the end intelligence as a measurement crumbles under it's own weight.
14:28:53 <ais523> it's coming up with new algorithms, I guess, looked at from the mathematical view
14:29:12 <ais523> and when we prove theorems, it's either to prove that they produce the right results, or that they always terminate
14:29:12 <oklopol> i don't think many of them will ever be referred to, this is the number of theorems that aren't trivial to prove, the number of useful results is way less.
14:29:21 <kallisti> ais523: maybe as I focus on new side-projects I'll come across something somewhat new.
14:29:26 <itidus21> so i guess what i am saying is there is a mild sarcasm for me whenever i use that word intelligent
14:29:27 <kallisti> *something
14:29:28 <Jafet> Programming can be a research topic
14:29:38 <Jafet> But results tend to become dated
14:29:44 <ais523> kallisti: we couldn't believe that what we were doing was new, in some cases, but it turned out that it was
14:30:17 <oklopol> we have some computational results, decidability and semidecidability stuff
14:30:25 <kallisti> ais523: maybe I should focus on what interests me outside of computing. I have a pretty strong grasp of signal processing as it relates to music. I could probably find something new there.
14:30:26 <itidus21> kallisti: uhhh.. like.. you know.. theres tangible intelligence and intangible intelligence *pulls hair out*
14:30:40 <oklopol> mainly on zero entropy sofic shifts, since we're trying to get to a CS conference that emphasizes this
14:31:21 <kallisti> itidus21: I generally don't think that the many different kinds of intelligence are truly quantifiable. IQ has statistical importance but there are other ways to think of what intelligence means.
14:31:27 <oklopol> maybe not 50, the number was 37 last i checked, but that was after summer and we have 3 new results this week i think
14:31:34 <oklopol> so it might be about 50 but dunno
14:31:39 <Phantom_Hoover> "Zero entropy sofic shift" sounds like something straight out of some new age crackpot website.
14:31:40 <lambdabot> Phantom_Hoover: You have 12 new messages. '/msg lambdabot @messages' to read them.
14:31:50 <itidus21> ;_; the topic of intelligence itself is indeed one that requires intelligence to traverse
14:31:57 <oklopol> i'm counting mine and my colleague's, there's a couple that he proved and about half are joint work
14:32:07 <kallisti> ais523: in particular I've been considering that there are a number of combinators that you can apply to form rhythmic patterns. It may be under some existing generalization though.
14:32:58 <Phantom_Hoover> @tell elliott FFS, find a way of messaging me that doesn't overflow so easily.
14:32:59 <lambdabot> Consider it noted.
14:33:09 <kallisti> the simplest would be parallel and serial combinations.
14:33:17 <kallisti> but perhaps there are more.
14:33:19 <oklopol> a sofic shift is just a shift space defined by a labeled directed graph, they are the closure under factor maps of subshifts of finite type, which on the other hand are exactly the subshifts defined by a clopen set
14:33:25 <oklopol> in a natural sense
14:33:52 <Jafet> And time has four corners
14:33:55 <oklopol> and zero entropy means the topological entropy of the dynamical system where the left shift is the dynamics
14:34:31 <Vorpal> Phantom_Hoover: does lambdabot overflow?
14:34:37 <Vorpal> when messaging
14:34:41 <oklopol> but there's a nice characterization for these
14:35:10 <oklopol> i have no idea who i'm talking to
14:35:11 <oklopol> :D
14:35:33 <kallisti> hmm also you can shrink and expand rhythmic patterns.
14:36:03 <kallisti> so you could combine two rhythms serial (basically end to end) and also have the result be the same duration as the originally, basically doubling the speed of both.
14:36:49 <kallisti> but I'm pretty sure these notions of serial and parallel exist elsewhere. If you model rhythms as a linked list, then the serial combinator is just (++) in Haskell.
14:37:16 <Jafet> If you work hard on this, you might successfully get hired by whoever puts those bland pop tunes on the radios
14:37:25 <kallisti> ha
14:37:33 <kallisti> to algorithmically generate pop? sounds... uh... good
14:37:50 * kallisti would change pop forever by NOT USING FUCKING 4/4 TIME SIGNATURE FOR EVERYTHING
14:37:52 <Jafet> Sounds profitable. And Orwellian
14:38:19 <Vorpal> yeah why is 4/4 so popular. Nothing wrong with 2/4, 3/4, 2/3 and so on IMO
14:38:27 <kallisti> Taylor Swift's latest single will be 5/4 7/4 5/4
14:38:33 <Jafet> They don't even use time signatures any more! They steal time signatures from older tunes.
14:38:46 <kallisti> (well, just 5-7-5, the denominator is irrelevant to the actual meter)
14:38:47 <Jafet> Look at breakbeats
14:39:26 <kallisti> Fibonacci time. 1-1-2-3-5
14:39:49 <kallisti> well you could have like, i,j-Fibonacci time.
14:40:04 <kallisti> i and j being the interval you want to use.
14:40:19 <kallisti> or something. :P
14:40:43 <Jafet> You could use nothing but concatenated permutations of a set of tones. Oh wait.
14:41:01 <oerjan> oklopol: i think sofic shift spaces are like the two-sided infinite generalization of regular languages
14:41:29 <kallisti> The Tool song "Lateralus" has one part where the syllables in each measure of lyrics follow the pattern: 1 1 2 3 5 8 5 3
14:41:45 <oerjan> you have a finite automaton, but it never stops nor has it ever started
14:42:28 <oklopol> yeah they are exactly the subshifts whose language is regular, and a regular language that's factor closed and extendable gives a sofic shift
14:42:41 <kallisti> Jafet: I think I'll use subsequences selected from an infinite continuum of sinusoids.
14:42:55 <fizzie> oerjan: You mean a duracell-powered finite automaton?
14:42:59 <oklopol> but my definition makes more sense in symbolic dynamics
14:43:02 <oerjan> fizzie: pretty much
14:43:03 <oklopol> imo
14:43:10 <oklopol> that's how it's mostly used
14:43:25 <oklopol> that it's the closure of sft's under factors
14:44:38 <fizzie> Festival pronounces "Phantom_Hoover" as "phantom-underscore-hoover".
14:45:51 <kallisti> isn't that how everyone pronounces Phantom_Hoover?
14:46:01 <oerjan> shockingly, no
14:46:12 <Jafet> I pronounce it as "Wally"
14:46:31 -!- oerjan has quit (Quit: ORLY?).
14:46:36 <kallisti> Jafet: I pronounce "Wally" as "[;[8]]&*]6"
14:46:51 <fizzie> "Some pronounce it 'asshole'." No, I mean, I wouldn't spell out the underscore if someone told me to read these IRC logs out loud.
14:47:12 <kallisti> !perl [;[8]]&*]6
14:47:13 <EgoBot> Number found where operator expected at /tmp/input.7581 line 1, near "*]6"
14:47:20 <kallisti> !perl [;[8]]&*]
14:47:20 <EgoBot> syntax error at /tmp/input.7641 line 1, near "[;"
14:47:24 <kallisti> !perl [[8]]&*]
14:47:28 <kallisti> there we go.
14:48:24 <kallisti> it was /almost/ valid Perl. :P
14:48:55 <kallisti> !perl print *]
14:48:55 <EgoBot> ​*main::]
14:49:20 <kallisti> !perl print *]{SCALAR}
14:49:21 <EgoBot> SCALAR(0x7f7155eaebf8)
14:49:28 <kallisti> !perl print ${*]{SCALAR}
14:49:28 <EgoBot> Missing right curly or square bracket at /tmp/input.7956 line 1, at end of line
14:49:29 <kallisti> er
14:49:56 <kallisti> !perl print ${*]{SCALAR}}
14:49:56 <EgoBot> 5.010001
14:50:43 <kallisti> fizzie: ais523: have you ever found a use for typeglobs now that Perl 5 introduced refs?
14:51:11 <ais523> kallisti: injecting variables into other package's symbol tables; this makes the most sense in a library designed to generate code
14:51:30 <fizzie> !perl print []|*]
14:51:30 <EgoBot> ksi::}7f625ec6ed48)
14:51:55 <fizzie> I haven't, but I haven't been doing very "deep" Perl either.
14:51:56 <ais523> e.g. you write a library which adds extra functions to packages that reference it
14:52:04 <ais523> fizzie: wait, how does that work?
14:52:17 <fizzie> It just bitwise-ors the bytes.
14:52:19 <ais523> aha, it's a reference bitwise-ored with a symbol table entry
14:52:30 <ais523> but, err, what?
14:52:31 <fizzie> Of "*main::]" and "ARRAY(0xwhatever)".
14:52:41 <kallisti> !perl print [[8]]&*]
14:52:48 <kallisti> >_>
14:52:57 <kallisti> !perl print [[8]]|*]
14:52:57 <EgoBot> ksi::}7fdd767b69e8)
14:53:12 <fizzie> The anded version starts with a null byte, sadly, so EgoBot won't print it.
14:53:24 <kallisti> stupid C.
14:54:36 -!- copumpkin has quit (Quit: Leaving...).
14:54:57 <kallisti> fizzie: is there anyway to enfroce a bit width of 8 on Perl scalar values?
14:55:16 <kallisti> I'd like to play around with a simple 8-bit synthesis in Perl. I could just use C but.... why not use Perl instead if I can. :P
14:55:46 -!- copumpkin has joined.
14:55:50 <fizzie> Don't know; they *could've* made "use integer" take a bit-width (like "use integer 8;"), but it doesn't.
14:56:02 -!- derdon has joined.
14:56:11 <fizzie> You can just &0xff everywhere, of course.
14:57:24 <kallisti> that's a possibility
14:57:46 <fizzie> What I think is a bit weird is how "use integer" makes the always-integral bitwise things (&, |, ^, ~, <<, >>) use signed integers instead of the unsigned ones they usually use.
14:58:26 <fizzie> !perl $a = ~0; { use integer; $b = ~0; } print "a $a, b $b";
14:58:26 <EgoBot> a 18446744073709551615, b -1
14:58:53 <fizzie> I suppose it makes some amount of sense, I just think unsigned integers are somehow more... integery.
14:59:00 <fizzie> Okay, *that* probably doesn't make any sense.
14:59:03 <kallisti> lol
14:59:19 <kallisti> fizzie and his arbitrary notions of integeriness
14:59:44 <kallisti> mayb "use integer" is like saying "use /all/ the integers"
15:00:22 <kallisti> even those negative ones.
15:00:46 <kallisti> what I find strange about bitwise operators in high-level languages is that normally those languages don't specify anything about the bit composition of values.
15:00:53 <kallisti> it just seems out of place.
15:02:51 <oklopol> negative integers? someone still believes in those?? :D
15:03:05 <kallisti> ..?
15:03:15 <oklopol> by the way, that article that supposedly proved peano axioms are inconsistent, it was retracted and there's no trace of it anywhere :D
15:03:25 <kallisti> heh.
15:03:39 <kallisti> the revelation was simply too shocking
15:03:50 <kallisti> it had to be concealed.
15:03:51 <oklopol> kallisti: if you multiply two negative integers, you get a positive one, that's fucking ridiculous
15:03:57 <oklopol> how can anyone think that's true
15:04:02 <kallisti> .....
15:04:08 <oklopol> therefore there are no negative integers
15:04:14 <kallisti> bahaha
15:04:24 <fizzie> > bitSize (1 :: Integer)
15:04:25 <kallisti> I mean it would make sense if the result continued to be negative..
15:04:25 <lambdabot> *Exception: Data.Bits.bitSize(Integer)
15:04:29 <oklopol> that was actually an argument used when these were introduced
15:04:29 <fizzie> Aw, it has no size. :/
15:04:56 <kallisti> but then who knows what would happen when you tried to multiply a negative and a positive..
15:05:00 <kallisti> if negative * negative = negative
15:05:08 <kallisti> + * - = ..... +-?
15:05:13 <oklopol> there was really no concept of a mathematical object back then
15:05:23 <oklopol> yep
15:05:25 <oklopol> another proof
15:05:29 <oklopol> that they don't exist
15:05:35 <kallisti> well no you could totally do it that way
15:05:42 <kallisti> so that + * - = +-
15:05:44 <oklopol> anyhow, i have to go to a party 8Z
15:05:48 <oklopol> :D
15:05:55 <oklopol> bye
15:05:59 <kallisti> oklopol THE SOCIALITE
15:06:01 <kallisti> bye.
15:06:33 <fizzie> oklopol the SOCIALIST
15:06:50 <fizzie> A "socialite" is the no-sugar version of a "socialist".
15:06:56 <kallisti> fizzie: ais523: conjecture with me what would happen if you made multiplication of a positive number and a negative number have two possible results
15:07:45 <kallisti> + * - * -
15:08:26 <Phantom_Hoover> <oklopol> anyhow, i have to go to a party 8Z
15:08:27 <Phantom_Hoover> is
15:08:32 <Phantom_Hoover> is that a running man smiley
15:08:40 <kallisti> well, it's still commutative I think..
15:09:14 <Phantom_Hoover> Can smileys be commutative?
15:09:21 <kallisti> if they're running yes
15:09:23 <kallisti> they're commuting somewhere
15:09:30 <kallisti> but that's not what I was talking about obviously :P
15:10:34 <kallisti> er.... no maybe it's not commutative
15:10:56 <kallisti> 2 * -3 * -4 evaluating left to right
15:11:05 <kallisti> +-6 * -4
15:11:18 <kallisti> that's still just... +-24
15:11:44 <fizzie> Are you sure it's not +--24.
15:11:46 <kallisti> even though there are three results two of them are the same
15:12:07 <kallisti> but if you did it that way then it would result in it being non-comutative I think
15:12:11 <kallisti> because then
15:12:20 <kallisti> -4 * -3 * 2
15:12:24 <Jafet> I prefer the Copenhagen interpretation of arithmetic
15:12:37 <kallisti> evaluating left to right, would produce just +-24
15:12:50 <kallisti> instead of +--24
15:12:54 <kallisti> UNLESS
15:12:58 <kallisti> - * - = --
15:13:03 <kallisti> but... okay nevermind
15:13:09 <kallisti> screw this direction of thought
15:13:17 <kallisti> you can only have +, -, and +-
15:13:18 <kallisti> LO
15:13:22 <kallisti> s/LO/:P/
15:13:45 <fizzie> Lo, there are many planets in the archipelago of worlds.
15:13:50 <Jafet> Low colon pee
15:14:33 <kallisti> help I affiliate myself with madmen.
15:15:03 <kallisti> s/affiliate myself/confederate/
15:15:09 <kallisti> AWWW YEAH +1 WORD CHOICE
15:15:45 <kallisti> inb4 "not +-1 word choice"
15:15:50 <kallisti> or something similar
15:15:52 <Phantom_Hoover> fizzie, and, in turn, many archipelagos on the planets.
15:16:11 <kallisti> Phantom_Hoover: dude what if there are universe archipelagos
15:16:25 <Phantom_Hoover> Univarchipelagos.
15:16:45 <kallisti> and... like, univunivarchipelago
15:17:03 <kallisti> WHAT IF EVERYTHING SMALL IS A SMALL VERSION OF SOMETHING BIG.
15:17:49 <fizzie> There's an island in the sea around here, on which there's a lake, in which there's a small islet, on which there's a puddle. (Didn't someone make a comic out of this already?)
15:18:23 <Jafet> That island must make great target practice for bomber pilots
15:18:25 <Phantom_Hoover> kallisti, careful now, too much of that kind of thinking and you're ruining Minecraft's terrain gen.
15:19:07 <kallisti> #esoteric is an peoplarchipelago
15:19:23 <kallisti> and people are CELL ARCHIPELAGOS
15:19:24 <kallisti> zomg
15:19:27 <kallisti> zaaaaah
15:25:26 <kallisti> are there any four-signed number systems out there?
15:28:55 <kallisti> I think a four-signed number would mess up 1 as the multiplicative identity
15:29:01 <kallisti> 0 would still be the additive identity though
15:30:48 <kallisti> unless you just kept 1 as the multiplicative identity and made multiplication asymmetric
15:42:34 -!- myndzi has quit (Ping timeout: 245 seconds).
15:46:35 -!- MSleep has joined.
15:56:12 -!- MSleep has changed nick to MDude.
16:05:53 -!- calamari has joined.
16:06:37 <Phantom_Hoover> Wolfram blog on the fold function: "It shows unusual mastery of functional programming constructs to achieve a beautiful graphic result."
16:09:12 -!- Ngevd has joined.
16:15:04 <Ngevd> Hello!
16:17:19 <ais523> hi
16:17:46 <Ngevd> ais523, you're in my top two people who are, or I think are, in Birmingham
16:17:51 <Phantom_Hoover> Holloo.
16:18:10 <ais523> Ngevd: there's quite a lot of evidence that I'm usually in Birmingham
16:18:14 <Ngevd> Phantom_Hoover, you're my favourite person in Edinburgh. By a long way
16:18:19 <ais523> although that doesn't imply I'm in Birmingham right now, it makes it quite a bit more likely
16:18:46 <Phantom_Hoover> I can only conclude that you either a) hate someone else in Edinburgh or b) aren't very good at being pedantic.
16:18:59 <Ngevd> I don't know many Edinburghians
16:19:07 <Ngevd> Pretty much only you
16:19:57 <Ngevd> In fact, only you
16:19:57 <Ngevd> And possibly Alexander McCall Smith
16:20:33 <Phantom_Hoover> I recognise the name, and I'm not entirely sure it's as an author.
16:21:09 <Phantom_Hoover> It's probably just as an author, actually.
16:21:43 <Ngevd> Yes
16:21:44 <Ngevd> Did the 44 Scotland Street and Number 1 Lady's Decective Agency books
16:21:47 <ais523> two of those names are kind-of familiar to me
16:22:17 <Phantom_Hoover> I would be extremely surprised if neither 'Alexander' nor 'Smith' were familiar to you.
16:23:21 -!- itidus21 has quit (Ping timeout: 252 seconds).
16:23:36 <Ngevd> My mum met him once when he came to Hexham
16:23:36 <Ngevd> ais523, the other person who lives in Birmingham who I have heard of is possibly the author of Gunnerkrigg Court
16:23:50 <ais523> hmm
16:24:01 <ais523> I think there are quite a lot of famous people from Birmingham, because it's quite large
16:24:11 <ais523> on the other hand, they're not generally famous /for/ being from Birmingham
16:24:42 <kallisti> hmmm, I'm confused.
16:24:53 <kallisti> I change the source of mueval to import some modules
16:24:59 <kallisti> and then I run the build script to install it
16:25:04 <kallisti> and.... nothing changed?
16:25:22 <kallisti> oh possibly the wrong mueval.
16:26:49 <kallisti> hmmm, no
16:28:31 -!- Ngevd has quit (Ping timeout: 248 seconds).
16:28:40 <kallisti> ah there we go
16:28:46 <kallisti> had to do Setup copy instead of install for some reason?
16:35:18 -!- Ngevd has joined.
17:00:36 -!- Klisz has joined.
17:04:52 -!- Ngevd has quit (Quit: Leaving).
17:25:56 -!- monqy has joined.
17:28:46 -!- elliott_ has changed nick to elliott.
17:28:49 -!- elliott has quit (Changing host).
17:28:49 -!- elliott has joined.
17:36:48 <elliott> 09:30:46: <kallisti> elliott_: is how you prevent Perl from interpolating in a shell command
17:36:48 <elliott> 09:31:06: <kallisti> if you're using system or whatever else you would just pass a single quoted string obviously.
17:36:51 <elliott> kallisti: that is not the problem
17:37:01 <elliott> kallisti: how do i pass args in a list like python subprocess
17:38:34 <elliott> @ping
17:38:35 <lambdabot> pong
17:39:18 <kallisti> elliott: um...
17:39:26 <kallisti> like how?
17:39:28 <kallisti> I don't remember subprocess.
17:39:39 <kallisti> but
17:39:39 <quintopia> what is the hardest language to debug?
17:39:44 <elliott> 'ls', '-l', 'filename with spaces'
17:39:50 <elliott> this is necessary to avoid shell injection
17:39:55 <kallisti> I think you want system?
17:40:01 <kallisti> or exec, depending on if you want to wait or not.
17:40:11 <kallisti> system waits for the child to finish, exec doesn't
17:40:17 <ais523> quintopia: Malbolge?
17:40:29 <quintopia> yes i guess i agree
17:40:29 <ais523> a good IDE would help, though
17:40:33 <quintopia> yeah
17:40:46 <elliott> ais523: how do I do perl's `...` but with an argv instead of a string or do i have to emulaet it myself
17:40:46 <ais523> showing both original and normalized views of memory at once, and probably encryption chains too
17:40:51 <elliott> kallisti: it's not system
17:41:02 <elliott> it can be done with exec but that's a painfully low-level interface
17:41:09 <ais523> elliott: there's no operator for doing that straight off, I don't think
17:41:16 <ais523> there's almost certainly a library, probably a standard one
17:41:24 <ais523> or, hmm, what about piped open?
17:41:32 <ais523> I've never used it, but I think that's what you need
17:41:33 <elliott> doesn't that look like '|foo bar'
17:41:37 <elliott> which is not an argv
17:41:57 <ais523> elliott: there's a four-or-more arg version of open
17:42:09 <ais523> which does take an argv as the extra arguments at the end
17:42:33 <elliott> ah
17:42:35 <kallisti> oh you want to pass the argv directly....
17:42:39 <ais523> open my $fh, '-|', 'somecommand', @argv;
17:42:52 <ais523> then $fh is its stdout and you can just read it via the normal means
17:42:57 <elliott> right
17:43:01 <elliott> that sounds doable
17:45:06 * elliott does the regular Chrome restart
17:45:26 <kallisti> hmmm, when would you use CReal?
17:45:40 <elliott> when you want computable reals
17:45:51 <elliott> if you don't know whether you do or not, you don't
17:46:04 <kallisti> so it would basically be to avoid floating point errors?
17:46:09 <elliott> no
17:46:13 <elliott> that's Rational
17:46:37 <kallisti> so it would basically be to avoid floating point errors when you're not dealing with rational numbers?
17:46:48 <elliott> you are dealing with rational numbers
17:46:51 <elliott> floats are an approximation of rationals
17:46:55 <ais523> kallisti: if it's referring to all computable reals, it only work properly on irrational numbers
17:46:58 <ais523> *works
17:47:07 <elliott> ais523: huh?
17:47:10 <ais523> computable reals that happen to be equal to integers can't actually be converted to decimal expansion
17:47:17 <ais523> you can still compute with them
17:47:24 <elliott> ais523: err, I don't know what you're talking about
17:47:27 <ais523> but you can't do < or > on computable reals unless the numbers happen to actually be different
17:47:29 <elliott> CReal can output approximate decimals just fine
17:47:33 <kallisti> elliott: what about pi?
17:47:37 <elliott> that's got nothing to do with decimal expansion
17:47:39 <elliott> kallisti: if your question involves "avoid", "errors", you don't want CReal
17:47:40 <kallisti> that's irrational and approximated by float.
17:47:47 <elliott> kallisti: unless you're a mathematician, you don't want CReal
17:47:48 <ais523> elliott: I'm thinking of infinite-precision real numbres
17:47:52 <ais523> *numbers
17:47:54 <elliott> or a theoretical CSist
17:48:02 <kallisti> can I pretend to be one of those?
17:48:09 <elliott> ais523: nobody uses the infinite-digit representation
17:48:10 <elliott> kallisti: no.
17:48:10 <kallisti> I mean
17:48:14 <kallisti> I actually have no use case at the moment.
17:48:19 <elliott> kallisti: here's some things CReal can't do:
17:48:19 <kallisti> I was merely curious
17:48:22 <elliott> kallisti: terminate when you do (a == a)
17:48:30 <elliott> kallisti: terminate when you do (a > a)
17:48:34 <ais523> elliott: I've been to seminars where infinite-digit representation was involved
17:48:35 <elliott> kallisti: terminate when you do (a < a)
17:48:49 <ais523> and the main difficulty, as you're mentioning there, is comparing two numbers that happen to be equal
17:48:55 <elliott> ais523: the main difficulty is arithmetic
17:48:57 <kallisti> elliott: you mean /always/ terminate right?
17:49:01 <elliott> that's just a property of the computable reals
17:49:01 <Deewiant> > let a = 1.23 :: CReal in a == a
17:49:01 <elliott> kallisti: no
17:49:02 <lambdabot> True
17:49:06 <elliott> Deewiant: that's a cheat
17:49:09 <ais523> kallisti: no, you get an infinite loop whenever you compare a number to itself
17:49:14 <elliott> CReal's (==) instance just does it to an approximation
17:49:20 <elliott> also
17:49:27 <ais523> elliott: oh, I guess it's approximating with the decimal expansions too?
17:49:28 <elliott> I'm not sure that's Few Digits' CReal
17:49:34 <ais523> as in, there's always a chance that the last digit is wrong?
17:49:37 <ais523> that makes sense
17:50:03 <elliott> ais523: well, um, you can always take a CReal to within a given precision
17:50:07 <elliott> i.e. "pi to 0.0000001"
17:50:28 <ais523> elliott: yes, and your result will have more digits than you asked for, with the last potentially being wrong
17:50:36 <ais523> you can't say "pi to 8 decimal places", though
17:50:52 <kallisti> elliott: they should be renamed to "undecidably equal reals"
17:51:00 <ais523> well, you can because pi is irrational, but you couldn't if there was a chance that the number was actually accurate to 8 decimal places
17:51:10 <elliott> kallisti: you act like you were expecting computable reals to be useful for computation
17:51:35 <kallisti> yeah..
17:51:41 <kallisti> > pi ::CReal
17:51:42 <lambdabot> 3.1415926535897932384626433832795028841972
17:51:45 <kallisti> delicious cereal
17:52:07 <elliott> http://sourcereal.com/
17:52:15 <kallisti> elliott: such a good site
17:52:40 <kallisti> elliott: so CReal isn't good for like... high precision math because it doesn't terminate often?
17:52:56 <elliott> kallisti: even if computable reals were useful for computation, Few Digits is incredibly slow
17:53:02 <elliott> as are all the implementatinos, because... they're not useful for computation
17:53:13 <elliott> it's theory. unless you're a theorist, you don't care.
17:53:22 <elliott> "Few Digits is not fast. Few Digits is part of my Ph. D. research. My goal is to implement an exact real arithmetic package in Coq that is proven correct (with respect to C-CoRN) and is sufficiently fast. The goal is to be fast enough to prove the inequalities required by Hales’s proof of Kepler’s Conjecture."
17:54:03 <kallisti> so I only want to use CReal if I'm proving the inequalities required by Hale's proof of Kepler's Conjecture
17:54:07 <kallisti> got it.
17:54:27 <ais523> elliott: I've been to a seminar that was using computable reals to calculate pi to infinitely many decimal places
17:54:34 <ais523> and we've been using the resulting program as a test of the hardware compiler
17:54:46 <ais523> on the basis that it's the sort of program that makes no sense to typical hardware compilers
17:54:48 <elliott> ais523: that's, err, noteworthy enough for a seminar?
17:54:55 <elliott> I can do that in five lines of Haskell
17:55:07 <ais523> elliott: it was about computable reals, and just an example
17:55:11 <elliott> fair enough
17:55:43 <ais523> I ran the resulting VHDL for almost a week in a simulator on my laptop, it output the first 4 balanced binary digits
17:55:53 <elliott> @quote pi
17:55:54 <lambdabot> quicksilver says: overlapping actually shatters the language into tiny inconsistent pieces, and incoherent files off the edges of the pieces so they don't even fit together any more.
17:55:56 <elliott> erm
17:55:58 <elliott> `quote pi
17:56:00 <HackEgo> 9) <Madelon> Lil`Cube: you had cavity searches? <Lil`Cube> not yet <Lil`Cube> trying to thou, just so I can check it off on my list of things to expirence \ 14) <pikhq> First, invent the direct mind-computer interface. <pikhq> Second, you know the rest. \ 15) IN AN ALTERNATE UNIVERSE: <pikhq> First, invent the direct mind-computer interface. <pikhq> Second, learn the rest with your NEW MIND-COMPUTER INTERFACE. \ 30)
17:56:02 <elliott> gah
17:56:04 <elliott> `quote digit
17:56:06 <HackEgo> 427) <ais523_> meanwhile, I've been running a program for over 24 hours (getting close to 48 now) which is calculating digits of pi, in binary <ais523_> so far, it has found four digits <ais523_> I hope it will find the fifth some time this week \ 513) <pikhq> I actually had a Neopets account. I later gained a second digit in my age. \ 643) <fungot> sadhu: it's been said that boole is the crowning jewel perched
17:56:09 <elliott> 427
17:56:18 <ais523> yep
17:56:22 <ais523> I knew it was in there somewhere
17:57:03 <ais523> part of the slowness is all the interpretation between paradigms
17:58:10 <ais523> simulating FPGA behaviour on a CPU is slow, as they're rather different arches; doing single-threaded recursion on an FPGA isn't really faster than doing it on a CPU; and there was no memoization, in a program designed to run in a call-by-need language
17:58:22 <Gregor> lol, this spam is from "Google Incorporation. (info.google@msn.com)"
17:58:29 <ais523> (OK, so Haskell isn't /technically required/ call-by-need, but what sane interp doesn't implement it like that?)
17:58:36 <ais523> Gregor: that's pretty good
17:58:54 <elliott> <ais523> (OK, so Haskell isn't /technically required/ call-by-need, but what sane interp doesn't implement it like that?)
17:59:00 <elliott> ais523: speculative evaluation is pretty sane!
17:59:25 <ais523> elliott: hmm, what's that, and how is it different from call-by-need?
17:59:43 <elliott> ais523: it isn't a complete strategy itself, it just refers to evaluating thunks even when they're not demanded
17:59:56 <elliott> and looking away sheepishly and pretending nothing happened if it ends up _|_
18:00:09 <elliott> the idea is that you predict which thunks are going to be used in the future and evaluate them ahead of time in another thread
18:00:11 <elliott> thus saving time later on
18:00:21 <ais523> ah, I see
18:00:55 <ais523> presumably that ends up somewhat concurrent if done well?
18:01:15 <elliott> well, you could even not do it in a separate thread
18:01:20 <elliott> you'd just have to bound the number of steps you take
18:01:34 <elliott> to make sure you don't accidentally make a terminating program with a non-terminating subterm less terminating than you'd like
18:02:23 <ais523> elliott: if it's not in a separate thread, there's no benefit to doing it out of order, is there?
18:03:44 <ais523> elliott: what was your Perl question about, btw?
18:03:56 <elliott> ais523: well, you could change [high activity][long pause][result] into [halved activity][result]
18:04:07 <elliott> by using every other cycle to reduce another complicated thunk
18:04:13 <ais523> ah, hmm
18:04:14 <elliott> that will be forced afterwards
18:04:20 <ais523> you don't get the result any faster, but it might look nicer to the user?
18:04:29 <elliott> ais523: well, incremental results are a useful thing :)
18:04:40 <elliott> ais523: you wouldn't have wanted to get no output until the program found every digit of pi, right?
18:04:58 <ais523> but it wouldn't give you any output any earlier
18:05:06 <ais523> it'd just delay some of the outputs
18:05:11 <elliott> <elliott> ais523: well, you could change [high activity][long pause][result] into [halved activity][result]
18:05:15 <elliott> the high activity outputs constantly
18:05:15 <ais523> and you can do that just as easily with a postprocessor
18:05:17 <elliott> as does the result
18:05:37 <ais523> elliott: yep, so you can get a postprocessor that just hides the results until it's ready to feed one to the user and make it look like they're coming constantly
18:05:50 <elliott> heh
18:05:53 <elliott> well, OK
18:06:07 <elliott> ais523: your argument seems to imply threads are useless on a uniprocessor
18:06:11 <ais523> I imagine most people wouldn't find that useful, but in case it's required…
18:06:19 -!- Klisz has quit (Ping timeout: 244 seconds).
18:06:28 <kallisti> ais523: his question was about why Perl is so awesome and why he hasn't been using it since he was 8.
18:06:35 <ais523> elliott: no, we were specifically discussing the single-threaded case
18:06:51 <ais523> I can agree with a concurrent but uniprocessor case, potentially, although I think any performance gains will be marginal
18:10:27 <kallisti> it would be nice if strictness analysis worked perfectly always.
18:10:55 <ais523> I guess it can't because doing so would be uncomputable?
18:11:18 <elliott> ais523: but, umm, what's the difference between doing A, B, A, B, and doing A and B in threads on a uniprocessor machine?
18:12:17 <ais523> because doing A and B in threads can just do "A then B", or it can interleave if necessary to do something like benefit from pipeline stalls
18:12:26 <kallisti> ais523: I think you can get pretty close to perfect..
18:12:48 <elliott> ais523: that's a microoptimisation
18:12:50 <elliott> kallisti: no you can't
18:12:52 <ais523> kallisti: indeed; you can write infinite loop checkers in practice that catch the majority of accidental infinite loops
18:13:04 <elliott> strictness analysis is harder than detecting infinite loops imo
18:13:10 <kallisti> yeah..
18:13:11 <ais523> but you're not going to be able to use them for solving the world's big fundamental problems
18:13:17 <elliott> it's incredibly easy to change semantics
18:13:57 <ais523> elliott: this sort of thing's what my PhD is about, transforming programs without changing their semantics
18:14:14 <ais523> as long as you have a really good type system for the transformation (which needn't be the same as that of the underlying language), it's not too bad
18:14:20 <elliott> ais523: "this sort of thing" -- you took a large leap in generality there :P
18:14:28 <ais523> elliott: indeed :)
18:14:37 <elliott> strictness analysis results in rather simple transformations, they're just really tricky to find
18:17:08 <elliott> 12:35:49: <kallisti> psh, come on. you can totally non-deterministically reverse to multiple past images.
18:17:08 <elliott> 12:35:50: <ais523> elliott_: I'm surprised that you're surprised at that; it's become more and more common recently
18:17:09 <elliott> 12:35:55: <ais523> I'm upset by it, but not surprised
18:17:11 <elliott> I don't keep up with PC gaming
18:17:14 <elliott> 12:36:12: <kallisti> what's wrong with requiring Steam? it's free right?
18:17:28 <elliott> kallisti: must be running to play the game, requires network connection to play the game, forced updates
18:17:32 <elliott> kallisti: DRM
18:18:15 <Deewiant> Network connection isn't required
18:18:34 <elliott> Deewiant: I haven't heard good things about the "offline mode"
18:18:35 <Deewiant> Nor, in all cases, is keeping Steam running; you can often run the game exe directly
18:18:43 <elliott> (Mostly what I've heard is "it doesn't work")
18:18:43 <Deewiant> elliott: It's worked for me the few times I've used it
18:19:22 <elliott> Deewiant: Well, my other objections are still relevant :P
18:19:37 <Deewiant> Forced updates is the only relevant one
18:19:55 <ais523> existence of DRM is often relevant
18:20:12 <Deewiant> I took "DRM" as a summary of the previous points
18:20:38 <ais523> nah, the fundamental concept of DRM is that it prevents you copying the game to a different system
18:20:46 <ais523> the previous points are consistent with that, but don't imply it
18:20:48 <Deewiant> Which Steam doesn't
18:20:57 <ais523> it does if you don't own it
18:21:24 <elliott> Deewiant: It was a summary, yes
18:21:30 <elliott> Another objection: You're not allowed to sell your copy of the game
18:21:36 <elliott> (Or, more generally, share it)
18:22:14 <Deewiant> True enough
18:22:35 <kallisti> I don't think is an objection to "Steam has DRM" as much as it is "games are copyrighted and closed source"
18:22:47 <elliott> Deewiant: Even more generally, I object to buying a physical box containing what is essentially a right to rent the game out :P
18:22:58 <elliott> kallisti: Uhh, no.
18:23:02 <elliott> kallisti: Selling games is not illegal.
18:23:17 <elliott> I can buy a non-Steam game box and sell it and the recipient can play the game.
18:23:19 <ais523> elliott: well, I did just that in the case of Neverwinter Nights; went to a shop and bought the Windows version for a license to download the Linux version (from the manufacturers)
18:23:22 <elliott> I can buy a non-Steam game box and give it to someone else and the recipient can play the game.
18:23:30 <elliott> None of these things are possible with a Steam box.
18:24:07 <elliott> ais523: At least you could move those bits around and have them still work without them being tied to an account
18:24:10 <kallisti> I see.
18:24:19 <elliott> ais523: Although selling them would be illegal because [copyright law]
18:24:28 <ais523> elliott: indeed
18:24:51 <elliott> kallisti: It's pretty impressive that copyright has managed to convince people that wanting to sell something you bought is unreasonable because it's INFRINGEMENT, though
18:25:07 <ais523> I liked Borland's licenses; they were pretty much "please treat this software as a physical object; it's just fine for you to give or sell it to someone else but you must delete all your copies in the process"
18:25:45 <elliott> ais523: well, it's more reasonable than most licenses, but it smells of lawyers demanding that bits be coerced into being like boxes
18:25:59 <ais523> although they generally had a clause that you couldn't use the product to make another product that competed with itself
18:26:14 * elliott wonders what would happen if you just gave people a license to do absolutely anything with the downloaded binaries
18:26:15 <ais523> so, say, you couldn't produce a commercial C compiler using Borland C
18:26:20 <elliott> sure, it'd make it legal to put it up on a torrent site
18:26:24 <elliott> but it'll end up on a torrent site /anyway/
18:26:37 <elliott> so if it doesn't noticeably increase piracy and the like, it sounds like a good idea
18:26:44 <elliott> because of all the hassle it eliminates
18:26:45 <ais523> elliott: I'm upset that game companies don't sell legal ROMs
18:26:53 <ais523> I know quite a few people who'd buy them; I probably would
18:27:01 <ais523> (that is, console game companies)
18:27:08 <elliott> heh
18:27:21 <elliott> unfortunately that runs into the problem that ROMs have tons of formats
18:27:24 <calamari> ais523: many years ago atari licensed some of their arcade roms to a company called star roms.. I bought a few of them
18:27:24 <ais523> the ROM is going to get dumped anyway, so why not give a legal access route for it rather than force people who want it to get it illegally?
18:27:30 <elliott> and many of them are bad (= can't accurately represent the source media)
18:27:41 <elliott> and the chances of the game company picking the right one are very small :P
18:27:48 <elliott> *games
18:27:49 <ais523> people would write converters
18:27:58 <elliott> ais523: you can't write a converter from a broken format to a working one
18:28:04 <ais523> well, OK
18:28:06 <calamari> yeah that's what happened.. star roms handled the formatting of it for mame or whatever
18:28:17 <ais523> I'd assume they'd pick a format that contained all necessary info
18:28:20 <Vorpal> elliott: for modern roms you just need a memory dump. Much harder for snes era and older of course.
18:28:23 <elliott> ais523: consider that the vastly most common SNES ROM format is broken
18:28:27 <elliott> well, *formats
18:28:38 <elliott> to my understanding
18:28:42 <ais523> elliott: hmm, what info does it miss?
18:28:42 <Vorpal> indeed
18:28:51 <elliott> ais523: ask pikhq for details
18:29:09 <elliott> http://bos.github.com/criterion/ oh my god this is so pretty
18:29:43 <kallisti> Valve Corporation President Gabe Newell also stated "most DRM strategies are just dumb" because they only decrease the value of a game in the consumer's eyes.
18:29:46 <kallisti> heh
18:30:00 <ais523> wow, is that using something like 200-space indents?
18:30:10 <elliott> ais523: ?
18:30:20 <ais523> let me take a screenshot
18:31:06 <fizzie> Nuance's "Dragon Dictation" for iPhone has funny license terms: "You may not: -- (i) use the Service for purposes of comparison with or benchmarking against products or services made available by third parties." So you can't compare it with other iDevice speech recognition things in order to pick one of them to use.
18:31:29 <Vorpal> fizzie: ... wtf
18:31:30 <kallisti> elliott: what's up with all the letters blending together at the bottom...
18:31:42 <Vorpal> kallisti: where?
18:31:46 <elliott> kallisti: that's a standard linux/chromium font rendering problem
18:31:53 <elliott> try Ctrl + Ctrl -
18:32:00 <Vorpal> kallisti: the link? works fine in firefox
18:32:14 <kallisti> elliott: oh weird.
18:32:24 <kallisti> elliott: I thought that was going to do... nothing, but it fixed it.
18:32:29 <fizzie> And the "no reverse engineering" clause is particularly broad too: "You may not -- decompile, disassemble, reverse engineer or otherwise attempt to derive, reconstruct, identify or discover any source code, underlying ideas, or algorithms, of the Software or Service by any means". If you're literal enough, you can't even just idly wonder what they've done, because it would be "identifying underlying ideas".
18:32:34 <ais523> bleh, imgur got stuck at 79%
18:32:37 <calamari> speaking of linux.. I switched to lubuntu (lxde) and I like it
18:32:40 <elliott> ais523: ompldr.org?
18:32:43 <Deewiant> fizzie: Identifying would be getting it correct
18:32:47 <ais523> elliott: what's that site about?
18:32:57 <Deewiant> fizzie: You can wonder as long as you wonder about the wrong things
18:32:57 <fizzie> Deewiant: Okay, "attempting to identify".
18:33:01 <elliott> ais523: hardcore pornography and warez, obviously
18:33:10 <Deewiant> fizzie: Oh, true. Heh.
18:33:12 <ais523> hmm
18:33:16 <ais523> I'll just describe it
18:33:22 <elliott> also, file hosting
18:33:28 <elliott> and not hardcore pornography and warez
18:33:31 <elliott> but close enough
18:33:55 <ais523> it looks like JavaScript, or a similar language; it starts beyond the left edge of the screen, and the first line is ','","");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AHAL.x){AL.x
18:33:58 <fizzie> Deewiant: Someone at work had tried to use it (they added the Finnish option just recently), got some bad results for complicated words with lots of suffixes, and wondered about the language model; felt tempted to say "no, stop! you're attempting to identify ideas!"
18:34:07 <Vorpal> ais523: where is that from?
18:34:07 <calamari> haha top files.. 2 are ponies
18:34:08 <ais523> then the second line, and all the lines on the first screen, start level with the H in AHAL
18:34:12 <ais523> Vorpal: elliott's link
18:34:15 <Vorpal> ais523: no?
18:34:21 <Vorpal> ais523: what browser are you using
18:34:22 <elliott> ais523: s.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright=
18:34:22 <elliott> G-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("
18:34:28 <elliott> ais523: looks like your browser misparses html
18:34:29 <ais523> Vorpal: Firefox
18:34:44 <Vorpal> ais523: that stuff doesn't show up in my firefox window. Nor in view source
18:34:50 <elliott> function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}
18:34:52 <ais523> elliott: then a screenful down from that, it starts even /further/ to the right, about one and a half screenfuls of horizontal scorlling
18:34:52 <elliott> what a good function
18:35:01 <elliott> ais523: run it in a non-broken browser
18:35:05 <Vorpal> ais523: the whole page is a script though
18:35:07 <elliott> *load
18:35:13 <elliott> Vorpal: no it's not
18:35:18 <elliott> well, the chart-drawing is
18:35:29 <fizzie> The Chromium "let's mangle letters together" thing is slightly annoying. (I've been using Chromium lately because my Firefox got so full of tabs I haven't dared to restore-session it, and I don't want to be all ineiros about it.)
18:35:30 <Vorpal> right, I just right clicked and went "view source"
18:35:37 <ais523> below that, about two screenfulls scrolling to the right, are the words "criterion performance measurements" in really large font
18:35:44 <elliott> ais523: you can stop describing
18:35:56 <ais523> and then various information, with a rather worrying amount of vertical spacing
18:36:01 <ais523> elliott: I'm just amused that you found it all beautiful
18:36:02 <Vorpal> ais523: which firefox version?
18:36:04 <elliott> fizzie: it never used to happen to me before i switched to arch; I think Chrome might not have that problem somehow
18:36:08 <elliott> ais523: because it doesn't look like that
18:36:10 <ais523> Vorpal: 3.6
18:36:20 <elliott> ais523: ha ha, I'm seeing something different to you and I think it looks nice
18:36:20 <Vorpal> ais523: that is ancient!
18:36:24 <elliott> amusing!
18:36:25 <Vorpal> ais523: I'm on 8.0.1
18:36:25 <ais523> elliott: in that case, why won't you believe me when I say github is broken?
18:36:28 <calamari> seemed to look okay for me.. ff 8 in linux
18:36:33 -!- elliott has left ("ragepat").
18:36:36 -!- elliott has joined.
18:36:37 -!- elliott has left ("ragepart").
18:36:50 <Vorpal> ais523: let me try on whatever luicd has
18:37:16 <kallisti> @tell elliott fuckfacer
18:37:16 <lambdabot> Consider it noted.
18:37:20 -!- hagb4rd has joined.
18:37:35 <ais523> @ignore kallisti
18:37:35 <lambdabot> Not enough privileges
18:37:39 <ais523> hmm
18:37:45 <ais523> how do I tell it not to let kallisti @tell me?
18:37:49 <ais523> @help tell
18:37:50 <lambdabot> tell <nick> <message>. When <nick> shows activity, tell them <message>.
18:37:59 <ais523> @help commands
18:38:00 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
18:38:03 <kallisti> @tell elliott -shooshpap-
18:38:04 <lambdabot> Consider it noted.
18:38:05 <ais523> @list
18:38:05 <lambdabot> http://code.haskell.org/lambdabot/COMMANDS
18:38:07 <calamari> what elliott just did reminds me of when I am trying to get off the phone with someone and saying the usual crap and the phone disconnects
18:38:09 <Vorpal> ais523: yeah it is broken on firefox 3.6
18:38:19 <calamari> do I call back to say "bye", or just leave it at that?
18:38:20 <Vorpal> ais523: just upgrade already
18:38:28 <hagb4rd> hm html5 gepaart mit ein wenig krimineller energie.. enjoy ;)
18:38:32 <hagb4rd> http://homepage.alice.de/hagbard/disintegration.html
18:38:38 <kallisti> never call to say bye
18:39:12 <calamari> yeah I don't,, it's just awkward .. so rejoining irc to correct your /quit typo seems weird lol
18:39:13 <Vorpal> ais523: in a modern browser it really has a very nice design
18:39:25 <ais523> Vorpal: isn't being broken on a reasonably recent browser (Firefox 3.6 is reasonably recent, even if the version numbers have been going stratospheric recently to hide it) a sign of a badly-designed website?
18:39:59 <Gregor> I can't think of a clever way to format my code for my IOCCC entry.
18:40:00 <Deewiant> Firefox 3.6 is two years old
18:40:02 <Vorpal> ais523: maybe. But then it might be a bug in firefox 3.6
18:40:13 <ais523> Deewiant: right, it's only two years old
18:40:14 <calamari> didn't work in ie 6
18:40:14 <Gregor> I'm thinking I'll just indent it nicely and say "look: even indented nicely it's incomprehensible"
18:40:18 <calamari> (kidding, didn't test that)
18:40:20 <Vorpal> ais523: I don't think you should design for anything but the official specs.
18:40:30 -!- elliott has joined.
18:40:31 <Vorpal> ais523: if a browser is buggy is it not the problem of the web designer
18:40:33 <elliott> calamari: It was a /part typo!
18:40:34 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
18:40:43 -!- elliott has quit (Quit: this is a quit typo!).
18:40:55 <Vorpal> ais523: it is the problem of the browser programmers
18:40:57 <fizzie> Deewiant: But latest 3.6.x is less than a month old.
18:41:05 <Vorpal> ais523: do you disagree about that?
18:41:07 <fizzie> (3.6.24, Nov 08.)
18:41:13 <ais523> Gregor: I've had the best indentation idea ever for my entry
18:41:14 <ais523> it's managed to confuse every prettypogram I've tried yet
18:41:17 <ais523> Vorpal: perhaps; I'm not convinced that the website is following the specs, though
18:41:32 <Deewiant> fizzie: Since < 3.6.10 they've all been only security updates
18:41:36 <Vorpal> ais523: I could throw it into the w3c validator. Not sure it does js
18:41:56 <ais523> well, it shouldn't be displaying scripts it doesn't understand
18:42:04 -!- elliott has joined.
18:42:04 <Vorpal> well, it isn't
18:42:05 <elliott> ais523: It is; your browser misparses comments.
18:42:08 <fizzie> Deewiant: An update is an update is an update.
18:42:09 <ais523> and it should gracefully degrade for people with scripts turned off (I have scripts turned off)
18:42:16 <calamari> elliott: glad you found my analysis amusing tho
18:42:19 <ais523> elliott: hmm, aha, I think I might know what the problem is
18:42:23 <Vorpal> "118 Errors, 5 warning(s) "
18:42:38 <ais523> does the page have a "comment" starting <!-- which contains an -- somewhere inside it?
18:42:40 <Deewiant> fizzie: But the issue here (if any) is probably related to the layout engine, which is the same in all 3.6.x.
18:42:41 <Vorpal> elliott: the thing is broken: http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fbos.github.com%2Fcriterion%2F%23grokularation
18:42:55 <elliott> ais523: yes, but that's irrelevant
18:42:58 <elliott> j<0){j++}if(j>1){j--}if(
18:43:09 <elliott> ais523: HTML is not SGML
18:43:13 <ais523> elliott: no it isn't; SGML parsing, -- toggles a comment inside <!
18:43:18 <elliott> ais523: HTML is not SGML]
18:43:19 <Gregor> Yup, definitely leaning towards indent -kr -nut
18:43:23 <ais523> what version of HTML does the page claim to use?
18:43:27 * ais523 checks
18:43:28 <elliott> ais523: irrelevant
18:43:36 <Vorpal> elliott: that is besides the point since the page doesn't validate in the doctype it gives
18:43:36 <elliott> ais523: in fact, Firefox ignored --s for the longest time
18:43:47 <ais523> elliott: /not/ irrelevant, as sufficiently old versions of HTML use SGML comment parsing, don't they?
18:43:51 <elliott> ais523: but Ian Hixie pestered them to "fix" it (IIRC) during the acid 2 days
18:43:57 <Vorpal> elliott: hello?
18:44:02 <elliott> then later realised he was wrong and everyone removed -- parsing
18:44:10 <elliott> ais523: no, old HTML versions use whatever browsers parse them as
18:44:19 <Vorpal> nor do the CSS validate http://jigsaw.w3.org/css-validator/validator?profile=css2&warning=2&uri=http%3A%2F%2Fbos.github.com%2Fcriterion%2F
18:44:30 <Vorpal> elliott: PAGE IS BROKEN. DO YOU HEAR ME?
18:44:39 <ais523> Vorpal: he probably has you on ignore
18:44:42 <elliott> ais523: e.g., the relevant parsing algorithm nowadays is the HTML5 algorithm, which applies to /all/ HTML versinos
18:45:06 <ais523> at least he hasn't reacted to anything you've said in my scrollback
18:45:07 <Vorpal> ais523: can you give him the relevant link to tell him he is wrong then? http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fbos.github.com%2Fcriterion%2F
18:45:07 <elliott> Vorpal: (a) I'm not responding to you because you're not saying anything relevant (b) stop being so fucking impatient, even if I was intending to respond to you I can't type this fast to two people at once
18:45:13 <elliott> (c) you're an idiot
18:45:21 <ais523> ah, mental ignore
18:45:29 <Vorpal> no I'm not. The official standard is the official standard.
18:45:32 <Vorpal> There is nothing more to it.
18:45:34 <fizzie> Vorpal: Sadly, post-3.6.x Firefox no longer (I believe) supports OS X 10.4. :/
18:45:42 <Vorpal> fizzie: heh
18:45:47 <ais523> fizzie: nor does Apple, presumably?
18:45:59 <kallisti> ?SDdd
18:45:59 <lambdabot> Unknown command, try @list
18:46:06 <elliott> Vorpal: indeed, you are continuing to reaffirm your status as idiot (I'm responding to you now, are you happy?)
18:46:12 <fizzie> ais523: Probably not, but newer versions cost money, and newest versions don't do PowerPC hardware either.
18:46:24 <ais523> fizzie: right, indeed
18:46:29 <Vorpal> elliott: certainly. Why are standards idiotic, as you seem to suggest is your opinion?
18:46:33 <elliott> lol
18:46:50 <elliott> yeah okay I'm putting you on actual real /ignore for a while, enjoy your timeout
18:47:01 <elliott> on less stupid topics: wow, qemu 1.0 is out
18:47:04 <Vorpal> *shrug*, I'm going to reboot to play skyrim.
18:47:13 <elliott> fizzie: Uh, 10.5 does PPC>
18:47:14 <elliott> *.
18:47:23 <fizzie> elliott: Yes, that's why "newest" and not "newer".
18:47:25 <ais523> elliott: hmm, there are only two sorts of projects, those which start at or above 1.0, and those who never reach it
18:47:29 <ais523> thus, umm, qemu doesn't exist
18:47:44 <Deewiant> Nor does your web browser
18:48:07 <calamari> ais523: so what happened when wine went 1.0?
18:48:19 <Vorpal> or meh, dredmor rather
18:48:44 <ais523> calamari: hey, enough people have called me on an obviously incorrect sweeping generalisation! you don't have to too, especially when I didn't mean it seriously!
18:48:49 <ais523> Vorpal: hmm, I was playing dredmor last night
18:48:57 <elliott> ais523: people should use mcmap's versioning scheme instead; it recently updated from version 7e7d04d to version b0bd464
18:48:57 <calamari> ais523: it was meant as a joke :)
18:48:59 <ais523> it seemed a bit buggy, and I hate the controls, but otherwise it seems like a good game
18:49:16 <calamari> ais523: there were plenty of silly comebacks possible :)
18:49:19 <Vorpal> ais523: oh, not a fan of wasd? I think the keys are rebindable
18:49:19 <ais523> elliott: most versioning systems benefit from having at least an obvious partial order
18:49:33 <elliott> ais523: I'm sure git commit trees have such a thing
18:49:35 <ais523> Vorpal: not a fan of having to use the mouse for most actions
18:49:45 <Vorpal> ais523: ah
18:49:49 <ais523> elliott: they do; but the version number abbreviations don't have one that can be counted mentally
18:49:58 <ais523> Vorpal: in particular, I think it's ridiculous that I can't just bump-attack enemies
18:50:05 <ais523> and it took me quite a while to figure out how to cancel spellcasting
18:50:11 <Vorpal> right
18:50:17 <ais523> (you press the left mouse button while still holding the right mouse button)
18:50:27 <Vorpal> ais523: I'm not playing a spellcaster, so haven't run into that problem yet
18:50:31 <ais523> inventory management is awkward, too
18:50:36 <ais523> Vorpal: it applies for everything else as well
18:50:41 <Vorpal> right
18:50:41 <ais523> incidentally, the tutorial is uncompletable
18:50:47 <Vorpal> ais523: yes I found out that bug too
18:50:50 <ais523> because the tutorial character's stats are too low
18:50:57 <calamari> I really need to get this capture driver working on ntsc
18:50:59 <Vorpal> ais523: should report it somewhere
18:51:00 <ais523> seems like a reasonably obvious oversight
18:51:15 <ais523> Vorpal: meh, commercial game, if they want bug reports they should pay for them
18:51:21 <Vorpal> hahaha
18:51:32 <Vorpal> ais523: anyway, if your game suddenly crashes there is a patch for the data files on the forum. Worked for me
18:51:41 <ais523> that hasn't happened to me yet
18:52:07 <elliott> ais523: many companies do offer token rewards for reporting sufficiently important bugs
18:52:17 <ais523> elliott: indeed, and that makes sense
18:52:31 <ais523> a company would probably be incorrect not to do so, economically speaking
18:52:53 <Vorpal> ais523: so what do you think it apart from those bugs and the control scheme?
18:52:55 <Deewiant> Too bad that most commercial software doesn't have public bug trackers
18:53:22 <elliott> Deewiant: The game Phantom_Hoover had a problem with was worse than that; it had a public BugZilla
18:53:41 <elliott> (The joke is that Bugzilla is the worst piece of software ever created)
18:54:07 <ais523> Vorpal: it's interesting so far; it feels rather grindy, and somewhat spoilery when it comes to monsters, though
18:54:11 <ais523> it reminds me of Crawl more than anything else
18:54:15 <Vorpal> ah
18:54:27 <ais523> elliott: it's the only site I've ever found with a login that works with cookies disabled
18:54:37 <ais523> admittedly, it makes you log in every screen, but it works
18:54:42 <Vorpal> ais523: I believe there is an option for less grinding in the new game options thingy
18:54:49 <ais523> Vorpal: there is, perhaps I'll try it
18:55:30 <kallisti> seriously lambdabot could easily allow deleting of single @let binds..
18:55:49 <ais523> @let id = flip
18:55:50 <lambdabot> <local>:1:17:
18:55:50 <lambdabot> Ambiguous occurrence `id'
18:55:50 <lambdabot> It could refer to either `...
18:55:54 <elliott> kallisti: not really
18:55:59 <ais523> @let true = false
18:56:00 <lambdabot> <local>:3:7: Not in scope: `false'
18:56:05 <ais523> oh, right
18:56:10 <ais523> and I can't redefine type constructors
18:56:17 <ais523> besides, it should be False = True
18:56:27 <elliott> > let False = True in False
18:56:29 <lambdabot> False
18:56:34 <elliott> > let False = True in False == True
18:56:34 <ais523> @let False = True
18:56:35 <lambdabot> Defined.
18:56:35 <lambdabot> False
18:56:39 <ais523> oh, wow, it does work?
18:56:48 <elliott> yes
18:56:49 <ais523> > False
18:56:50 <lambdabot> False
18:56:59 <ais523> that is, @let on type constructors
18:57:07 <kallisti> @let [] = []
18:57:08 <lambdabot> Defined.
18:57:08 <kallisti> ais523: sure
18:57:10 <elliott> hmm, I forget why that match ends up non-strict
18:57:13 <Deewiant> > []
18:57:13 <lambdabot> []
18:57:14 <ais523> > False != True
18:57:15 <lambdabot> Not in scope: `!='
18:57:21 <kallisti> @let 0 = 5
18:57:21 <ais523> what's not-equals in Haskell?
18:57:22 <lambdabot> Defined.
18:57:23 <Deewiant> > False /= True
18:57:24 <lambdabot> True
18:57:30 <kallisti> > 0 == 5
18:57:31 <ais523> I don't think the definition is working, though
18:57:31 <lambdabot> False
18:57:32 <kallisti> WOW AMAZING
18:57:35 <kallisti> IT'S LIKE
18:57:36 <kallisti> PATTERN
18:57:37 <kallisti> MATCHING
18:57:39 <kallisti> NOTHING
18:57:40 <kallisti> AWESOME
18:57:44 <kallisti> :)
18:57:46 <elliott> ais523: it's not a definition
18:57:50 <elliott> ais523: it's a pattern-match
18:57:55 <elliott> ais523: let x:xs = ys in ...
18:57:58 <elliott> ais523: let (:) x xs = ys in ...
18:58:01 <elliott> ais523: let Right x = y in ...
18:58:04 <elliott> ais523: let True = y in ...
18:58:09 <elliott> ais523: let y = False; True = y in ...
18:58:11 <elliott> ais523: let True = False in ...
18:58:32 <elliott> Deewiant: why does that match end up non-lazy, do you know
18:58:39 <Deewiant> Which match
18:58:45 <ais523> elliott: hmm, surely it's just matching True against True, finding that they match, and returning False?
18:58:49 <ais523> @let 2 + 2 = 5
18:58:50 <lambdabot> <local>:7:2:
18:58:50 <lambdabot> Multiple declarations of `L.+'
18:58:50 <lambdabot> Declared at: <local>:3...
18:58:55 <elliott> Deewiant: True = False
18:58:56 <elliott> ais523: what
18:59:00 <ais523> @let 2::Integer + 2::Integer = 5
18:59:00 <lambdabot> Parse error: 2
18:59:06 <ais523> elliott: I'm trying to redefine +
18:59:10 <elliott> that wasn't
18:59:12 <elliott> what the what
18:59:13 <elliott> was to
18:59:15 <elliott> but you can't do that
18:59:17 <elliott> <ais523> elliott: hmm, surely it's just matching True against True, finding that they match, and returning False?
18:59:19 <elliott> that was twhat the what was to
18:59:20 <Deewiant> @unlet
18:59:21 <lambdabot> Defined.
18:59:42 <Deewiant> elliott: Where is it non-lazy?
18:59:49 <elliott> Deewiant: erm
18:59:53 <elliott> Deewiant: why does it end up lazy, rather :)
18:59:56 <ais523> @let flip = id
18:59:56 <lambdabot> <local>:8:0:
18:59:56 <kallisti> `run paste `which word`
18:59:56 <lambdabot> Multiple declarations of `L.flip'
18:59:57 <lambdabot> Declared at: .L.hs:...
18:59:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.24476
19:00:00 <elliott> > let Right _ = Left () in ()
19:00:01 <lambdabot> ()
19:00:04 <elliott> oh, duh
19:00:11 <Deewiant> elliott: Why wouldn't it :-P
19:00:12 <ais523> kallisti: why would you pastebin the output of which?
19:00:13 <elliott> > let Right _ = undefined in ()
19:00:14 <lambdabot> ()
19:00:15 <elliott> right, all matches are lazy
19:00:18 <elliott> just not in that sense
19:00:19 <ais523> `run which word
19:00:21 <HackEgo> ​/hackenv/bin/word
19:00:28 <kallisti> ais523: .....
19:00:41 <fizzie> Deewiant: ITYM @undefine; but is it the typofix that makes @unlet into @let which causes it to say "Defined."?
19:00:45 <ais523> that's like, umm, pastebinning the output of whoami
19:00:55 <kallisti> I'm pastebinning the file it refers to
19:00:55 <Deewiant> @undef
19:01:02 <Deewiant> @let
19:01:03 <lambdabot> Defined.
19:01:04 <ais523> kallisti: oh, right
19:01:05 <kallisti> which makes way more sense.
19:01:08 -!- calamari has quit (Quit: Leaving).
19:01:12 <Deewiant> fizzie: Thanks, and presumably.
19:02:08 <elliott> @let
19:02:09 <lambdabot> Defined.
19:02:13 <elliott> @let <
19:02:13 <lambdabot> Parse error: <
19:02:32 <elliott> @let x = 2 + 2
19:02:33 <lambdabot> Defined.
19:02:39 <elliott> @let where (+) = undefined
19:02:40 <lambdabot> Parse error: where
19:02:42 <elliott> Aww. :(
19:02:48 <Deewiant> @undef
19:02:56 <Deewiant> @let x = 2 + 2 where (+) = undefined
19:02:57 <lambdabot> Defined.
19:03:01 <elliott> Yes, that's obvious
19:03:10 <elliott> Deewiant: Gimme two lines which are valid definition lines by themselves but which, when concatenated, form a valid definition themselves
19:03:12 <elliott> Thx
19:03:42 <Deewiant> @let y = 2 + 2 where
19:03:43 <lambdabot> Defined.
19:03:54 <Deewiant> @let (+) = undefined
19:03:54 <lambdabot> <local>:2:6:
19:03:54 <lambdabot> Ambiguous occurrence `+'
19:03:54 <lambdabot> It could refer to either `L....
19:03:58 <Deewiant> elliott: Something like that? :-P
19:04:07 <elliott> Deewiant: Nice
19:04:16 <Deewiant> Of course the indentation makes the latter invalid by itself
19:04:21 <elliott> Deewiant: Unfortunately the clash is problematic...
19:04:27 <Deewiant> Except in contexts where the indentation is valid
19:04:29 <Deewiant> @undef
19:04:32 <elliott> @undefine
19:04:39 <elliott> I don't think that's working
19:04:45 <elliott> > y
19:04:47 <lambdabot> y
19:04:49 <Deewiant> > 2 + 2
19:04:50 <elliott> heh
19:04:50 <lambdabot> 4
19:04:52 <Deewiant> Works fine
19:05:28 <elliott> <mrakan> A hundred students have submitted their homework: a single Haskell module filled with functions of predefined names and types. I have correct function definitions in a module of my own: Correct.hs. What would be the best way to automatically verify how correct the students' homeworks are?
19:05:30 <elliott> I found ais523.
19:05:41 <elliott> <mike-burns> Review each homework line-by-line, offering feedback on what they did wrong, what they did right, and what was technically correct but could lead to problems.
19:05:46 <elliott> I found ais523's nemesis.;
19:05:55 <elliott> s/;$//
19:06:01 <ais523> elliott: heh
19:06:07 <ais523> I sometimes have to override the marking script
19:06:17 <ais523> but the whole point of these questions is that they're designed for automatic marking
19:06:29 <ais523> and there's another separate set of questions that aren't, and are marked by hand by eight other people
19:06:36 <ais523> so feedback both ways
19:07:23 <elliott> ais523: I would just spend all my time trying to craft programs that would fool the automatic marking system :(
19:08:07 <ais523> elliott: I only know of two; in both cases, I caught them checking the programs by eye, and emailed the student about them
19:08:30 <elliott> ais523: no, mine would overwrite your mailbox to remove the evidence
19:08:43 <ais523> elliott: I doubt you'd be able to break the sandbox
19:09:01 <elliott> I CAN DO ANYTHING IF I TRY HARD ENOUGH
19:09:05 <ais523> you'd need to either find a bug in ocamlc's parser, or in the part of ocamlrun that loaded the resulting compiled code into memory
19:09:16 <ais523> arbitrary code execution bug, that is
19:09:56 <kallisti> I wonder if my CS professors run our programs in a sandbox.
19:12:45 <kallisti> is there such a thing as like...
19:12:50 <kallisti> a file-system hash table?
19:13:11 <kallisti> basically to avoid sequentially reading large amounts of data that you only want to access by keys.
19:13:25 <elliott> it's called
19:13:27 <elliott> a directory
19:13:42 <kallisti> ah of course.
19:14:04 <kallisti> I could convert my markov model to a massive directory structure.
19:14:22 <elliott> kallisti: you should definitely keep it in memory.
19:14:30 <kallisti> I am.
19:14:36 <kallisti> I wasn't even considering that.
19:14:47 <kallisti> that question wasn't even related to the markov model stuff actually.
19:15:56 <fizzie> There is also a seek system call which lets you jump ahead within a file without sequentially reading through it and throwing everything away.
19:18:27 <ais523> and mmap, which lets you map a portion of a file into memory
19:19:15 <fizzie> Also they are "experimentally" keeping our Scheme-based "introduction to programming" courses for people who are interested.
19:19:37 <kallisti> fizzie: soon to be replaced by Java and C++
19:19:46 <kallisti>