00:01:19 <oerjan> maybe a local one, somewhere
00:03:25 <oerjan> definitely not in norway; in fact from http://www.regjeringen.no/nb/dep/bld/kampanjer/familia/familia-42006/diverse-saker/-gavekort-til-jul-25-milliarder-kroner-i.html?id=536565 i see the default is 3 years unless otherwise agreed
00:05:22 <Sgeo> http://en.wikipedia.org/wiki/Second_order_cellular_automaton you could just slap this onto GoL?
00:05:32 <oerjan> although that article ends with an example of inconsistent confusing terms
00:07:38 -!- Wamanuz5 has joined.
00:08:14 <zzo38> How commonly are the various typesetting units for distances used today?
00:08:16 * Sgeo wants to see what that would look like
00:08:47 <Sgeo> I guess some by-hand calculations are in order
00:09:19 <Sgeo> Let's pretend that generations 0 and 1 are always the same... unless that would always lead to a dead universe. I think it does for still-lives but not ... wait, that makes no sense
00:11:41 <zzo38> What I want to make in TeXnicard is something that it can read and understand the text of all of the cards and then compile it to make a computer program that can enforce the rules (maybe something like Inform7 but with many differences).
00:12:48 -!- Wamanuz5 has quit (Ping timeout: 260 seconds).
00:13:19 -!- Wamanuz5 has joined.
00:13:44 <oerjan> Sgeo: it does for patterns which die immediately in life, i think
00:14:05 -!- olsner has quit (Ping timeout: 258 seconds).
00:14:06 <oerjan> i mean, those become still-lives in this version
00:14:15 <Sgeo> Wait, for generations 0 and 1, should 0 -> 1 by normal GoL rules?
00:14:33 <Sgeo> Wait, I just killed the Oerjan Still Lives
00:15:02 <oerjan> Sgeo: that is equivalent to setting generation -1 all zeros, i think
00:15:32 <oerjan> this is reversible, so you can extend it both ways
00:16:49 <Sgeo> Ok, under these rules, 1 cell in gen 0 ... dies the death, I think. What pattern dies in 2 generations?
00:16:55 <Sgeo> Or am I just confused here
00:17:13 <Sgeo> I mean, normal GoL pattern
00:18:02 <oerjan> a pattern dies in generation 2 iff the gol result of generation 1 == generation 0
00:19:03 <oerjan> also, you have no way to make it _stay_ dead
00:19:21 <Sgeo> I mean, dies in 2 generations by GoL rules
00:19:33 <Sgeo> oerjan, stay dead?
00:19:48 <Sgeo> Oh, hmm, I was thinking empty universe == stay dead, which makes no sense
00:20:32 <oerjan> the only thing that produces an indefinitely empty universe is an indefinitely empty universe
00:21:45 <Sgeo> Can there exist any motion? Perhaps not in an empty universe, but
00:21:55 -!- Wamanuz5 has quit (Remote host closed the connection).
00:22:30 <Sgeo> Wait, scratch that.. I'm barely thinking about this
00:23:26 <zzo38> Would it makes sense for "5P6" means "66pt" while "5p6" means "66bp"?
00:23:43 <zzo38> (This information is based on the Wikipedia article titled "Pica (typography)")
00:24:41 <zzo38> (That is, instea of using "pc" since different units might be used)
00:26:09 -!- olsner has joined.
00:27:53 <Sgeo> It should be easy enough to convert it into a more normal CA describable as cells with 4 states, but I need to sit still long enough to do so
00:29:46 -!- Wamanuz5 has joined.
00:29:59 -!- elliott has joined.
00:30:29 <zzo38> Apparently, according to North Korean writing rules, names of leaders Kim Il-sung and Kim Jong-il must always be set off in bold.
00:30:44 <zzo38> Wikipedia mentions it but has no citation.
00:31:03 <oerjan> well it sounds utterly believable
00:35:02 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
00:35:50 -!- oerjan has quit (Quit: Good night).
00:36:24 -!- Wamanuz5 has quit (Ping timeout: 240 seconds).
00:37:29 -!- Wamanuz5 has joined.
00:38:05 -!- cheater_ has joined.
00:41:28 <elliott> 14:46:34: -!- Elizacat has joined #esoteric.
00:41:31 <elliott> 14:46:44: * Elizacat pokes Vorpal
00:41:39 <elliott> careful, you might catch whatever it is that Vorpal has
00:41:47 -!- Wamanuz5 has quit (Ping timeout: 250 seconds).
00:41:53 <elliott> 14:30:55: <Sgeo> Shortly afterwards, elliott complained about this, but while doing so, repeated the original intent, exactly as it appeared in the original emaill.... so that in Gmail, and perhaps some other clients, it looked like elliott was just quoting what appeared in a previous email.
00:41:58 <elliott> um, that wasn't intentional.
00:42:02 <elliott> that was just coincidental wording.
00:42:22 <elliott> and I still think that being able to object to your own inactivity intent is a Bad Thing.
00:42:46 -!- Wamanuz5 has joined.
00:43:13 <elliott> 14:07:45: <Phantom_Hoover> I never quite got the whole anti-loanword thing.
00:43:13 <elliott> usually it's a purity thing, see: l'Académie française
00:45:36 <monqy> you were standing up?
00:45:57 <elliott> 06:56:21: <Lymee> Let's make a page calling Haskell a wimpmode of Unlambda
00:46:01 <elliott> Lymee: oh come on, at least Lazy K
00:47:12 <elliott> 09:13:30: <Lymee> I went and made a basic optimizing Brainfuck->C compiler in Scala.
00:47:13 <elliott> 09:14:02: <Lymee> It might benefit from code to recognize balanced loops and handle them specially.
00:47:25 <elliott> Lymee: balanced loops reduce to polynomials
00:47:33 <elliott> 12:42:38: <Lymee> while(ptr[0]){
00:47:33 <elliott> 12:42:38: <Lymee> ptr[0]-=1;
00:47:43 <Sgeo> Dear Google Docs: Fuck you
00:48:03 <Lymee> elliott, no, not really.
00:48:19 <Lymee> I'm only merging sequences of +->< right now
00:48:29 <Lymee> I need to do something about balanced loops.
00:48:39 <elliott> Lymee: do you handle +>+-<-
00:49:25 <elliott> Lymee: balanced loops: copy esotope or http://mazonka.com/brainf/bff4.c (see the initial comment and grep for /LNR/)
00:49:31 <elliott> note that latter is an interpreter
00:49:38 <Lymee> elliott, yes, that should be eliminated
00:49:57 -!- Wamanuz5 has quit (Ping timeout: 276 seconds).
00:51:49 <elliott> for the esotope code (Python), see https://bitbucket.org/lifthrasiir/esotope-bfc/overview.
00:51:56 <elliott> it is by far the most advanced optimising compiler anyone has written.
00:52:01 <elliott> compiles hello world into a print statement
00:52:05 <Lymee> If you know the loop is balanced, you can compile it into a sequence of int loops=some_function(ptr[0],ptr_0_change);ptr[0]=0;ptr[1]=(some number)*loops; right?
00:52:31 <elliott> you can compile it to much less than that.
00:53:03 <elliott> http://code.google.com/p/esotope-bfc/wiki/Optimization has some fairly outdated information on esotope's optimisation
00:53:23 <elliott> e.g. it now manages to eliminate dead code and propagate conditions
00:54:45 <elliott> Lymee: you could also ask lifthrasiir (the author of esotope), ais523 or Vorpal for information on reducing balanced loops to polynomials.
00:56:31 <elliott> 13:42:38: * Phantom_Hoover notes that his understanding of special relativity has collapsed.
00:56:32 <elliott> 13:42:48: <Phantom_Hoover> Or, more likely, wasn't there to begin with
00:56:32 <elliott> 13:43:43: <Vorpal> Phantom_Hoover, oh? It is easy, twins age at different rates when one travels at high speed. The end.
00:56:32 <elliott> 13:43:53: <Vorpal> (actually: accelerates)
00:59:37 <Lymee> You can convert constant references to variables instead of accesses to the memory array, right?
01:00:09 <elliott> i'm just going to tell you to read esotope's code :)
01:00:14 <Sgeo> https://docs.google.com/document/pub?id=18eLRRmojIXEU36uad7lW7XwRRGEKFvjiYV6pS3-UF-4 well, this is intuitive as mud.
01:06:41 <Sgeo> oerjan, oh you're not here
01:08:33 -!- FireFly has quit (Quit: swatted to death).
01:13:38 -!- Sgeo_ has joined.
01:14:57 -!- Sgeo has quit (Ping timeout: 255 seconds).
01:25:41 <elliott> 17:57:49: <oerjan> oh wait there may be only two people called that (since 1950, anyway) :P
01:27:54 <CakeProphet> Since I have a day off, I should really take this opportunity to continue working on various projects...
01:28:00 <CakeProphet> but, I think I'm just going to do nothing today instead.
01:55:58 -!- pikhq has joined.
01:59:42 -!- pikhq_ has quit (Ping timeout: 276 seconds).
02:00:36 -!- pikhq_ has joined.
02:01:59 <pikhq_> Also, equipment that thinks that dropping a connection is a good thing.
02:02:19 <elliott> * pikhq (~pikhq@174-22-156-192.clsp.qwest.net) has joined #esoteric
02:02:20 <elliott> * pikhq_ has quit (Ping timeout: 276 seconds)
02:02:20 <elliott> * pikhq_ (~pikhq@174-22-164-57.clsp.qwest.net) has joined #esoteric
02:02:20 <elliott> <pikhq_> Also, equipment that thinks that dropping a connection is a good thing.
02:02:59 <elliott> pikhq: wanna help me write the BEST WC????
02:03:24 -!- pikhq has quit (Ping timeout: 240 seconds).
02:03:49 <pikhq_> 19:59 < pikhq> Stuff. That is up.
02:08:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
02:12:31 -!- Wamanuz5 has joined.
02:16:57 <elliott> pikhq_: you are hurting haskell with your lack of support
02:21:29 <elliott> oh god not more bot things is it
02:22:31 <Sgeo_> Why am I assuming that reversible CA implies a conserved quantity?
02:29:45 -!- Slereah has quit.
02:30:03 <tswett> Gosh, my bedtime is in ten seconds.
02:30:50 <quintopia> although for a totalistic kind of CA (or anything where the entire neighborhood is considered equally tributary) that will have to be true i think?
02:32:44 <quintopia> reversible means no entropy, which means no information is lost, and in a CA where cells are indistinguishable, that would imply conservation of quantity, yes?
02:33:50 -!- copumpkin has joined.
02:34:52 <Sgeo_> How does reversible imply no entropy? Our universe is (kind of) reversible, as far as we know, but still has entropy
02:37:44 <quintopia> Reversible process (thermodynamics), a process or cycle such that the net change at each stage in the combined entropy of the system and its surroundings is zero
02:38:00 <quintopia> therefore, the universe is not reversible
02:38:11 <quintopia> therefore, the arrow of time is uniquely forward
02:39:01 <quintopia> Reversible computing, logical reversibility of a computation - a computational step for which a well-defined inverse exists
02:39:07 <quintopia> this is the relevant definition for CAs
02:39:13 <quintopia> but it's mathematically equivalent
02:39:49 <quintopia> as an inverse is operation is only well-defined if information is conserved
02:39:57 <CakeProphet> well you can't have two states be inverses of one another because then it will cycle, which isn't really all that useful.
02:40:59 <Sgeo_> Oh, so that's why I failed my sanity check.
02:41:10 <Sgeo_> I was assuming the same rules would apply backwards and forwards.
02:41:16 <CakeProphet> unless it can produce some other thing. Similar to how glider guns work in CGoL
02:41:37 <quintopia> for instance "minus" is not an invertible operation because it takes two pieces of information and throws out one. "minus one" is invertible because it takes one piece of information and gives back an equal amount of information
02:41:43 <elliott> monqy: i clapign all the time
02:42:25 <Sgeo_> (As in, the sanity check was moronic, not what I produced prior to doing the sanity check)
02:43:00 -!- bsmntbombdood has joined.
02:43:41 <monqy> does bsmnt mean basement
02:43:44 <monqy> does dood mean dude
02:43:48 <monqy> does bomb mean bomb
02:43:51 <CakeProphet> also, you could not destroy the state of any cell, right? That would be bad because then you have no form of "motion"
02:44:29 <quintopia> CakeProphet: ah how do you destroy the state of a cell?
02:44:53 <CakeProphet> I suppose this all depends on the rules of the automaton
02:45:17 <Sgeo_> I was confusing time-symmetry with reversibility
02:45:59 <CakeProphet> but if you give rules that allow the default state to prodce non-default states, then that would imply that your grid starts off in some kind of non-constant setup.
02:46:19 * CakeProphet does not know the terminology for these things he's talking about.
02:47:33 * Sgeo_ wonders how easy/difficult it would be to put his table into Mirek's Cellebration
02:47:41 <Sgeo_> Wow, I can never spell
02:47:58 <quintopia> CakeProphet: if you return it to the default state without regard for how it will affect its neighbors, yes, you will change the nature of the CA. it might be destroying information in one sense of thinking about it, or creating it in another sense.
02:47:59 <Sgeo_> ....I got it right
02:48:24 <quintopia> Sgeo_: no one uses MCell anymore. put it in Golly. it's not that hard.
02:48:41 <Sgeo_> Would it be easier in Golly than MCell?
02:49:17 <CakeProphet> hmm okay, so then to create a CA without information loss, you would need to have no way to return to a dead state, or have a way to go from dead to alive that is reversible from the way in which the information was originally configured.
02:49:46 <Sgeo_> CakeProphet, there's an algorithmic way to make a reversible CA from a non-reversible CA
02:50:11 <quintopia> actually, there's an algorithmic way to make a reversible anything from a non-reversible anything
02:50:49 <elliott> <monqy> does bsmnt mean basement
02:50:50 <elliott> <monqy> does dood mean dude
02:50:50 <elliott> <monqy> does bomb mean bomb
02:50:55 <elliott> no mocking non-sgeo elders >:|
02:51:34 <quintopia> http://www.bbc.co.uk/news/science-environment-13874049
02:52:04 <monqy> elder is a good description of sgeo
02:52:14 <elliott> monqy: been here longer than me
02:53:03 <elliott> "We get it Apple, you own the ‘App Store’ trademark. Except, let’s be honest: you really don’t – the English languages does."
02:53:10 <elliott> omgubuntu, hard-hitting edited journalism
02:53:37 <quintopia> "it has been shown that every reversible cellular automaton can be emulated by a block cellular automaton."hmm
02:54:03 <pikhq_> Isn't "app store" pushing heavily on genericised trademark?
02:54:06 <monqy> english languages owns the app store trademark??????? app store is a mark of english languages' trade?????????
02:54:23 <elliott> pikhq_: I don't know, would anyone else name anything an App Store if Apple hadn't?
02:54:36 <elliott> "App" wasn't a very common abbreviation for "programoid"
02:54:51 <elliott> something that isn't quite the same thing as an application or program
02:55:28 <elliott> pikhq_: it shouldn't be :)
02:55:46 <elliott> pikhq_: oh you said genericised
02:55:57 <elliott> pikhq_: i dunno, nobody says "android app store"
02:56:02 <elliott> everyone says "android market"
02:56:31 <elliott> http://news.cnet.com/8301-27076_3-20073524-248/judge-likely-to-deny-apples-appstore-complaint/ <-- seems apple are trying to get amazon for using "Appstore"
02:57:12 <pikhq_> Funny, I hear "app store" as a generic term fairly often.
02:57:35 <pikhq_> Though if there's a more specific term available that'll be used instead.
02:57:48 -!- BeholdMyGlory has quit (Remote host closed the connection).
02:57:52 <monqy> does apple own "app"
02:57:54 <monqy> does apple own "store"
02:58:19 <pikhq_> Can't cite, because I'm talking anecdotes here.
02:58:26 <elliott> monqy: does that matter if "app store" is the trademark
02:58:35 <pikhq_> monqy: Doesn't matter for trademarking.
02:58:42 <monqy> trademarking is the worst :(
02:58:49 <elliott> no, the trademark system is fairly sane
02:58:50 <elliott> imagine if the roomba was called the Robotic Magic Vacuum
02:58:53 <elliott> would you object to that being trademarked
02:59:01 <monqy> phrase trademarking
02:59:04 <monqy> what if someone else tried to sell apps
02:59:17 <elliott> i agree that "app store" is a bit edge-case, but I think the fact that nobody said "app" before that matters
02:59:30 <elliott> it's just a weird abbreviation that was only ever used colloquially and... I never even heard it
03:00:30 <CakeProphet> it is associated with my business of awesome.
03:02:24 <pikhq_> Yeah, trademark law has astoundingly few abuses, misuses, or unintended consequences. Quite unlike the other two things termed "intellectual property".
03:02:48 <pikhq_> Indeed, it's the only one that's not utterly outmoded.
03:03:53 <CakeProphet> My favorite thing about patents is that they are reasoned to promote competition
03:03:58 <CakeProphet> but... they do the exact opposite of that.
03:04:15 -!- elliott has quit (Remote host closed the connection).
03:04:24 <pikhq_> Yeah, the *concept* of patenting might have some remaining validity.
03:04:31 <pikhq_> The implementation, sure as hell not.
03:04:51 -!- elliott has joined.
03:05:42 <zzo38> I think patent is bad thing now although in the past it might have helped a bit. Now it should be abolished, though. Trademark is good things, though. Therefore they should change "Patent and trademark office" into just "Trademark office" and then have no patent.
03:06:14 <pikhq_> And, of course, copyright law is less worthwhile than laws regulating that all chariots (horseless or otherwise) must be equipped with at least 2 horses.
03:08:16 <pikhq_> I don't think there's such a law, but hey.
03:08:18 -!- Wamanuz has joined.
03:08:24 -!- Wamanuz5 has quit (Ping timeout: 276 seconds).
03:08:36 <monqy> I've heard of some pretty stupid laws but forgotten them all
03:08:37 <elliott> that was only amazing once i thought it was real
03:08:42 <Sgeo_> "system is fairly sane
03:08:42 <Sgeo_> <elliott> imagine if the roomba was called the Robotic Magic Vacuum
03:08:42 <Sgeo_> <elliott> would you object to that being trademarked
03:08:42 <Sgeo_> <monqy> phrase trade"
03:08:57 <elliott> `addquote <Sgeo_> "system is fairly sane <Sgeo_> <elliott> imagine if the roomba was called the Robotic Magic Vacuum <Sgeo_> <elliott> would you object to that being trademarked <Sgeo_> <monqy> I mean <Sgeo_> <monqy> phrase trade" <Sgeo_> oops
03:08:58 -!- jcp has quit (Ping timeout: 260 seconds).
03:08:58 <Sgeo_> "All editing operations are restricted to cells whose coordinates are within +/- 1 billion. "
03:08:59 <HackEgo> 464) <Sgeo_> "system is fairly sane <Sgeo_> <elliott> imagine if the roomba was called the Robotic Magic Vacuum <Sgeo_> <elliott> would you object to that being trademarked <Sgeo_> <monqy> I mean <Sgeo_> <monqy> phrase trade" <Sgeo_> oops
03:09:31 <Sgeo_> I'm surprised and a bit sad that you didn't quote my sanity comments
03:09:36 <pikhq_> elliott: There are *similarly* outmoded laws regulating horseless chariots, I just couldn't remember any.
03:09:58 <Sgeo_> Something about faiing a asanity check
03:10:21 <elliott> `addquote <Sgeo_> Something about faiing a asanity check <Sgeo_> sanity <Sgeo_> faliling <Sgeo_> failing
03:10:23 <HackEgo> 465) <Sgeo_> Something about faiing a asanity check <Sgeo_> sanity <Sgeo_> faliling <Sgeo_> failing
03:12:20 <zzo38> Sanity is insufficient by itself. Many other things are also important.
03:13:21 <elliott> `addquote <zzo38> Sanity is insufficient by itself. Many other things are also important.
03:13:23 <HackEgo> 466) <zzo38> Sanity is insufficient by itself. Many other things are also important.
03:13:26 <elliott> some people would have included CakeProphet's line
03:13:31 <elliott> those people do not understand zzo38
03:15:29 -!- jcp has joined.
03:15:56 <Sgeo_> elliott, hey, you're mocking a non-sgeo elder!
03:16:03 <Sgeo_> (I think zzo38 is an elder)
03:16:50 <monqy> sgeo is clearly mocking you
03:17:13 <zzo38> I don't think so. (Nor do I know exactly what you mean by "an elder" or how it is relevant)
03:17:41 <monqy> elliott: are you a non-sgeo elder
03:17:50 <elliott> does two thousand seven count as elder
03:17:54 <elliott> well i came in once the previous year
03:18:03 <elliott> but i'm the top talker, which surprises EVERYONE
03:18:25 -!- pikhq has joined.
03:18:41 <elliott> 2009-02-28.txt:01:03:21: -!- zzo38 has joined #esoteric.
03:18:42 -!- pikhq_ has quit (Ping timeout: 255 seconds).
03:18:43 <monqy> I haven't gathered a sample to compare with that
03:18:47 <elliott> it seems that zzo38 didn't actually come here before that
03:18:51 <elliott> monqy: you mean for elderness?
03:19:00 -!- Wamanuz2 has joined.
03:19:07 <monqy> so I don't know if I should be surprised or not
03:19:14 <elliott> yeah it was the first day zzo38 was in here
03:19:17 <zzo38> I have worked with esolangs before that though. I have not been on this channel, though, is true.
03:19:20 <elliott> monqy: well the second is vorpal/anmaster
03:19:38 <elliott> monqy: but ignoring him i talk like three times the person below me
03:20:18 -!- Wamanuz has quit (Ping timeout: 276 seconds).
03:21:30 <zzo38> Quote number 97 mentions quote number 124.
03:22:10 <monqy> was it an old quote 124 from before some quotes were deleted, moving 97 below 124
03:22:15 <elliott> yes, because quotes get deleted
03:22:19 <elliott> and the numbers aren't saved
03:22:37 <elliott> i could actually calculate the real numbers of all current quotes based on the hg log...
03:23:50 -!- Wamanuz2 has quit (Read error: Operation timed out).
03:24:15 <HackEgo> 97) Note that quote number 124 is not actually true.
03:24:53 -!- elliott_ has joined.
03:25:11 -!- elliott has quit (Read error: Connection reset by peer).
03:25:35 -!- Wamanuz2 has joined.
03:29:16 <Sgeo_> How about I not wait patiently for Golly to do a random fill on a large area just because I want to know what random fill is like in day and night
03:30:10 -!- Wamanuz2 has quit (Remote host closed the connection).
03:31:04 -!- Wamanuz2 has joined.
03:31:09 <Sgeo_> But didn't think it would cause a problem
03:31:10 <Sgeo_> Until it caused a problem
03:31:20 <elliott_> yeah it should be better at generating randomness
03:31:27 <elliott_> then people could complain it was too predictable
03:33:22 <CakeProphet> hmm, would there ever be a case where you want to use a regular expression negation operator without implicit backtracking?
03:33:34 <elliott_> "Forced garbage collection. I never have any problems with memory management in C++, so this just seems like disadvantages to me."
03:33:36 <CakeProphet> In most cases the effect would be the same.
03:33:48 <elliott_> CakeProphet: see cut in prolog
03:34:21 <elliott_> compare "forced manual memory management"
03:34:54 <pikhq> "I never have any problems with memory management in C++"
03:35:03 <pikhq> I see that this person hasn't done non-trivial programming.
03:35:21 <CakeProphet> man, screw this convenience shit, I want to manage my own memory! I don't have problems with that shit, so it's obviously a drawback to have it.
03:35:28 <elliott_> pikhq: non-trivial? in C++, memory management is _always_ a problem
03:35:38 <elliott_> thanks to copy constructors, destructors, blah blah bksjfskghdfk
03:36:03 <elliott_> CakeProphet: Not only convenience -- manual memory management has a performance cost versus good garbage collection!
03:36:06 <pikhq> elliott_: With certain forms of trivial programming in C++, you can be ignorant of memory management.
03:36:16 <elliott_> "Make your language slower and difficult to program in correctly, please."
03:36:25 <elliott_> (OK, Go's GC is stop-the-world mark-and-sweep, but that's an implementation issue.)
03:36:34 <elliott_> (Then again so is GC; Scheme, for instance, just says that objects are never freed. Ever.)
03:36:49 <CakeProphet> elliott_: oh really? I was under the impression that MMM still existed because it allowed for more efficient programs.
03:37:02 <CakeProphet> but yes, I could see how /poor/ memory management would create the opposite
03:37:17 <pikhq> CakeProphet: A high-quality garbage collector is faster than a manual memory management scheme in *many* cases.
03:37:22 <zzo38> My first post to esolang wiki is from August of 2005.
03:37:45 <elliott_> CakeProphet: Malloc and free are expensive operations.
03:37:54 <elliott_> CakeProphet: A good garbage collector outperforms them practically every time.
03:37:59 <pikhq> And manual memory management is only going to be *notably* faster than a high-quality garbage collector in edge cases.
03:38:12 <CakeProphet> elliott_: does a garbage collector not use free or something equivalent?
03:38:13 <elliott_> Even the conservative (but very very impressive) Boehm collector for C programs beats malloc and free.
03:38:20 <elliott_> CakeProphet: Yes, but it does it in clumps.
03:38:33 <elliott_> CakeProphet: And a parallel collector won't even pause your program to do it.
03:39:07 <pikhq> You get *really* big gains if you can actually compact the heap.
03:39:12 -!- Wamanuz2 has quit (Read error: Connection reset by peer).
03:39:26 <CakeProphet> okay so do you get any gains on malloc calls? It seems that in a GC language you would still call malloc just as often.
03:39:27 <pikhq> You get amortised O(1) allocation.
03:39:48 <pikhq> (because 99% of the time, malloc is a pointer increment)
03:39:54 -!- Wamanuz2 has joined.
03:40:14 <elliott_> CakeProphet: GC's can have a much simpler allocator than malloc.
03:40:27 <Sgeo_> Is me incompetently implementing GC an "edge case"?
03:40:39 <pikhq> Sgeo_: We specified "high-quality" for good reason.
03:40:40 <elliott_> Sgeo_: you being incompetent doesn't sound like an edge case to me.
03:40:55 <pikhq> CakeProphet: libc malloc has to search its allocated heap for free space of sufficient size.
03:41:25 <CakeProphet> what would a well-designed GC do for allocation?
03:41:38 <elliott_> CakeProphet: see boehm gc, ggggc source :P
03:42:01 <elliott_> CakeProphet: http://codu.org/projects/ggggc/hg/index.cgi/file/72b3f073cbe4/alloc.c, http://codu.org/projects/ggggc/hg/index.cgi/file/72b3f073cbe4/collector.c
03:42:23 <elliott_> Faster than malloc/free and Boehm GC, pretty competent with Java's (which has the best GC in existence).
03:42:48 <elliott_> Although it'll need concurrent and maybe parallel collection to be truly competitive with Java.
03:42:50 <zzo38> How well is the memory allocation used in TeX? That one does not store the size of the allocated memory anywhere, so the function to free the memory must explicity be given the size.
03:42:51 <pikhq> void *malloc(size_t size) {heap_used += size;}
03:42:53 <elliott_> But yeah, the allocator is trivial.
03:43:00 -!- azaq23 has quit (Ping timeout: 255 seconds).
03:43:01 <pikhq> void *malloc(size_t size) {return (heap += size);}
03:43:20 <elliott_> CakeProphet: What do you mean by "seriously?"? The Java VM is one of the fastest virtual machines in the world in pretty much every aspect.
03:43:30 <pikhq> CakeProphet: Java's garbage collector is a century in the future and probably designed by aliens from space.
03:43:38 <elliott_> The fact that it has a rather high start-up time and Swing UIs are sluggish has nothing to do with the quality of the VM.
03:43:50 <elliott_> Well, the first does, but it's because the JVM is so fast that it has a high start-up cost.
03:43:51 <CakeProphet> I just didn't know. I assumed that because Java was a shitty language it would not have a great implementation.
03:44:05 <elliott_> You realise Sun poured millions and millions into Java, right?
03:44:08 <pikhq> Java probably has the best implementation of anything ever.
03:44:37 <pikhq> Though the language is terrible, the runtime is so insanely good.
03:44:42 <elliott_> The language is how it is because Sun wanted a language that was less of a pain than C++ and safe (i.e. can't segfault, etc.). And Java is that, mostly.
03:44:51 <pikhq> To defeat it you have to microöptimise C or assembly.
03:44:57 <elliott_> Then it put millions of dollars into creating an environment around it.
03:45:15 <elliott_> pikhq: OK, that's not quite true, Java doesn't beat compiled languages in benchmarks always.
03:45:25 <elliott_> But it's competitive with C++, which is saying something.
03:46:35 <zzo38> In some cases you can use static allocation instead of dynamic allocation.
03:46:56 <CakeProphet> so essentially they traded segfaults for null pointer exceptions. :P
03:47:07 -!- Wamanuz2 has quit (Remote host closed the connection).
03:47:15 <elliott_> CakeProphet: Please, null has been in most languages since the sixties.
03:47:34 <elliott_> They are almost as bad as segfaults though, that is certainly true.
03:47:54 <elliott_> Yeah, it's a perfectly fair criticism, it's just that null isn't Java's fault :P
03:48:14 <CakeProphet> I just mean that null pointer exception is the most common error I've seen when debugging java. So it is comparable to segfaults in C(++)?
03:48:46 <elliott_> I'd say it's similar, because e.g.
03:48:47 <pikhq> Very few languages don't have that misfeature, though.
03:48:53 <elliott_> in C you would write a search function returning either a pointer to the found data or NULL
03:48:57 -!- Wamanuz2 has joined.
03:48:58 <elliott_> and if you used that without checking you could get segfaults
03:49:04 <elliott_> which is basically = null pointer exceptions
03:49:30 <CakeProphet> I never get those problems in Perl. My code just doesn't work. :D
03:50:01 <CakeProphet> yeah, but I don't get an /exception/, just more undefs, usually.
03:50:03 <elliott_> pikhq: help me debug my space leak or DIE.
03:51:12 <elliott_> <elliott_> pikhq: help me debug my space leak or DIE.
03:51:47 <elliott_> this should have constant memory use :(
03:52:24 <elliott_> http://sprunge.us/aViQ; the profiling results say it's in option, but I suspect countBytes is being inlined by optimisation or something into optBytes, so it might be in countBytes instead
03:52:30 <elliott_> I've already strictified option as much as I can, so
03:52:40 <elliott_> hmm, oh dear, I think I may be overly strict
03:52:51 <elliott_> point is, it should have constant memory use, but it grows forever
03:54:42 <elliott_> oh yeah, depends on iteratee and fclabels
03:55:34 <elliott_> compile with: ghc --make -Wall -O2 wc.hs
03:56:03 -!- Wamanuz2 has quit (Ping timeout: 255 seconds).
03:56:41 <elliott_> yeah, it is not in countBytes, i just checked by removing the options stuff
03:56:53 <elliott_> CakeProphet: compile normally, then compile with -prof -auto-all -osuf p_o
03:57:02 <elliott_> then ./wc quux +RTS -p produces wc.prof
03:57:14 <elliott_> see ghc manual for heap profiling options, -hc produces a basic thing which you can convert to a postscript file to view
03:57:50 <elliott_> meaning it's in option somewhere
03:58:52 <elliott_> CakeProphet: what? no it's not
03:59:00 <elliott_> anyway I _think_ I might have figured out the problem
03:59:21 <elliott_> there are exactly two functions with any kind of strictness annotations
03:59:26 <zzo38> In LLVM, Is it possible means to, like, assume x>0 if you have a command test x>0 and then branch to an "unreachable" instruction if false, In case the optimizer does something with that, somehow?
03:59:29 <elliott_> countBytes, to make the byte count strict
03:59:35 <elliott_> in a misguided attempt to reduce a thunk leak that isn't there
03:59:50 <elliott_> zzo38: why not ask in the llvm channel on oftc?
04:00:06 <elliott_> no, it's the fact that I don't zip it all at once
04:00:12 <zzo38> I did already. Do you have any opinions about it though?
04:00:42 <elliott_> CakeProphet: btw, if countBytes wasn't strict in n, it would blow up a huge thunk.
04:00:51 <elliott_> proportional to the size of the file
04:01:07 <CakeProphet> I just misunderstood what you meant by "zip it all at once"
04:01:42 <elliott_> nah, i mean zip it _before_ any binds
04:01:55 <elliott_> wc <- I.run =<< I.enumHandle I.defaultBufSize handle (countBytes `I.zip` countWords `I.zip` countLines)
04:02:00 <elliott_> so I need to restructure things
04:02:13 <elliott_> now I just have to fix the program...
04:02:19 <elliott_> CakeProphet: i know, but I'm not sure I could explain :)
04:03:29 <CakeProphet> hmm, so what's the associativity rules for functions used with the ` syntax?
04:03:44 <elliott_> the associativity is irrelevant, but I forget
04:03:49 <lambdabot> Occurs check: cannot construct the infinite type: b = (a, b)
04:03:54 <CakeProphet> can you declare infix[rl] on non-operators?
04:05:28 <CakeProphet> I have absolutely no clue how you're handling options there..
04:07:27 <CakeProphet> oh I see. :) the foldr1 (.) xs defaultProc was confusing me
04:08:01 -!- Wamanuz2 has joined.
04:08:05 <elliott_> yeah, turns out that way sucks though :)
04:08:13 <elliott_> trying a new way now, it kind of irks me though
04:08:52 <CakeProphet> elliott_: is this some kind of elaborate way to one-up my wc interpreter that was totally superior to your sed one?
04:09:34 <elliott_> no, this is me trying to write the fastest wc ever that's feature-complete with gnu's
04:10:25 <CakeProphet> see, that sounds like some serious one-upping right there. >:D
04:10:47 -!- azaq23 has joined.
04:10:56 <pikhq> Perhaps you should one-up the rest of coreutils. :P
04:11:41 <elliott_> CakeProphet: well, my old version is already faster than gnu wc, but its word counting is a bit broken (but it's just as expensive as a "real" word counter, so it's still a fair comparison), and it doesn't handle multibyte or locale word boundaries
04:11:48 <elliott_> that's gnu wc with LC_ALL=C, i.e. disabling locale handling
04:11:52 <elliott_> without LC_ALL=C, gnu wc is totally hopeless
04:12:16 <elliott_> CakeProphet: http://sprunge.us/jMOH this is the old version
04:12:17 <CakeProphet> elliott_: so what makes this one faster than gnu's
04:12:24 <pikhq> CakeProphet: GNU is stupid.
04:12:27 -!- Wamanuz2 has quit (Ping timeout: 244 seconds).
04:12:32 <elliott_> pikhq: well the gnu wc code probably is not that bad
04:12:36 <elliott_> it's just that iteratees are great.
04:12:48 <pikhq> elliott_: It abstracts C stdio.
04:12:54 <elliott_> CakeProphet: (that version doesn't do the expensive-but-wrong word handling, the one that does is an abandoned version)
04:13:02 <lambdabot> forall a b. (a -> b -> a) -> a -> [b] -> a
04:13:17 -!- Wamanuz2 has joined.
04:13:20 <pikhq> Also, Haskell IO is more intelligent than C IO.
04:14:54 <CakeProphet> elliott_: oh look the example in Data.Iteratee is even a byte counter.
04:15:15 <elliott_> CakeProphet: see http://okmij.org/ftp/Streams.html#iteratee, where oleg does his own benchmarked wc :)
04:15:29 <elliott_> http://okmij.org/ftp/Haskell/Iteratee/Wc.hs
04:16:16 <CakeProphet> so yeah, concurrent MUD client in Haskell is a project now.
04:16:37 <CakeProphet> but with a job I don't know if I'll work on that anytime soon.
04:19:10 -!- Wamanuz2 has quit (Ping timeout: 244 seconds).
04:19:50 -!- Wamanuz2 has joined.
04:25:53 -!- Wamanuz2 has quit (Ping timeout: 244 seconds).
04:26:02 <elliott_> yay, memory leak solved, only problem is that it's kind of ugly
04:27:02 <zzo38> Is it possible to make something like that with GNU C: #define static_new(_type) ({ _type x; &x; })
04:27:10 -!- Wamanuz2 has joined.
04:27:18 <zzo38> Is it possible to make something like that with GNU C: #define static_new(_type) ({ static _type x; &x; })
04:29:22 <pikhq> I think that'd work in GCC, though I *don't* know if it's defined behavior or not.
04:29:39 <lambdabot> Prelude uncurry :: (a -> b -> c) -> (a, b) -> c
04:29:39 <lambdabot> Data.Tuple uncurry :: (a -> b -> c) -> (a, b) -> c
04:30:39 <zzo38> pikhq: How would you expect to figure out if is defined behavior or not?
04:36:21 -!- Wamanuz2 has quit (Ping timeout: 264 seconds).
04:37:01 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
04:37:38 -!- Wamanuz2 has joined.
04:38:37 <pikhq> Dunno; I'm not sure that defined/undefined behavior is well-defined for GNU C.
04:39:08 <elliott_> "I knew I'd get your attention with this one. Let me start out by saying that I'm not here to trash, insult or attack women. Instead, I want people to better understand that men and women are more alike than they think when it comes to sex and sins of the flesh. In order to do this, I will show, by example, how women behave in the exact manner that they accuse only men of behaving: like pigs."
04:39:14 <elliott_> i love finding terrible things randomly on the internet
04:39:53 <CakeProphet> this man is a scholar of the highest tier.
04:40:22 <elliott_> http://uk.askmen.com/dating/curtsmith/59_dating_advice.html
04:40:28 <elliott_> Men want sex, women want money... Next Page >>
04:40:46 <elliott_> Women= [five pictures of a pig]
04:40:58 <elliott_> wow this is the most horrible thing i have ever seen
04:41:16 <elliott_> is this just for men to read so they can continue to ignore being called pigs
04:41:39 <elliott_> 6. Women use men for money: The stereotype that men use women for sex has been around for centuries. And when you hear that women use men for cash, remember that that also places them in the pig category. At least we want their bodies, they, in turn, are checking out our checking accounts. So while women complain that men use women for sex, how much better are they if they're using men for materialistic purposes?
04:41:41 <zzo38> I should select a subset of the GNU C features. ({ ... }) is allowed, vararg macros are allowed, case ranges is allowed, pointer arithmetic on void pointers (but not on function pointers, nor is sizeof allowed on void) is allowed, \e is allowed, x?:y is allowed, zero length arrays are allowed.
04:42:32 <monqy> uk.askmen.com, why
04:42:56 <pikhq> zzo38: Why 0-length arrays? C99 provides the struct hack in a portable manner.
04:43:11 <elliott_> monqy: im disappointed, i had such high expectations for uk.askmen.com
04:43:15 <pikhq> CakeProphet: struct foo {blahblahblah; int bar[0];}
04:43:20 <elliott_> 7. Queen of the industry: Yes, men buy pornography, but women dominate the industry. Sex sells and everywhere you look, be it a movie, an album, a magazine cover, the fashion world, or the adult industry, you will always see a woman endorsing sex.
04:43:24 <zzo38> And also structures with no members, and unnamed struct/union fields.
04:43:30 -!- Wamanuz2 has quit (Ping timeout: 276 seconds).
04:43:35 <pikhq> CakeProphet: Used to represent an array with a header.
04:43:38 <elliott_> Who's the real oinker here? Next Page >>
04:43:45 <elliott_> monqy: i like how he doesnt even bother keeping score for men
04:43:47 <pikhq> CakeProphet: The C99 equivalent is struct foo {blahblahblah; int bar[];}
04:43:58 <zzo38> Flexible array members are different according to the GCC manual: http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Zero-Length.html#Zero-Length
04:44:07 <pikhq> zzo38: I dunno about no-member structs, but unnamed fields is C1x.
04:44:30 <monqy> I remember another great thing like that but I forgot where
04:44:31 <elliott_> monqy: "Get it on Mr. Clinton! You Go Lewinsky!" last line
04:44:37 <monqy> something about turning femenists into "real girls"
04:44:52 <zzo38> I think the [0] is actually simpler and more sensible to fit with C in my opinion; it is possible for the compiler to do nothing special and work.
04:44:53 <elliott_> i'm still not sure it was actually real
04:45:18 <monqy> the copy i saw was a photo/scan of a magazine but i forget the magazine name
04:45:22 <pikhq> zzo38: Yes, *but* it's non-standard.
04:45:26 <monqy> i think it was a mens magazine
04:45:31 <zzo38> O, and also long long int is allowed.
04:45:43 <pikhq> When it's trivial like that, you really should prefer standard features.
04:45:57 <monqy> CakeProphet: no I mean the article about turning femenists into "real girls"
04:46:03 <zzo38> Yes, some of these features are C99 features. Some are not.
04:46:04 <monqy> CakeProphet: I don't think it was askmen
04:46:07 <elliott_> <CakeProphet> monqy: yes, askmen is a men's magazine
04:46:10 <elliott_> thank you for this valuable info
04:46:13 <elliott_> monqy: it was... maxim i think?
04:46:20 <CakeProphet> elliott_: just clearing up some confusion.
04:46:27 <Lymee> What does =~ in ruby do?
04:46:49 <pikhq> zzo38: Why pointer arithmetic on void*?
04:46:51 <zzo38> What I am saying is simply a simpler C than GNU C that is a subset of GNU C and a superset of standard C.
04:47:05 <Lymee> CakeProphet, I know.
04:47:13 <Lymee> I just have no idea what kind of regex stuff.
04:47:14 <zzo38> Saying what makes sense to me, at least.
04:47:24 <CakeProphet> Lymee: or string, or whatever your variable is in Ruby.
04:47:31 <pikhq> Anyways, all this nitpicking aside, that subset of GNU C seems like the subset that C compilers are likely to implement, so.
04:47:35 <Lymee> if word =~ /([\W\d]+)/
04:48:00 <CakeProphet> if it matches, that returns true. It matches one or more repetitions of non-word characters or digits.
04:48:37 <Lymee> So because there's no second // part, it's a match?
04:48:38 <monqy> http://www.ltcconline.net/lukas/gender/political/pics/political21.jpg found a copy
04:48:50 <CakeProphet> Lymee: no, because there's no s. Substition looks like: s/.../.../
04:48:56 <elliott_> there is no such thing in ruby
04:48:59 <elliott_> substitution is a separate function
04:49:11 <elliott_> it also mutates global variables relating to the match
04:49:37 <CakeProphet> Lymee: okay, well everything I said applies in Perl. m/.../ is match in Perl, but the m is optional.
04:49:57 <zzo38> pikhq: Yes, it is my opinion too. It is what makes sense to me without adding too much stuff that didn't seem to fit.
04:50:03 <zzo38> O, and also // comments are allowed.
04:50:16 <pikhq> // is C99, so they damned well *better* support it.
04:50:43 <pikhq> Heck, it's in the common subset of C and C++.
04:51:00 <zzo38> I am talking about something else; this subset is usable in the semiGNU C89 mode as well. In semiGNU C99, of course it is already allowed, as well as many more things.
04:51:30 <pikhq> Well, if you're talking C89 you should probably add a few more things.
04:51:39 <CakeProphet> Lymee: also, there's probably a !~ operator, which would be "does not match"
04:51:43 <pikhq> First and foremost: mixed declarations and statements.
04:52:12 <pikhq> Perhaps also _Pragma, just because #pragma is a complete misfeature.
04:52:28 <zzo38> pikhq: No. I think is not necessary to add that. Although of course in C99 mode is allowed.
04:52:42 <pikhq> Seriously though, just consider C99.
04:52:51 <pikhq> C89 is older than I am.
04:53:34 <pikhq> C99 itself is 12 years old.
04:53:48 <pikhq> And soon to be deprecated.
04:54:08 <zzo38> C99 includes some things I think do not belong. Even GNU89 includes some things I think do not belong. Is why I invent this subset (I believe it works in GNU89 mode in both GCC and LLVM C compiler, but both of them support more than what I said)
04:54:30 <pikhq> What's wrong with C99?
04:55:06 <CakeProphet> I think untagged unions are the lamest thing ever. Even lamer than Ruby's use of a substitute method instead of s///
04:56:06 <zzo38> pikhq: Many things. There are some good things with it, though. Just some things I believe does not fit very well with my idea of what C should be. Maybe some people might agree and others disagree, possibly, which is also OK.
04:56:12 <CakeProphet> lameness is an important quality, that should be avoided.
04:56:19 <elliott_> yeah, it's better to conflate an operation upon a regexp and a function with an operation upon a regexp that the former uses
04:56:27 <elliott_> ruby's use makes noOooOooo sense
04:57:03 <CakeProphet> being lame does not imply making no sense.
04:57:52 <pikhq> zzo38: I bet you've got problems with <complex.h>
04:59:41 <pikhq> Most of the other stuff seems either benign or fixing something that was done distinctly on different systems.
04:59:42 <CakeProphet> elliott_: also that's a strange way of looking at it, I think.
05:00:23 <pikhq> (for instance: variable-length arrays, to replace much of the use-case for alloca, which is nearly impossible to use portably)
05:00:34 <monqy> 21:48:55 < elliott_> =~ is match in ruby
05:00:35 <monqy> 21:49:00 < elliott_> it also mutates global variables relating to the match
05:00:41 <monqy> global mutation? really?
05:00:56 <CakeProphet> it's all just for the benefit of syntactic shorthand. It's not really a jacked up semantic model at all.
05:01:31 <CakeProphet> if you don't like that, then just assign your capture variable to a different name, problem solved.
05:01:33 <pikhq> elliott_: How Perl.
05:01:51 <elliott_> pikhq: well in ruby $ means global
05:02:08 <pikhq> That's still a very Perl-like thing.
05:02:18 <zzo38> Yes, complex numbers in C is the most problem.
05:02:27 <pikhq> zzo38: That's optional in C1x.
05:05:32 <pikhq> Yes, they're making unmandatory a couple of features.
05:05:46 <CakeProphet> elliott_: qr, m, and s are all their own operators. =~ is an application, and without it the operation is applied on $_. What is nonsensical about that? There's no function. Nothing is conflated. It doesn't work like that.
05:06:29 <pikhq> Yeah, they really did get that from Perl.
05:06:36 <CakeProphet> s/.../.../ does not produce a result that =~ takes.
05:06:43 <CakeProphet> pikhq: yes it's exactly the same in appearance
05:06:49 <pikhq> Hint: if you get it from Perl, you're doing it wrong.
05:07:16 <pikhq> *Particularly* if you intend to have programs longer than 20 lines or so in it.
05:07:21 <monqy> cake "likes perl" prophet
05:07:39 <elliott_> CakeProphet: it is conflating distinct operations, you just defend perl no matter what stupid decisions it makes
05:07:47 <elliott_> so i'm not really interested in arguing this
05:09:34 <elliott_> makeIter Main 473 4 67.7 68.1 71.1 69.5
05:09:34 <elliott_> countBytes Main 478 1048577 2.1 1.4 2.1 1.4
05:09:42 <CakeProphet> elliott_: I have reasons for defending it. it's not an irrationality. Perl is not a religion.
05:10:07 <elliott_> nope, there is definitely no rational way to defend this aspect of perl, or at least it is not what you said
05:10:40 <pikhq> You are defending awk++. Stop it.
05:10:56 <zzo38> if(x<=0) __builtin_unreachable();
05:11:05 <zzo38> Does that have any meaning at all?
05:11:10 <elliott_> pikhq: perl is not indefensible
05:11:17 <elliott_> zzo38: only if you have an else after, I think
05:11:48 <pikhq> zzo38: Behavior is undefined after reaching that function.
05:12:21 <zzo38> pikhq: I know it is undefined.
05:12:33 <pikhq> It's used to give the optimiser a hint that control doesn't go past that point.
05:12:55 <pikhq> Then... Why did you ask?
05:13:24 <zzo38> My point is a bit different. See that it is an unusual kind of use that the GCC manual does not mention for this command.
05:14:40 <CakeProphet> elliott_: basically you are saying I cannot defend a syntactic construct because it's convenient.
05:14:44 <zzo38> It is somehow possible for the optimizer to deduce x is positive at that point (maybe it is returned from an external function that the compiler does not know about)? Or, do something similar to assume it is not null pointer, or whatever?
05:15:21 <pikhq> zzo38: It is *possible* for the optimizer to make that deduction from that, yes.
05:15:38 <zzo38> It seems to me that maybe it does mean that but I don't know if it actually does that.
05:15:41 <elliott_> wow yes, that last one sure is less convenient
05:16:10 <elliott_> foo.gsub! /a(.)/g { |x| x.upcase }
05:16:20 <elliott_> WHOOPS look at that, doing it the proper way allows using functions far more conveniently than Perl's ugly /e
05:16:32 <elliott_> I'm so glad Perl conflates matching and substitution instead
05:17:12 <CakeProphet> there is absolutely no difference. Your complaint is a syntactic preference.
05:17:47 <elliott_> remember when i said i wasn't interested because you're just a perl fanboy
05:18:05 <elliott_> wait no this is a revolutionary new paradigm
05:18:12 <elliott_> if you can compare two different ways of doing something with an example program
05:18:16 <elliott_> then it has to be a purely syntactic issue
05:18:27 <elliott_> EVERY LANGUAGE IS JUST A DIFFERENCE OF SYNTACTIC PREFERENCES!!!!!!
05:19:01 <pikhq> Also fun: I managed to make shish compile to 940 bytes.
05:21:23 <zzo38> There is more than syntactic preferences. It is a large part of it though.
05:21:41 <CakeProphet> elliott_: aside from the scoping of variables in the upcase example compared to how you would do it in Perl, there isn't really any semantic difference.
05:22:00 <elliott_> unfortunately, my interest in discussing this with you is zero.
05:23:08 <elliott_> not that it's a discussion; I considerably doubt any argument you would be able to come up with would sway me, and I very much doubt you'd concede that what Perl is doing is a semantic conflation, so it's akin to two missionaries trying to convert the other. which is never going to happen over at maximum an hour or two of irc.
05:23:28 <pikhq> http://sprunge.us/hZNB (for those who are curious)
05:24:01 <CakeProphet> elliott_: well, if you explained what is semantically different, I could at least tell you why I think you're wrong. :P
05:24:12 <CakeProphet> and then you could do the same. Sounds fun!
05:24:24 <elliott_> CakeProphet: exactly, all you want to do is explain to me why Perl is right
05:24:36 <elliott_> there is no part of you that is open to reconsidering whether it might be, and the same for me
05:24:36 <monqy> because as everyone knows
05:24:38 <monqy> perl is always right
05:24:39 <CakeProphet> not really. I just want to explain that is semantically the same.
05:24:46 <elliott_> the problem is that i'm right, and you're wrong, and I'm not interested in going back and forth.
05:24:54 <elliott_> CakeProphet: exactly, all you want to do is explain to me why Perl is right
05:25:16 <monqy> what if it's the same but also wrong (it isn't the same (also it's all wrong))
05:25:23 <elliott_> pikhq: that small strcpy sucks, you can do that in asm shorter
05:25:34 <elliott_> monqy: lets appreciate haskell together
05:25:38 <CakeProphet> no, there's no normative argument here. Programming languages are not ethical assertions.
05:25:38 <elliott_> it will be great and unproductive
05:26:12 <elliott_> i am not saying that no argument could take place
05:26:17 <elliott_> i'm saying the argument you want to take place would not be one
05:26:21 <monqy> i am a doctor of programming language ethics
05:26:57 <elliott_> monqy: that is not appreciating haskell
05:26:57 <CakeProphet> well yes, if you're just going to laugh at me, I suppose I don't really want to talk about it.
05:27:19 <elliott_> i was laughing at your statement
05:27:37 <monqy> I generally like haskell but the complex/irregular syntax gets on my nerves, especially when it comes to metaprogramming
05:27:42 <elliott_> but i'm not sure why you're continually pushing me into a silly folly i've expressed repeated disinterest in having
05:27:49 <elliott_> monqy: metaprogramming as in template haskell?
05:27:52 <monqy> oh and the lack of nested (pattern) guards.
05:28:18 <CakeProphet> because I am genuinely curious as to what you think is happening when you use regexps in Perl. Semantically. What evaluates to what.
05:28:24 <monqy> elliott_: yes; I forget if there are any others but I've never looked much at them
05:28:27 <elliott_> CakeProphet: you don't understand what semantics are
05:28:38 <elliott_> monqy: I mean, I still think that if you realise that operators are regular and user-defined, Haskell's syntax is actually one of the simplest languages in terms of syntax; no Lisp obviously, but it's close
05:28:52 <elliott_> monqy: (and Lisp has syntax, really, it's just hidden in the special forms)
05:29:03 <elliott_> monqy: right, well, Template Haskell is ugly... but it's also not something you use a lot
05:29:14 -!- Wamanuz2 has joined.
05:29:41 <elliott_> monqy: and the most common uses of TH -- quasiquotation and top-level ... I forget the term, $() things -- are pretty as of GHC 7
05:29:56 <CakeProphet> if you're talking about a specific semantic theory, then you're right I don't know anything about that.
05:29:59 <monqy> iirc $() is "splicing"
05:30:04 <monqy> last I checked the docs at least
05:30:07 <elliott_> monqy: [qq|...|] and at the top level, -- ah yes top level splice -- you can omit $()
05:30:31 <elliott_> you're right that defining those is pretty super-ugly, though
05:30:38 -!- Sgeo_ has quit (Read error: Connection reset by peer).
05:30:39 <elliott_> at least it's comprehensive, though
05:31:05 <elliott_> since you can define your own control structures without it, it's not that useful most of the time
05:31:08 <monqy> I think I last used it two years ago so my memory's a bit foggy
05:31:12 -!- Sgeo_ has joined.
05:31:35 <monqy> I last used haskell today or was it yesterday
05:31:35 <elliott_> what language do you normally use anyhow
05:32:16 <elliott_> i couldn't really use any language other than haskell at this point, even disregarding the language itself, it's just so far ahead in pretty much everything
05:32:31 <elliott_> parsing, IO, state management, concurrency, text processing...
05:33:52 -!- Wamanuz2 has quit (Read error: Connection reset by peer).
05:38:54 <elliott_> On Eric Gill, the designer of the famous Gill Sans typeface: "His personal diaries describe his sexual activity in great detail including the fact that Gill sexually abused his own children, had an incestuous relationship with his sister and performed sexual acts on his dog."
05:39:24 <monqy> but is the typeface any good
05:40:21 <elliott_> monqy: ever looked at the BBC logo? or anything else the BBC has ever done?
05:40:55 <monqy> I can't say I've ever taken a good look at it
05:40:55 <elliott_> CakeProphet: yes, non-limeys don't know what the bbc is.
05:41:09 <pikhq> CakeProphet: I'd say most Americans know of the BBC.
05:41:18 <monqy> I prefer lots of serifs on my typefaces
05:41:30 <elliott_> monqy: the bbc use gill sans almost exclusively. gill sans is used a lot in railway stuff in the uk.
05:41:37 <elliott_> tufte uses gill sans on his website (THANKS WIKIPEDIA)
05:41:41 <monqy> child abuse endorsement
05:41:43 <pikhq> Believe it or not, we're not completely ignorant of the UK; it's one of the few countries that we don't ignore, in fact.
05:42:08 <pikhq> Also, Gill Sans is a nice font.
05:42:12 <elliott_> monqy: and the child was a _dog_, too! wait, you're referring to his kids.
05:42:35 <monqy> bestiality endorsement
05:42:38 <elliott_> As the revelations about Gill's private life resonated, there was a reassessment of his personal and artistic achievement. As his recent biographer sums up:
05:42:38 <elliott_> "After the initial shock, […] as Gill's history of adulteries, incest, and experimental connection with his dog became public knowledge in the late 1980s, the consequent reassessment of his life and art left his artistic reputation strengthened. Gill emerged as one of the twentieth century's strangest and most original controversialists, a sometimes infuriating, always arresting spokesman for man's continuing need of God in an increasingly materialis
05:42:39 <elliott_> tic civilization, and for intellectual vigour in an age of encroaching triviality."[8]
05:42:57 <pikhq> Though, it's not Helvetica.
05:43:10 <elliott_> "well we got over the child abuse thing"
05:45:14 * pikhq wonders at Arial having ever been made
05:45:25 <pikhq> Fun fact: fonts cannot be copyrighted in the US.
05:45:32 <monqy> comic sans ms, papyrus
05:45:58 <zzo38> pikhq: I think that is only for raster fonts
05:46:00 <pikhq> elliott_: Ah, right, sorry. The distinction is important.
05:46:07 <zzo38> But I don't know for sure
05:46:12 <pikhq> zzo38: The shape of the glyphs is uncopyrightable.
05:46:41 <pikhq> zzo38: A programmatic representation of them, such as a TTF file, can be under copyright.
05:46:47 <coppro> pikhq: What about patents
05:47:43 <coppro> also, amusing: <Coworker 1> Other people can't file patents if we have them. <Coworker 2> No, you're wrong.
05:47:57 <pikhq> coppro: Novel designs can be patented.
05:48:07 <CakeProphet> In 1992, only days after the release of Windows 3.1, it was discovered that the character sequence "NYC" in Wingdings was rendered as a skull and crossbones symbol, Star of David, and thumbs up gesture. This was often interpreted as an antisemitic message.[8] Microsoft strongly denied this was intentional, and insisted that the final arrangement of the glyphs in the font was largely random. (The character sequence "NYC"
05:49:20 <pikhq> coppro: Of course, such a patent on Helvetica would have expired when Arial was made.
05:49:25 <pikhq> Hence, Arial has no reason to exist.
05:50:10 <CakeProphet> also, the article ☎ redirects to telephone on Wikipedia. I found this amusing.
05:50:15 <pikhq> https://secure.wikimedia.org/wikipedia/en/wiki/File:Wingdings_NYC.svg
05:50:21 <elliott_> CakeProphet: but are you serious
05:50:30 <CakeProphet> elliott_: ...now I don't know what you mean.
05:50:32 <elliott_> pikhq: can i improve upon shish
05:50:36 <pikhq> elliott_: Feel free.
05:50:38 <elliott_> CakeProphet: like do you really think that is strange
05:50:52 <CakeProphet> yes. I think it's strange that people would notice something like that and freak out.
05:51:10 <zzo38> This program http://sprunge.us/hZNB seems like it is one that should be written assembly language, not in C, it seems to me
05:51:43 <pikhq> zzo38: It halfway is.
05:52:27 <elliott_> pikhq: can you link me to the gcc docs on __asm__ thx
05:52:48 <elliott_> pikhq: btw the "c" (status) line has tabs
05:52:50 <pikhq> http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
05:52:56 <elliott_> oh, so do the pid and options lines
05:54:40 <Sgeo_> A reversible CA on a torus must eventually repeat everything, right? Because a normal CA on a torus eventualy goes in a loop like.... suppose I have a timeline A B C, then a normal CA might start from B. But a reversible CA, if it did that, would lose information about A, an dit would also imply that theee are two ways to get to B.
05:55:01 -!- zzo38 has quit (Remote host closed the connection).
05:55:44 <elliott_> pikhq: hmm, how would I get esi and edi set to specific values in an asm?
05:55:51 <coppro> elliott_: he obviously means california from this context
05:55:59 <elliott_> and also say i read esi and clobber bytes at edi and beyond (as a pointer)
05:57:14 <Sgeo_> coppro, cellular automata
05:57:32 <pikhq> elliott_: esi and edi are S and D
05:57:48 <CakeProphet> Sgeo_: not really, there are plenty of patterns that could die without any repetition. Essentially it is the same thing as a CA that wraps around.
05:58:00 <elliott_> pikhq: hmm, do the rep prefixes modify the destination poitner?
05:58:21 <newsham> slightly off topic for this channel, but might be amusing read http://adamharley.co.uk/2011/06/wordpress-plugin-backdoors/
05:58:37 <elliott_> newsham: are you kidding, we are never on topic
05:58:46 <newsham> analysis of the rogue source commits found on the wordpress repo recently
05:58:46 <elliott_> CakeProphet: why is that phrase objectionable
05:58:59 <Sgeo_> CakeProphet, hmm, how could something die, though? Death implies that a previous state was similar to the new one, and also a different previous state was more active than the new one
05:59:04 <elliott_> newsham: wait, people trust wordpress's code nowadays?
05:59:22 <elliott_> Sgeo_: do you like reversible cas because they'd prevent death
05:59:23 <pikhq> elliott_: That statement, I do not understand it.
05:59:28 <newsham> i dont knwo if they do, but if they do, they should probably upgrade. :)
05:59:47 <elliott_> newsham: so they can wait until the next vulnerability is found?
05:59:55 <Sgeo_> elliott_, well, presumably a conscious being on a reversible CA could still die, but on a torus, if the world repeats, they'd exist again.
06:00:04 <pikhq> elliott_: Ah. I dunno.
06:00:09 <elliott_> running code in an unsafe language run by amateurs on a high-profile website, PERFECT IDEA
06:00:38 <elliott_> Sgeo_: but is that why you like them
06:00:51 <CakeProphet> elliott_: perhaps when you are older I will tell you why I found that sequence of characters amusing.
06:01:05 <Sgeo_> elliott_, no, I just want a conserved quantity
06:01:16 <Sgeo_> So that there's something to compete over other than space
06:02:07 <elliott_> CakeProphet: my age is irrelevant, it just was not funny.
06:02:15 <monqy> I agree with elliott_
06:02:44 <CakeProphet> elliott_: yes it was actually a somewhat juvenile observation. oh well.
06:03:09 <elliott_> juvenile is fine as long as it's funny :P
06:03:24 <elliott_> ok but seriously i have to make this code shorter.
06:03:32 <elliott_> pikhq: hey why are all these asms volatile
06:04:08 <CakeProphet> Sgeo_: I've always thought a CA with several interesting states would be... interesting.
06:04:20 <CakeProphet> but that is something completely different than what you're talking about.
06:04:28 <coppro> CakeProphet: Do you know the Interesting Number Theorem?
06:04:48 <coppro> Theorem: Every natural number is interesting
06:04:51 <Sgeo_> What? Someone who's never heard of it?
06:05:08 <pikhq> elliott_: Actually, probably no good reason, thinking about it now.
06:05:39 <coppro> Proof: Consider the set of uninteresting natural numbers. If nonempty, it must contain a least element, which is the lowest uninteresting natural number. This is an interesting property. Contradiction. Therefore the set is empty.
06:06:12 <elliott_> shishorig.c: In function ‘small_waitpid’:
06:06:12 <elliott_> shishorig.c:59: error: ‘__NR_waitpid’ undeclared (first use in this function)
06:06:12 <elliott_> shishorig.c:59: error: (Each undeclared identifier is reported only once
06:06:13 <elliott_> shishorig.c:59: error: for each function it appears in.)
06:06:18 <Sgeo_> Is there such a thing as a noncomputable theorem?
06:06:32 <coppro> CakeProphet: The Interesting Number Theorem can be extended to any countable set
06:06:32 <elliott_> Sgeo_: how about defining that and then asking
06:07:03 <CakeProphet> coppro: so then theorems are a countable set?
06:07:10 <coppro> CakeProphet: obviously
06:07:13 <elliott_> i hate you all pikhq should just fix my problem
06:07:16 <pikhq> elliott_: Strange. That's in asm/unistd.h, part of the kernel headers.
06:07:20 <newsham> elliott: but this particular issue has nothing to do with amateur developers.
06:07:32 * Sgeo_ pretends not to have asked a similar question as CakeProphet did, even if I was joking
06:07:33 <newsham> its an intentionally placed backdoor through compromised accounts
06:07:37 <elliott_> newsham: but it still involves trusting wordpress code :)
06:07:45 <elliott_> coppro: the set of proofs is countable, the set of truths is not
06:08:02 <elliott_> pikhq: im on sixtyfour bit btw
06:08:04 <coppro> elliott_: it does depend on your definition of theorem, however
06:08:07 <newsham> i donnut use the wordpress
06:08:15 <coppro> a theorem can be expressed as a finite set of definitions, plus a statement
06:08:36 <elliott_> coppro: a theorem is a statement and a proof
06:08:39 <elliott_> then there are countable theorems
06:08:40 <pikhq> This *really* won't work on x86_64.
06:08:42 <elliott_> a theorem is a statement that is true
06:08:44 <elliott_> then there are uncountable theorems
06:08:58 <elliott_> /tmp/ccP6IGbl.o: In function `_start':
06:08:58 <elliott_> shishorig.c:(.text+0x4d): undefined reference to `__builtin_unreachable'
06:08:58 <elliott_> shishorig.c:(.text+0x177): undefined reference to `__builtin_unreachable'
06:09:09 <coppro> elliott_: The true statements expressible in the English language are, however, countable
06:09:18 <elliott_> pikhq: should shish just hang when you start it
06:09:18 <coppro> or in any reasonable human language
06:09:23 <elliott_> coppro: that has nothing to do with formal logic
06:09:35 <coppro> elliott_: neither do theorems
06:09:37 <pikhq> The fuck, it segfaults on input.
06:09:46 <elliott_> coppro: yes they do, theorem is a term of formal logic
06:10:09 <coppro> elliott_: Formal logical theorems are different from English theorems, though
06:10:27 <elliott_> coppro: nobody says theorem to mean "something true in English" apart from nerds trying to sound smart
06:10:28 <pikhq> elliott_: Yeah, WTF.
06:10:46 <coppro> elliott_: which is the One True Formal Logic then?
06:10:48 <pikhq> elliott_: Oh, wait. Of course it's not going to do anything if it gets passed a non-command.
06:10:56 <elliott_> coppro: there is none, obviously
06:11:01 <elliott_> coppro: english isn't a formal logic though
06:11:25 <elliott_> i was answering in terms of the most common logics, i don't know of one anyone uses that has a countable number of truths
06:11:40 <pikhq> elliott_: Also, it does not understand PATH.
06:11:53 <coppro> elliott_: Most logics actually do have a countable number of truths
06:12:03 <elliott_> coppro: are there a countable number of truths in zfc? i very much doubt that.
06:12:19 <coppro> elliott_: zfc is not a logic
06:12:28 <pikhq> The volatiles are needed.
06:13:15 <coppro> elliott_: I've typically seen it presented without syntactic trappings
06:13:19 <CakeProphet> "countable" being synonymous with "interesting", now that it is proven.
06:13:27 <coppro> CakeProphet: Not at all
06:13:48 <CakeProphet> "countable set" being synonymous with "interesting stuff"...?
06:13:53 <elliott_> coppro: well zfc is basically parameterised over the logic of your choice
06:14:02 <elliott_> CakeProphet: do you have any idea what you are talking about
06:14:05 <elliott_> coppro: so it's a family of logics :)
06:14:12 <CakeProphet> how could I not know what I am talking about. That is silly.
06:14:32 <CakeProphet> I didn't even make that a question, because it is so obvious that I do not need to ask.
06:14:39 <coppro> elliott_: First-order may or may not have a countable number of truths, depending on the model
06:14:52 <coppro> if the model has an uncountable member, the set of truths be uncountable
06:15:13 <elliott_> pikhq: } else if (*(unsigned*)tokened[0] == '\0tes') {
06:15:36 <elliott_> first-order logic upsets me :(
06:15:40 <pikhq> elliott_: Yes, that's for env.
06:15:42 <elliott_> it's like not having first-class functions
06:16:07 <pikhq> elliott_: "set foo=bar"
06:16:07 <newsham> elliott: assuming unsigned * is a 4 byte integer?
06:16:17 <elliott_> pikhq: how come /usr/bin/env does nothing
06:16:22 <elliott_> newsham: yeah this program is wildly unportable
06:16:59 <pikhq> elliott_: Define "does nothing".
06:17:24 <elliott_> it should print the environment
06:17:34 <elliott_> the environment starts off empty
06:18:15 <pikhq> This really, truly is the shittiest shell possible.
06:18:27 <CakeProphet> elliott_: if the interesting number theorem can be extended to any countable set, then that means all countable sets contain interesting elements. :)
06:18:33 <elliott_> hmm, is there a gcc-favoured way to get a constant value into a register in an __asm__?
06:18:50 <CakeProphet> so I can now use this theorem to gauge the interestingness of things, though I cannot determine if something is not interesting.
06:23:47 <elliott_> pikhq: ugh, how do you just say you are clobbering a register?
06:23:52 <elliott_> without actually outputting it to anything
06:25:05 <pikhq> elliott_: Pretty sure you just give the constraint for the register.
06:25:57 <pikhq> ... Oh, wait, obvious error is obvious.
06:26:33 <pikhq> "=a" is used to indicate that the operand is an output, and you stuck it with the inputs.
06:26:52 <pikhq> __asm__("..." : "=a" : ...)
06:27:28 <elliott_> ../Desktop/shish.c:55:13: error: matching constraint references invalid operand number
06:27:47 <elliott_> i just put it in the clobbered list
06:28:21 <pikhq> Well, that was simple. :P
06:30:33 <CakeProphet> couldn't you prove that all rational numbers are interesting?
06:30:41 <elliott_> ../Desktop/shish.c:33:12: error: expected ‘)’ before ‘:’ token
06:30:53 <elliott_> CakeProphet: no, the rational numbers aren't countable, DUHHHHHH
06:30:59 <elliott_> coppro said it only applies to countable sets
06:31:04 <elliott_> DURHHHHHHHHHHHHHHHHHHHHHHHHHHH
06:31:15 <CakeProphet> well right, this is a new theorem that we are trying to prove. :)
06:32:35 <CakeProphet> well, if we could prove that uncountable sets are also interesting, and that cardinality of a set corresponds to more interesting sets
06:32:41 <CakeProphet> perhaps we could find THE MOST INTERESTING set.
06:32:50 <Sgeo_> CakeProphet, rational numbers are countable
06:33:00 <monqy> paradoxes are pretty interesting. how about one of those.
06:34:37 <CakeProphet> oh no, you've caught me, I don't know everything.
06:35:25 <Sgeo_> I usually expect to be bottom of the #esoteric barrel. I mean, top of most people I meet IRL, but this place is ... I'm low here
06:35:57 * Sgeo_ stops being mean to CakeProphet
06:37:13 <CakeProphet> yeah, you guys are going to hurt my feelings. :(
06:37:46 <pikhq> Easy solution to that. Queen.
06:39:03 <CakeProphet> I think he's talking about the band? maybe?
06:39:16 <pikhq> I'm not sure why I said it.
06:39:21 <pikhq> But yes, I was referring to the band.
06:39:30 <pikhq> Also the album, but mostly the band.
06:39:52 <elliott_> <coppro> elliott_: well played
06:40:06 <elliott_> i was sure the durhhhhs would give me away :(
06:40:22 <elliott_> <CakeProphet> oh no, you've caught me, I don't know everything.
06:40:34 <elliott_> i'm sorry dude but knowing the rationals are countable is like the second thing to know about countability after what it is
06:41:18 <CakeProphet> that is essentially what I know about countability.
06:41:59 <CakeProphet> it did not occur to me that every quotient of any two natural numbers can also be counted.
06:42:24 <Sgeo_> Involve an infinite number of natural numbers, _then_ it's uncountable
06:42:52 <pikhq> It's utterly trivial to do an isomorphism from (Integer, Integer) to Integer.
06:43:50 <pikhq> Or any tuple, really.
06:43:51 <CakeProphet> ....? but aren't rational numbers a quotient of /any/ (read: from an infinite set of natural numbers) integers? According to what Sgeo_ says that would make rational numbers uncountable?
06:44:08 <elliott_> CakeProphet: products of countable sets are countable
06:44:29 <Sgeo_> CakeProphet, no, as in, if to specify an entity, it took an infinite amount of natural numbers
06:44:47 <Sgeo_> Let's say rationals are points on a 2-dimensional plane (ok, that's redundant, I know)
06:45:03 <pikhq> CakeProphet: https://secure.wikimedia.org/wikipedia/en/wiki/Cantor_pairing_function#Cantor_pairing_function
06:45:04 <Sgeo_> Where each dimension is an integer
06:45:15 <elliott_> CakeProphet: the set of infinite lists of naturals is uncountable.
06:45:47 <Sgeo_> Now, if you had infinite number of dimensions, even though each dimension can only take integer values, the number of points is uncountably infinite
06:46:07 <elliott_> Sgeo_: this is a really awkward explanation
06:46:28 <pikhq> elliott_: I suspect he's coming up with it as he's going along. Would explain the awkwardness.
06:46:58 <Sgeo_> Ok, better yet. Take a real number, which in some cases takes an infintie number of digits to describe
06:47:21 <CakeProphet> I see how it's countable, I think. But I usually think of these things algorithmically and so I couldn't see a clear algorithm to assign each rational number to a natural number.
06:47:29 <Sgeo_> The reals are uncountably infinite, even though each digit can only have 1 of 10 values.
06:47:42 <Sgeo_> (or whatever base.. which would still be written 10, but wahtever0
06:47:54 <elliott_> Sgeo_: you're not making this any less awkward :P
06:48:05 <elliott_> CakeProphet: but consider interleaving the bits, Q.E.D.
06:48:39 <pikhq> CakeProphet: https://secure.wikimedia.org/wikipedia/en/wiki/Cantor_pairing_function#Cantor_pairing_function
06:48:54 <pikhq> CakeProphet: And realise that the rationals can be represented as a 2-tuple of naturals.
06:49:26 <elliott_> pikhq: it's not that simple since you need a bijection
06:49:54 <pikhq> elliott_: The Cantor pairing function is a bijection.
06:49:59 <CakeProphet> pikhq: already realized. Don't need to worry.
06:50:01 <Sgeo_> Well, the fact that that function works isn't intuitive to me, I prefer thinking along the lines of assigning 0,0 to 0, 0,1 to 1, 1,0 to 2, etc. etc. etc
06:50:12 <elliott_> pikhq: but rationals are not a pair of integers
06:50:16 <Sgeo_> That's how I understand it, don't know if this function is equivalent
06:50:31 <Sgeo_> (well, of course dealing with negatives)
06:50:35 <pikhq> *That* bijection is at least a bit more obvious, though.
06:50:58 <pikhq> Sgeo_: That is the mapping, yes.
06:56:26 <elliott_> http://web.cs.wpi.edu/~jshutt/kernel.html
06:56:31 <elliott_> i hope this has first-class environments
06:56:35 <CakeProphet> > let icantorpair z = let w=(sqrt(8*z+1)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:57:12 <elliott_> > let icantorpair z = let w=(sqrt(8*z+1)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:57:26 <elliott_> > let icantorpair z = let w=(truncate (sqrt (8*z+1))-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:57:27 <lambdabot> Ambiguous type variable `t' in the constraints:
06:57:34 <elliott_> > let icantorpair z = let w=(truncate (sqrt (8*z+1) :: CReal)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:57:35 <lambdabot> No instance for (GHC.Real.Integral Data.Number.CReal.CReal)
06:57:39 <elliott_> > let icantorpair z = let w=(truncate (sqrt (8*z+1) :: Double)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:57:40 <lambdabot> No instance for (GHC.Real.Integral GHC.Types.Double)
06:57:50 <lambdabot> forall a b. (RealFrac a, Integral b) => a -> b
06:58:03 <elliott_> > let icantorpair z = let w=((truncate (sqrt (8*z+1) :: Double)::Integer)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:58:05 <lambdabot> Couldn't match expected type `GHC.Types.Double'
06:58:13 <elliott_> > let icantorpair z = let w=((truncate (sqrt (8*z+1) :: Double)::Integer)-1) `div` 2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:58:14 <lambdabot> Couldn't match expected type `GHC.Types.Double'
06:58:57 <Sgeo_> I'm still obsessed with the idea that, if intelligent life emerges in a reversible CA on a torus, it _will_ inevitably be destroyed
06:59:06 <elliott_> you are obsessed with everything.
06:59:17 <elliott_> > let icantorpair z = let w=((truncate (sqrt (8*(fromIntegral z)+1) :: Double)::Integer)-1) `div` 2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:59:18 <lambdabot> No instance for (GHC.Float.Floating GHC.Integer.Type.Integer)
06:59:21 <lambdabot> forall a b. (Integral a, Num b) => a -> b
06:59:43 <elliott_> > let icantorpair z = let w=(truncate (sqrt (8*(fromInteger z)+1) :: Double)-1) `idv` 2; t=(w**2+w) `div` 2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:59:48 <elliott_> > let icantorpair z = let w=(truncate (sqrt (8*(fromInteger z)+1) :: Double)-1) `div` 2; t=(w**2+w) `div` 2; y=z-t; x=w-y in (x,y) in icantorpair 21
06:59:49 <lambdabot> No instance for (GHC.Float.Floating GHC.Integer.Type.Integer)
06:59:53 <Sgeo_> If the scientists figure out they're on a torus somehow, and understand reversiblity, then...
07:00:01 <elliott_> CakeProphet: i am trying to make it not result in doubles, but am far too lazy
07:00:24 <elliott_> because its a bijection on naturals
07:00:42 <elliott_> ...do you even understand anything
07:00:52 <Sgeo_> Can reversible CAs be turing-complete?
07:00:57 <CakeProphet> I am just not as picky as you about these things. That is the difference in this case.
07:01:05 <elliott_> Sgeo_: yes. proof: reversible languages can
07:01:07 <elliott_> CakeProphet: it's nothing about pickiness
07:02:23 <elliott_> we are looking for a function (Integer,Integer) -> Integer (actually (Nat,Nat) -> Nat, but unfortunately Haskell has no natural type)
07:02:41 <elliott_> yours is Integer -> (Double,Double) which is incorrect (actually a bunch of things with Num and Floating but that's irrelevant)
07:03:49 <elliott_> it's like writing down 2 + 2 = 5 and saying it's correct because you're not picky.
07:04:39 <CakeProphet> ...no. it's not caring because I am not writing an actual program and only care about getting a result that is readable by me.
07:04:53 <elliott_> <CakeProphet> ...but it's a program. it's all good..
07:05:15 <elliott_> anyway, you're the one who objected to me attempting to correct your function
07:05:50 <CakeProphet> let icantorpair z = let w=(sqrt(8*z+1)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in map icantpair [0..]
07:05:55 <CakeProphet> > let icantorpair z = let w=(sqrt(8*z+1)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in map icantpair [0..]
07:06:01 <CakeProphet> > let icantorpair z = let w=(sqrt(8*z+1)-1)/2; t=(w**2+w)/2; y=z-t; x=w-y in (x,y) in map icantorpair [0..]
07:06:03 <lambdabot> [(0.0,0.0),(1.0,0.0),(1.5615528128088303,0.0),(2.0,0.0),(2.3722813232690143...
07:06:13 <elliott_> using doubles broke your program
07:06:45 <pikhq> *sigh* Double. It really shouldn't be a Num.
07:07:02 <elliott_> why not, it is a perfectly valid Num
07:07:06 <elliott_> the fault is Num requiring Eq and Show
07:07:29 <pikhq> Floating point "numbers" are not associative.
07:08:07 <elliott_> pikhq: where does Num require this?
07:08:22 <CakeProphet> I thought it was the operation/relation that was associative.
07:09:00 <pikhq> elliott_: Though the typeclass doesn't require it, the user probably does.
07:09:42 <elliott_> pikhq: this is silly; what of surreal numbers/games?
07:10:05 <elliott_> you can hardly define what Num is because the whole typeclass is stupid, there is no point putting additional constraints on
07:10:25 <pikhq> True, the whole typeclass is a misfeature.
07:12:04 <CakeProphet> elliott_: I would prefer that you actually communicate with me instead of being condescending and assuming I'm just stupid.
07:12:21 <pikhq> What with there being, say, vectors, that you might like to be able to use normal addition on, even though there's not really a sane multiplication function for them.
07:12:38 <elliott_> CakeProphet: you criticised me for trying to fix your program, likening it to needless pedanticism; then you respond to an offhand remark of pikhq with needless pedanticism
07:12:55 <elliott_> if i tried to converse with you under such circumstances, it would merely try my patience.
07:14:25 <CakeProphet> elliott_: no, see. I was fine with you fixing the program. I thought you had gotten it to work when it returned doubles. At that point, I thought you were simply trying to make the types reflect the actual mathematical definition, which I thought was a waste of time since the program seemed to work. My mistake.
07:14:51 <elliott_> it returned doubles when you wrote it, all my modifications were to make it integers
07:15:21 <CakeProphet> ah, yeah it timed out on mine. I thought you made changes.
07:16:30 <Sgeo_> I think they would all starve to death. After all, they would likely require some sort of energetic ... stuff for their brains
07:17:53 <CakeProphet> how could life exist on an abstract mathematical grid?
07:18:24 <Sgeo_> How can life exist that's made of mathematically describable matter?
07:18:57 <CakeProphet> so you mean, what if intelligent life existed in a torus shaped universe?
07:19:28 <Sgeo_> I'm sticking with torus shaped universe for simplicity
07:20:10 <elliott_> but seriously, what do you mean "how could life exist on an abstract mathematical grid"
07:20:27 <CakeProphet> it just sounds strange to talk about something life on an idea.
07:20:51 <elliott_> im seriously not trying to be condescending you're just not making any sense
07:21:22 -!- choochter has joined.
07:21:25 <CakeProphet> as in, I don't see how it makes sense to talk about things living on an automata. Does that not sound strange to you?
07:21:55 <Sgeo_> We know of GoL replicators. That's a start
07:22:01 -!- Slereah has joined.
07:22:04 <pikhq> CakeProphet: It is possible that we live in an automaton.
07:22:16 <elliott_> CakeProphet: I don't see how that sounds strange
07:22:31 <pikhq> (whether or not we *do* is, of course, an unanswered question ATM.)
07:22:33 <elliott_> this has nothing to do with platonism
07:22:40 <elliott_> we can model the universe FUCK NOW IT'S ABSTRACT HOW CAN LIFE EXIST ANY MORE
07:23:25 <CakeProphet> right, talking about life in a universe sounds fine to me. But talking about a physical entity on an abstract entity does not make any sense. Sure, we can model physical things with abstract things, but that does not mean they are one and the same.
07:24:02 <elliott_> or is life made out of a bunch of on-off squares unimaginable to you
07:24:09 <elliott_> in which case, WHOO boy let me tell you about these things called quarks
07:24:24 <Sgeo_> electrons aren't made of quarks
07:25:08 <CakeProphet> well no, I just tend to think of life as a physical occurence. Talking about intelligent or self-replication in an abstract model makes sense, yes.
07:25:09 <elliott_> Sgeo_: sorry ill adjust all my jokes for accuracy in future
07:25:29 <elliott_> CakeProphet: what is not "physical" about a CA
07:25:37 <elliott_> is it because it's two-dimensional
07:25:58 <Sgeo_> elliott_, didn't you like the mathematical universe hypothesis once?
07:26:11 <elliott_> this has nothing to do with platonism or anything
07:26:16 <CakeProphet> no, it's because it is a thing that only exists in our minds. I suppose it has a physical existence in our universe, but it's purely a neurological thing and not an actual 2D grid in our universe.
07:26:39 <elliott_> you do seriously realise you're making no sense at this point?
07:26:49 <elliott_> imagining physical life in a CA is no different to imagining a physical cylinder in an imaginary three dimensional world
07:26:58 <elliott_> and saying you cant imagine a cylinder because IT;S JUST NEUROLOGICAL ...
07:27:21 <elliott_> there is nothing non-physical about the cylinder, or the life
07:27:48 <pikhq> CakeProphet: Boy, I bet you'd love you some solipsism.
07:28:43 <CakeProphet> you can imagine physical things, sure. You can also imagine abstract things, because that is how they come to be in the first place. But I don't see how you can imagine a physical thing in an abstract system where it doesn't belong.
07:29:12 <CakeProphet> but yes, I understand what Sgeo_ means by "life" in a CA now.
07:29:17 <elliott_> ok so what makes imagining a cylinder a physical thing, and imagining CA cells not a physical thing
07:29:22 <elliott_> is it because a CA is discrete? two-dimensional?
07:29:30 <elliott_> what makes an imagination of an object in a world physical or abstract
07:30:07 <CakeProphet> well a cylinder is also an abstract object...
07:30:38 <elliott_> what is imagining something physical, then?
07:31:20 <CakeProphet> but if you imagine your room, then it can fit together into other imaginings that correspond to the system it resides in. I suppose that means three-dimensional, yes. Since when imagining things, you could also imagining that your room can now fly, or something.
07:31:47 <elliott_> did you really think all of this the first time you got confused by someone saying life or are you just trying to justify it after the fact because that sentence makes literally no sense
07:31:53 <elliott_> as far as an explanation as to how it's physical goes
07:31:57 <CakeProphet> it doesn't have to correspond to the physical world no. But it generally has to make sense to exist in the imagined environment.
07:32:02 <CakeProphet> elliott_: no this is all justification for your questions.
07:34:11 <CakeProphet> I was just trying to imagine a physical lifeform residing in a concept, and having trouble seeing how that would make sense. But yes, I can see how you can model life in a CA.
07:34:44 <elliott_> i still have no idea how you are defining physical and concept
07:34:50 <CakeProphet> but when you talk about sentient beings "living" in a CA, doesn't make sense to me.
07:34:51 <elliott_> what makes a CA a concept and our universe a physical thing
07:36:00 -!- monqy has quit (Quit: hello).
07:36:01 <CakeProphet> different categories of knowledge I suppose. This is a tricky thing for me to try to explain. It's probably an intuitive notion to a degree.
07:36:39 <elliott_> is Minecraft physical in this sense or a concept
07:36:42 <elliott_> can you imagine living in Minecraft
07:37:45 <CakeProphet> I can imagine living in Minecraft, but I could not actually live in Minecraft. Also, to be an accurate representation of Minecraft, I would have to conform to Minecraft physics.
07:37:53 <CakeProphet> i.e. I would have to be made of large blocks.
07:38:27 <elliott_> is Minecraft physical in this sense or a concept
07:38:31 <CakeProphet> but that isn't strictly true. I could just be superimposed in Minecraft world, but then it corresponds less to the actual Minecraft world (which is also a concept)
07:38:33 <elliott_> is Minecraft physical in this sense or a concept
07:38:48 <elliott_> something is physical if it's literally identical to this universe
07:39:02 <elliott_> and you can only talk about physical things living in this universe
07:39:09 <elliott_> ok, great, that's totally a thing that makes no sense at all
07:39:38 <elliott_> totally can't imagine referring to something physical living in a world that's exactly like the earth, but flattened out and repeated forever, with an infinitely high sky and an infinitely deep (tiled) underground
07:40:10 <CakeProphet> it seemed that Sgeo was talking about some actual species of life living on a CA, and the possibility that something could exist. Perhaps I misunderstood.
07:40:34 <elliott_> what do you mean "something could exist"
07:42:00 <pikhq> I think I'm going to have some fun here...
07:42:05 <pikhq> CakeProphet: Prove to me the universe exists.
07:42:20 <elliott_> CakeProphet: exist as in physically?
07:42:24 <pikhq> But I think you're just a concept!
07:42:32 <CakeProphet> elliott_: well, that's what I was thinking at the time.
07:42:35 <elliott_> CakeProphet: can you imagine simulating a CA on a computer and an intelligent species of life arising
07:42:43 <elliott_> (consider periodic injections of random blocks)
07:43:19 <elliott_> i really think this is just a case of you not having a good enough imagination to imagine life existing in a CA. or you're just not applying it. i honestly cannot see what distinction you are trying to make between physical and abstract at all.
07:43:45 <pikhq> elliott_: He can't even prove there is such a thing as "physical". :)
07:43:59 <CakeProphet> not a species in the typical sense, no. I can imagine intelligence emerging on a CA, and even being closed into a particular homeostatic pattern.
07:44:34 <CakeProphet> pikhq: I just don't want to get into epistemology :P
07:44:34 <elliott_> you realise species is just... a specific type of life
07:44:43 <elliott_> OE SHITE ITS NOT IDENTICAL TO EARTH LIFE IT CANT BE A SPECIES
07:45:25 <CakeProphet> it's just semantics, dude. I said it's not a typical species.
07:45:32 <pikhq> CakeProphet: What I was trying to get you to realise is that your distinction presumes that there is such a thing as "physicalness", even though it is entirely possible that there is not.
07:45:34 <CakeProphet> since it's atypical to what is typical to us.
07:45:42 <pikhq> CakeProphet: We could ourselves be in a simulation.
07:45:43 <elliott_> you're the one being a pedant about what a species is here
07:45:48 <pikhq> Or someone's hallucination.
07:46:00 <CakeProphet> pikhq: yes, see, this is why I didn't want to get into that. :P
07:46:21 <pikhq> Trying to pretend that this world is special in a way that an interesting cellular automaton is not is, well, utterly pointless.
07:46:26 -!- iamcal has quit (Remote host closed the connection).
07:46:36 -!- iamcal has joined.
07:47:01 <pikhq> What, "I didn't want to be shown stupid"?
07:47:23 <CakeProphet> pikhq: I didn't. I simply misunderstood what Sgeo was saying. I was maintaining a distinction between unrelated concepts. In particular, "physical life" and "cellular automaton"
07:47:44 <pikhq> Pointless distinction.
07:47:59 <pikhq> And quite plausibly not even well-founded.
07:48:10 <CakeProphet> pikhq: probably not. Since, after all, we can't know anything.
07:48:22 <pikhq> Oh, we can know lots of things.
07:48:24 <elliott_> please someone else say something
07:48:44 <elliott_> coppro: hows about the good man here do you want to say words
07:49:04 <pikhq> elliott_: Bird's the word.
07:50:00 <CakeProphet> I didn't really intend to start any sort of argument.
07:51:26 <CakeProphet> actually, what I was originally talking about wasn't even remotely philosophical.
07:53:01 -!- Vorpal has joined.
07:53:57 <CakeProphet> elliott_: if you want to change subjects, we could always talk about the semantics of Perl. >:D >:D >:D >:D
07:55:43 <elliott_> i am going to officially strike today from the log record it is too bad
07:56:06 -!- elliott_ has quit (Remote host closed the connection).
07:56:26 <Vorpal> <elliott_> i am going to officially strike today from the log record it is too bad
07:56:34 -!- elliott has joined.
07:57:19 <Vorpal> elliott, give me a good reason not to
07:57:54 <Vorpal> CakeProphet, why, elliott doesn't hate you does he?
07:58:25 <elliott> Vorpal: unrelatedly, see /msg
08:03:06 <pikhq> Wow. RCA made a car record player.
08:03:34 <pikhq> Only did 45s, but hey.
08:04:50 <CakeProphet> elliott: do you have anything in your strife specibus at the moment?
08:05:58 <CakeProphet> I have a can of orange Fanta, which I will pretend is Faygo.
08:06:26 <elliott> pretend to be fictional characters in a webcomic irc event 2011
08:22:24 -!- MigoMipo has joined.
08:36:38 <elliott> ?pl f (\s -> g (\t -> k (s.t)))
08:36:43 <elliott> ?pl (\s -> g (\t -> k (s.t)))
08:36:47 <Sgeo_> Seems like someone else had the same idea I did
08:38:14 -!- aloril has quit (Ping timeout: 246 seconds).
08:39:18 <elliott> :: (((b -> c) -> t1) -> t)
08:39:18 <elliott> -> (((a -> b) -> t2) -> t1)
08:39:34 <elliott> ?hoogle (((b -> c) -> t1) -> t) -> (((a -> b) -> t2) -> t1) -> ((a -> c) -> t2) -> t
08:41:02 <Sgeo_> This does not.... look reversible
08:44:20 <Deewiant> ?djinn (((b -> c) -> t1) -> t) -> (((a -> b) -> t2) -> t1) -> ((a -> c) -> t2) -> t
08:44:21 <lambdabot> f a b c = a (\ d -> b (\ e -> c (\ f -> d (e f))))
08:44:37 <Deewiant> ?. pl djinn (((b -> c) -> t1) -> t) -> (((a -> b) -> t2) -> t1) -> ((a -> c) -> t2) -> t
08:44:37 <lambdabot> f = (. ((. ((. (.)) . (.))) . (.))) . (.)
08:47:32 <elliott> Deewiant: unfortunately i'm having trouble simplifying the type down
08:49:44 <Sgeo_> HOW DOES IT EVEN MAKE SENSE FOR A UNIVERSE OPERATING BY REVERSIBLE RULES THAT WAS ACTIVE TO BECOME STATIC
08:50:07 <Sgeo_> I'm going to assume that either I installed this rule improperly, or the person who made it is an idiot
08:50:11 -!- adamfyre has joined.
08:50:34 -!- adamfyre has quit (Client Quit).
08:52:21 -!- aloril has joined.
09:02:05 -!- azaq23 has quit (Quit: Leaving.).
09:05:34 <elliott> *Data.Format> format (str "List:" %% each (str " " %% showable)) [9,0,9]
09:07:42 <lambdabot> intercalate xs xss = concat (intersperse xs xss)
09:11:47 -!- Slereah has quit (Ping timeout: 240 seconds).
09:19:54 -!- oerjan has joined.
09:24:13 <oerjan> <Sgeo> https://docs.google.com/document/pub?id=18eLRRmojIXEU36uad7lW7XwRRGEKFvjiYV6pS3-UF-4 well, this is intuitive as mud.
09:24:26 <oerjan> well, _i_ thought it was obvious
09:26:09 <elliott> oerjan: later on: discover that sgeo thought reversibility = time symmetry
09:27:45 <oerjan> oh? well all CAs are time symmetric.
09:27:59 <oerjan> (for the symmetry of adding one tick, anyway)
09:28:15 <oerjan> <quintopia> therefore, the universe is not reversible
09:28:26 <oerjan> I DO NOT THINK THIS IS GENERALLY AGREED UPON
09:32:10 <elliott> this channel seems to constantly see us authoritatively stating absolute bullshit. :D
09:35:04 <elliott> oerjan: i am having typeclass problems :(
09:36:21 <oerjan> well just rejoice in the fact ghc now allows equations in superclass contexts, maybe that solves your problem
09:37:16 <elliott> oerjan: but no, no it does not
09:37:27 <elliott> oerjan: it's a problem with a too-polymorphic instance not getting recognised, I think
09:37:36 -!- augur has quit (Remote host closed the connection).
09:37:37 <elliott> i.e. it's saying "no instance for (more specific thing despite me having a more general instance)"
09:37:41 <elliott> this is where flexibleinstances leads :(
09:37:47 <elliott> the worst thing is, I seem to _recall_ this working prior
09:37:55 <elliott> what did I do differently...
09:39:45 <coppro> elliott: No one in this channel ever authoritatively states absolute bullshit.
09:40:43 <coppro> I fear what would happen if elliott and I were to meet
09:41:06 <elliott> right after you start defending C++
09:41:07 <oerjan> some explosion involving gamma rays
09:41:17 <elliott> i didn't specify the kind of bloodshed
09:41:22 <coppro> elliott: nah, you're free to attack C++
09:41:31 <elliott> coppro: yeah, but you're not free to defend it
09:41:45 <coppro> elliott: but I'll defend to the death your right to.. wait
09:43:18 <elliott> oerjan: now i wonder if you're sympathetic enough to try and _fix_ it...
09:43:21 <elliott> btw i fixed my space leak :D
09:43:44 <elliott> the problem was that i was binding the zip, rather than zipping it all at once and _then_ binding
09:44:45 <coppro> elliott: what are you writing?
09:45:00 <elliott> coppro: two different things
09:45:21 <elliott> The space leak was in my work-in-progress wc.hs, which is an attempt to write a wc that has feature-parity with GNU wc and is much, much faster
09:45:44 <elliott> (I already have something that does the basic byte-only wc quite a bit faster than GNU wc with multibyte disabled)
09:46:00 <elliott> (It fails a bit at word-counting, but what it does instead is as expensive, so it's a fair win :))
09:46:09 <elliott> While also being readable and clean
09:46:16 <elliott> So far I'm succeeding excellently
09:48:07 <elliott> No instance for (Format (Formatter r0 (a1 -> r0)) String a0)
09:48:07 <elliott> arising from a use of `format'
09:48:59 <oerjan> yo dawg i heard you like to format
09:50:16 <elliott> oerjan: this is me attempting to generalise my (stolen the idea from somewhere -- I forget where) type-safe formatting combinators to something hackageable
09:50:31 <CakeProphet> elliott: do you recommend iteratee for regex processing?
09:51:08 <elliott> oerjan: i.e. format ("Elements: " %% str %% eachJoin ", " str) ["a", "b", "c"]
09:52:48 <CakeProphet> What would help me write a regex interpreter/compiler in Haskell?
10:01:58 <elliott> http://pastebin.com/f12c043e1 meanwhile, some ocaml code i wrote in early 2009
10:11:50 -!- augur has joined.
10:13:47 <CakeProphet> In February 2011, Cage claimed to have created a new method of acting he calls Nouveau Shamanic. He claims to have used the acting style throughout his career and one day plans to write a book about the method.[citation needed]
10:15:48 <elliott> googling suggests it used to be cited
10:15:51 <elliott> probably with a bad citation
10:18:36 <CakeProphet> I'm such a Homestuck fanboy that I might buy a godhoodie..
10:19:03 <elliott> yeah, um, the fanboy thing wears off a little after a week or so.
10:19:19 <elliott> i would have bought the hero of breath hoodie if it had the stupidly long hood :)
10:20:45 <CakeProphet> I mean, it would be awesome, but I would get strange looks when walking around in public.
10:21:13 <CakeProphet> also, it would probably be way more expensive.
10:21:34 <elliott> ah, then i diagnose you with boring normal person disorder
10:22:47 <CakeProphet> though I fail pretty well at that actually.
10:22:59 <CakeProphet> maybe I do get weird looks? I'm not sure actually.
10:23:13 <elliott> you could make it certain by making your own ridiculous godhood
10:23:34 <augur> happy Turing day! \o/
10:24:10 <augur> edgy is for hipsters
10:28:01 <lambdabot> Not in scope: data constructor `Cont'
10:28:11 <lambdabot> Not in scope: data constructor `Control.Monad.Cont'
10:28:17 <lambdabot> forall r a. Cont r a -> (a -> r) -> r
10:29:14 <elliott> oerjan: tempting only in that it could make (f %% g) k = f $ \s -> g $ \t -> k (s . t)
10:32:09 <oerjan> :t let (f %% g) k = f $ \s -> g $ \t -> k (s . t) in (%%)
10:32:10 <lambdabot> forall a b b1 b2 (f :: * -> *) t. (Functor f) => (((a -> b) -> b1) -> b2) -> ((f a -> t) -> b1) -> (f b -> t) -> b2
10:32:26 <oerjan> :t let (f %% g) k = f $ \s -> g $ \t -> k (s Prelude.. t) in (%%)
10:32:27 <lambdabot> forall b c b1 b2 a t. (((b -> c) -> b1) -> b2) -> (((a -> b) -> t) -> b1) -> ((a -> c) -> t) -> b2
10:32:51 <oerjan> maybe too much switching of the final type
10:33:39 <lambdabot> Maybe you meant: ft map msg pl unmtl url
10:36:12 <elliott> oerjan: overloadedstrings or TYPECLASS???///
10:37:41 <elliott> 21:26:16: <AnMaster> <oerjan> kerlo: i hear "assume a spherical cow" is well-known <-- spherical copy on write?
10:39:53 <elliott> 22:11:06: <oerjan> <ehird> sprintf has one of those stupid collapsing '_a types
10:39:53 <elliott> 22:11:12: <oerjan> value restriction?
10:39:53 <elliott> 22:11:33: <ehird> yeah what is that thing
10:42:05 <oerjan> but you are saying it's working now?
10:43:02 <elliott> oerjan: i'm saying it's not ocaml any more :D
10:43:06 <elliott> 22:25:05: <oerjan> <ehird> snot a very good name
10:43:06 <elliott> 22:25:21: <oerjan> i shall have you hear from my lawyer!
10:43:49 <oerjan> once i get the money to pay him, anyway
10:43:51 <elliott> 23:04:40: <ehird> we should genetically modify humans to just breed breed breed
10:43:51 <elliott> 23:04:43: <ehird> and get infinite humans
10:43:51 <elliott> 23:04:45: <ais523> ehird: no we shouldn't
10:43:58 <elliott> good advice hour with ais523
10:46:37 <elliott> oerjan: oh, heh, i originally did this in oh-eight
10:47:52 <oerjan> http://caml.inria.fr/pub/papers/garrigue-value_restriction-fiwflp04.pdf might be relevant. annoyingly it doesn't have a proper date...
10:48:41 <elliott> 00:57:56: <ehird> (%) (FormatterInt f) (FormatterInt g) =
10:48:41 <elliott> 00:57:57: <ehird> FormatterInt (\k r -> f (g k) r)
10:52:11 <elliott> 22:22:18: <oerjan> i don't play any games more violent than FreeCiv
10:52:11 <elliott> 22:22:36: <Slereah_> I don't play any game more violent than Postal 2.
10:52:11 <elliott> 22:22:46: <Slereah_> But only because I haven't found any so far.
10:55:52 -!- elliott has quit (Remote host closed the connection).
10:56:21 -!- elliott has joined.
11:02:38 * CakeProphet is trying to decide what data structure to use for a look-back buffer in a regex interpreter.
11:03:59 <elliott> Could not deduce (r ~ (s -> s))
11:03:59 <elliott> from the context (Monoid s)
11:05:49 -!- Tritonio_GR has quit (Quit: Leaving).
11:06:07 <CakeProphet> I'd like to have infinite look-back somehow/
11:07:08 <CakeProphet> it would be easy if look-back patterns were in reverse. Because then I could just construct a reverse list of previous characters.
11:08:33 <CakeProphet> ah, I could execute the look-back pattern in reverse on a reversed buffer..
11:13:53 <CakeProphet> I think infinite-lookback is just going to be complicated, and I'll worry about it later.
11:16:01 <elliott> oerjan: gah, why do flexible instances simply never work?
11:16:04 <elliott> instance IsString (Formatter r r) where
11:16:10 <elliott> No instance for (IsString (Formatter String a0))
11:16:26 <elliott> format "a" :: IsString (Formatter String a) => a
11:19:42 <oerjan> well does format "a" :: String work?
11:20:56 <elliott> foo :: Int -> Int -> String
11:20:56 <elliott> foo = format (showable % " " % showable)
11:21:01 <elliott> (Formatter (a0 -> String) (Int -> String)))
11:22:06 <oerjan> so basically it cannot deduce what a0 is
11:23:47 <CakeProphet> What other behavior are you going for besides simply interpolating the string produced by show?
11:25:23 <cheater_> years later, i am still sad about the fact that i hadn't taken the chance
11:25:37 <cheater_> it is one of the big failures of my life.
11:25:44 <CakeProphet> couldn't you just use functions for those?
11:26:01 <elliott> CakeProphet: what do you think i am doing
11:28:14 <lambdabot> forall a. (Show a) => a -> String -> String
11:32:36 <elliott> CakeProphet: it is not a (++)
11:36:08 -!- FireFly has joined.
11:36:17 <oerjan> CakeProphet: it has much better complexity, because you aren't _nesting_ ++ 's
11:37:25 <oerjan> and especially not in the left argument
11:37:36 <Deewiant> CakeProphet: Think about left vs right associative ++
11:39:04 <Deewiant> One is linear in the length of the result, the other quadratic
11:40:22 <oerjan> > foldl' (++) $ replicate 1000 "a"
11:40:23 <lambdabot> Overlapping instances for GHC.Show.Show
11:40:32 <oerjan> > foldl' (++) "" $ replicate 1000 "a"
11:40:34 <lambdabot> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
11:40:44 <oerjan> > foldl' (++) "" $ replicate 100000 "a"
11:40:56 <oerjan> > foldr (++) "" $ replicate 100000 "a"
11:40:58 <lambdabot> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
11:41:26 <oerjan> > legnth $ foldl' (++) "" $ replicate 100000 "a"
11:41:31 <oerjan> > length $ foldl' (++) "" $ replicate 100000 "a"
11:41:40 <Deewiant> And that one's lazier, too :-P
11:41:43 <CakeProphet> right, but how does shows work faster than right-associative ++?
11:41:43 <oerjan> > length $ foldr (++) "" $ replicate 100000 "a"
11:42:31 <elliott> FUCK MONAD TRANSFORMERS THEY DO AWAY WITH MY SOCKAGES
11:43:01 <elliott> oerjan: YOU'RE A CARPAL TUNNEL
11:43:26 <elliott> REAAAAAAAAAAAERARGAHERGHJRGHGH
11:43:48 <Deewiant> CakeProphet: It doesn't, it's just that typical incremental uses end up being left-associative unless you use something like ShowS
11:44:02 -!- Tritonio has joined.
11:44:35 <elliott> he;lp i got lost in okmij.org
11:44:38 <CakeProphet> is there something like shows, without the application of show?
11:44:49 <CakeProphet> say you're only working with strings and don't want the double quotes.
11:44:51 <oerjan> elliott has now left us for the type system
11:45:28 <oerjan> CakeProphet: um (++) is perfectly fine for prepending a single string :P
11:45:47 <oerjan> so, the answer is (++), really
11:46:12 <elliott> <CakeProphet> is there something like shows, without the application of show?
11:46:53 <oerjan> elliott: there are defaults both ways, actually.
11:47:02 <elliott> oerjan: but in _good_ usage :D
11:47:08 <elliott> (for a show instance that isn't just constant strings, etc.)
11:47:22 <lambdabot> forall a. (Read a) => String -> [(a, String)]
11:47:34 <elliott> Deewiant: oh, DList sucks :(
11:47:37 <elliott> Deewiant: only supports [a] collections
11:47:46 <elliott> i was gonna use it but I need ByteString, Text, etc. support too
11:49:33 <CakeProphet> so reads and shows are not really analogous.
11:49:36 <oerjan> CakeProphet: Read is inefficient, iirc. ghc defines some extra methods in the class to rectify this, i think
11:50:12 <elliott> Deewiant: I have you down as a very modern person
11:50:25 <oerjan> i'm not sure that includes the extra methods
11:50:27 <Deewiant> Just use [a] like God intended
11:50:48 <elliott> Deewiant: It's mostly for HIGH-QUALITY purposes :)
11:50:58 <elliott> All Hackage packages must satisfy the Pokémon Theme Song requirement.
11:51:22 <elliott> I AM EVEN WONDERING HOW I CAN CALCULATE ESTIMATED LENGTHS TO PREALLOCATE A BYTESTRING
11:52:37 <elliott> Deewiant: "I decided to make it because I noted that much of the time of Coadjute was spent doing naïve list operations on sets of strings." You should have just used lists
11:53:42 <CakeProphet> What if Richard Stallman joined this channel right now? What would you do?
11:53:52 <elliott> annoy him until he goes away
11:54:53 <CakeProphet> Guido Von Rossum? Larry Wall? <insert pseudo-celebrity programmer>? Same protocol?
11:55:11 <CakeProphet> What if they had some awesome esolang ideas?
11:55:27 <elliott> Larry Wall is a Christian missionary, so I'm legally obligated to annoy him on at least a daily basis even if I let him stay
11:57:31 -!- jix has quit (Ping timeout: 276 seconds).
12:03:40 <elliott> oerjan: hi can you get oleg on the phone i need his help
12:05:21 <elliott> oerjan: the type system has failed
12:06:05 -!- jix has joined.
12:06:46 -!- HackEgo has quit (Ping timeout: 244 seconds).
12:07:08 -!- MigoMipo has quit (Read error: Connection reset by peer).
12:07:48 -!- HackEgo has joined.
12:08:03 <elliott> 20:59:17: <RodgerTheGreat> ais523: why are you being such a spoilsport today? You're usually all over puzzles and the like
12:08:09 <elliott> ais gets so many people complaining about him :D
12:14:58 <CakeProphet> http://en.wikipedia.org/wiki/Zero_One_Infinity
12:15:04 <CakeProphet> this is so silly why does it even have a stupid name.
12:16:31 <elliott> do you have an actual criticism
12:17:09 <CakeProphet> there is no reason for that to even be a name for something.
12:17:22 <elliott> what else do you want to call "zero one infinity"
12:17:50 <elliott> ok do you have an actual argument for that, there is pretty lively discussion on http://c2.com/cgi/wiki?ZeroOneInfinityRule after all and it's a decent rule of thumb
12:17:59 <elliott> or do you just not like its existence, should we never talk about it, would you like it to be taboo
12:18:50 <CakeProphet> I just don't see how it ever became a rule of thumb. I think it is more or less implied now...
12:19:08 <elliott> it is? please point me to a program with no arbitrary limits
12:19:08 <CakeProphet> in fact, I didn't even think there was a name for it, but I knew this was a good thing to do regardless.
12:19:41 <elliott> anyway, we have names for things that should be assumed.
12:19:48 <elliott> like "not being a gigantic raging asshole".
12:19:59 <CakeProphet> uh, no program has no limits. I mean "if you are going to allow multiple elements, then allow an arbitrary number"
12:20:49 <elliott> what do you mean no program has no limits?
12:20:52 <elliott> and that is far from assumed
12:21:04 <elliott> plenty of people will cap something at six five five three six if they don't think anyone will need more than that
12:21:07 <elliott> saves dynamic allocation code
12:21:20 <elliott> "if you are going to allow multiple elements, then allow an arbitrary number"
12:21:25 <elliott> i wonder which one i would rather say
12:22:06 <elliott> i'm open to being convinced if you have any actual arguments for why it shouldn't be a term, or evidence that it is, in fact, widely assumed
12:22:48 <CakeProphet> No. not everything is a fucking debate. It was a comment, about something that seemed to be yet another unnecessary software design term.
12:23:22 <elliott> i've made no debate, it's just that you keep saying really stupid things that seem to be asking for a response in the form of agreement or whatever.
12:23:31 <elliott> should i not reply to any of your messages
12:27:27 <CakeProphet> No, I just dislike having to painstakingly back up everything I say with detailed evidence for why it is reasonable for me to like/dislike something, when all I am doing is simply commenting on the fact, whether you agree or disagree.
12:28:17 <elliott> you didn't say "this term seems silly to me", you just said "this is so silly why does it even have a stupid name". either way, if you're saying it on an irc channel, presumably you want some kind of response, or you'd just cat it into /dev/null.
12:28:21 <oerjan> elliott: idea, would instance (r ~ s) => IsString (Formatter r s) work better?
12:28:41 <elliott> CakeProphet: i apologise for disagreeing with your statement.
12:28:59 <elliott> oerjan: I would still prefer a Formatter solution, so I'll try adapting that to that first
12:29:26 <elliott> oerjan: nice, undecidableinsatnces time
12:29:56 <elliott> meh, still the same problem, I will try with IsString
12:34:09 <elliott> what was that, i instinctively rejected
12:34:37 <CakeProphet> I just needed to exceed some character limits for a moment in a /msg
12:34:53 <CakeProphet> or is that a different protocol? I can't remember.
12:35:52 <lambdabot> forall b c (a :: * -> * -> *). (Arrow a) => (b -> c) -> a b c
12:36:05 <elliott> Formatter _almost_ looks like an arrow
12:36:08 <elliott> oerjan: wait, it is a Category
12:36:12 <elliott> (%) :: Formatter a b -> Formatter c a -> Formatter c b
12:36:37 <CakeProphet> elliott: no I believe if you accept I should be able to bombard you with massive amounts of text..
12:36:48 <elliott> CakeProphet: i already rejected, so you'd need to try again
12:37:29 <lambdabot> forall (cat :: * -> * -> *) b c a. (Control.Category.Category cat) => cat b c -> cat a b -> cat a c
12:41:54 -!- cheater_ has quit (Ping timeout: 244 seconds).
12:44:05 <elliott> foo :: (Show a) => [a] -> String
12:44:05 <elliott> foo = format ("List length: " % int <-- length %& "; elements: " % each showable)
12:45:41 <oerjan> does each put in a delimiter?
12:45:45 <elliott> <-- is just "map the formatter over a function"; %& means "repeat the formatting value I just used as the next one"
12:45:59 <elliott> oerjan: no, I plan an eachJoin that takes a zero-argument formatter to go in-between
12:46:05 <elliott> so you would say eachJoin " " showable
12:46:10 <elliott> although maybe it should just be called each
12:46:24 <elliott> the types are quite pretty
12:46:25 <elliott> (%&) :: Format a (b -> c) -> Format c (b -> a) -> Format c (b -> c)
12:46:34 <elliott> ?hoogle cat a (b -> c) -> cat c (b -> a) -> cat c (b -> c)
12:49:09 <elliott> oerjan: I am worried that I'm going to need a typeclass for pretty much every formatter if I support non-string types
12:50:10 <elliott> instance (IsString s, Monoid s, r ~ a) => IsString (Format s r a) where
12:50:17 <elliott> I'm surprised _that_ works fine!
12:50:43 <elliott> oerjan: I'm kind of thinking that I really want "higher-order" formatters
12:50:53 <elliott> oerjan: so that each actually is a formatter that returns a /list/
12:50:57 <elliott> of whatever the formatter it's given does
12:52:31 -!- Tritonio has quit (Quit: Leaving).
12:54:17 <elliott> oerjan: wow, id is really hard to write :D
12:56:20 <elliott> ?pl \f g k x -> f (\s -> g (\t -> k (s . t)) x) x
12:56:21 <lambdabot> flip flip id . ((flip . (ap .)) .) . (. ((flip .) . (. ((. (.)) . (.))) . (.))) . (.) . (.)
12:57:29 <Lymee> I think.... I need to study up on Haskell. a lot.
12:58:21 <elliott> yep i just replaced my code with flip flip id . ((flip . (ap .)) .) . (. ((flip .) . (. ((. (.)) . (.))) . (.))) . (.) . (.)
12:58:52 <elliott> ?pl \f g k -> f (\s -> g (\t -> k (s . t))))
12:58:53 <lambdabot> expecting variable, "(", operator or end of input
12:58:54 <elliott> ?pl \f g k -> f (\s -> g (\t -> k (s . t)))
12:58:54 <lambdabot> (. ((. ((. (.)) . (.))) . (.))) . (.)
12:58:58 <elliott> (. ((. ((. (.)) . (.))) . (.))) . (.).
13:00:40 <Lymee> What do those dots even do?
13:01:55 <elliott> oerjan: each :: Format s (DL s) (a -> DL s) -> Format [s] r ([a] -> r)
13:02:30 <EgoBot> exists argument is not a HASH or ARRAY element or a subroutine at /tmp/input.26055 line 1.
13:03:26 -!- oerjan has quit (Quit: O KAY).
13:03:45 <CakeProphet> apparently time does not count as a subroutine name.
13:05:16 <Lymee> CakeProphet, wtf does that do?
13:05:46 <elliott> ?pl \k xs -> k (mappend (map (format f) xs)
13:05:47 <lambdabot> expecting variable, "(", operator or ")"
13:05:47 <elliott> ?pl \k xs -> k (mappend (map (format f) xs))
13:06:04 <elliott> ?pl \xs -> k (mappend (map (format f) xs))
13:06:28 <elliott> each showable :: Show a => Format [String] r ([a] -> r)
13:06:58 -!- elliott has left ("Leaving").
13:07:04 -!- elliott has joined.
13:08:37 <lambdabot> intercalate xs xss = concat (intersperse xs xss)
13:08:39 <lambdabot> intersperse sep (x:xs) = x : sep : intersperse sep xs
13:08:44 <lambdabot> Data.ByteString intersperse :: Word8 -> ByteString -> ByteString
13:08:44 <lambdabot> Data.List intersperse :: a -> [a] -> [a]
13:08:44 <lambdabot> Data.ByteString.Char8 intersperse :: Char -> ByteString -> ByteString
13:09:48 <Lymee> ?pl ((a + b) / c) * ((d * e) + f)
13:10:13 <Lymee> ?pl \a b c d e f -> ((a + b) / c) * ((d * e) + f)
13:10:14 <lambdabot> flip flip (((+) .) . (*)) . ((flip . (((.) . (.) . (.) . (*)) .) . (/)) .) . (+)
13:10:51 <elliott> *Text.Format> foo [0, 990, 0]
13:10:51 <elliott> "List length: 3; elements: 0, 990, 0."
13:11:36 <Lymee> ?pl \a b -> [a..b]
13:11:48 <Lymee> elliott, how does ?pl work?
13:13:23 -!- BeholdMyGlory has joined.
13:22:43 <elliott> "like the other commenters who pointed out, this does not mean the passwords are stored in plain-text. we can only presume that they are encrypted with something like an MD5 algorithm (which is reversible)."
13:26:09 <elliott> why would you ant a link to an idiot
13:27:56 <Lymee> To see what they're talking about.
13:30:45 <Lymee> elliott, besides, MD5 is reversible with enough computing power.
13:30:58 <elliott> there are infinite inputs for a single mdfive output
13:31:52 <elliott> well ok that kind of counts as reversible
13:31:55 <elliott> but not in the way they meant
13:33:49 <elliott> Lymee: but seriously go play nottetris right now
13:35:12 -!- cheater_ has joined.
13:40:37 -!- zzo38 has joined.
13:44:04 -!- Wamanuz2 has joined.
14:18:19 -!- Wamanuz3 has joined.
14:19:41 -!- cheater__ has joined.
14:19:44 -!- Wamanuz2 has quit (Ping timeout: 258 seconds).
14:20:23 -!- Wamanuz3 has quit (Read error: Operation timed out).
14:22:21 -!- cheater_ has quit (Ping timeout: 252 seconds).
14:22:37 <elliott> where's oerjan when you need him
14:25:13 -!- TOGoS has joined.
14:27:48 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:32:22 -!- cheater__ has quit (Ping timeout: 255 seconds).
14:35:33 -!- TOGoS has left.
14:45:19 -!- cheater__ has joined.
14:51:58 -!- jcp has quit (Ping timeout: 264 seconds).
14:53:08 -!- copumpkin has joined.
14:53:08 -!- copumpkin has quit (Changing host).
14:53:08 -!- copumpkin has joined.
14:55:51 -!- Lymee has changed nick to Rimii.
14:56:00 -!- jcp has joined.
14:57:03 -!- Rimii has changed nick to Lymee.
14:58:55 -!- cheater__ has quit (Ping timeout: 255 seconds).
15:00:51 <elliott> hmm, a snake isn't actually a list of positions, it's a list of turtle instructions
15:01:26 <elliott> ...plus a starting position
15:03:33 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> [b]
15:11:08 <elliott> *Main> snakePositions initialSnake
15:11:09 <elliott> fromListA [(1,2),(0,3),(2,2)]
15:11:12 <elliott> snake doesnt work like that
15:11:25 <lambdabot> forall a b. (a -> b -> a) -> a -> [b] -> [a]
15:11:52 <Lymee> ?pl map f (x:xs) = f x : map f xs
15:11:53 <lambdabot> map = fix (flip flip tail . (ap .) . flip flip head . ((.) .) . liftM2 flip (((.) . (:)) .))
15:11:56 <lambdabot> forall a b. (a -> b -> a) -> a -> [b] -> [a]
15:14:03 <elliott> > foldr move (0,0) ['r','d','d','d'] where move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y)
15:14:04 <lambdabot> <no location info>: parse error on input `where'
15:14:13 <elliott> > let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in foldr move (0,0) ['r','d','d','d']
15:14:18 <elliott> > let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in scanr move (0,0) ['r','d','d','d']
15:14:27 <elliott> > let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in scanl move (0,0) ['r','d','d','d']
15:14:29 <lambdabot> Couldn't match expected type `GHC.Types.Char'
15:14:35 <elliott> > let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in scanl (flip move) (0,0) ['r','d','d','d']
15:14:49 <lambdabot> forall a b. (a -> b -> a) -> a -> [b] -> [a]
15:22:33 -!- cheater__ has joined.
15:31:38 -!- MigoMipo has joined.
15:33:50 <Lymee> ?pl let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in scanl (flip move) (0,0) ['r','d','d','d']
15:34:01 <Lymee> I wanted to see how it would mutilate your code.
15:39:23 -!- elliott_ has joined.
15:39:23 -!- elliott has quit (Read error: Connection reset by peer).
15:44:25 -!- monqy has joined.
15:45:19 -!- NihilistDandy has quit (Quit: leaving).
15:49:59 <elliott_> i wish i knew what this data structure was called
15:50:12 -!- Wamanuz3 has joined.
15:50:19 <elliott_> i dont think its called accordion :(
15:53:20 -!- KingOfKarlsruhe has joined.
16:01:07 <elliott_> monqy do you know the name of this
16:01:40 -!- Wamanuz3 has quit (Read error: Operation timed out).
16:03:14 -!- Wamanuz3 has joined.
16:04:29 <Lymee> I propose a standard unit of Bullshit.
16:04:33 <Lymee> It is the "English"
16:04:41 <Lymee> Under this standard, PHP would be "50E"
16:05:39 <monqy> elliott_: is a description of the data structure in the logs
16:05:52 <elliott_> data Accordion a = End | Leaf a | Join a (Accordion a) a
16:06:23 <Lymee> Isn't that just a linked list?
16:06:42 <elliott_> look carefully at the last one
16:07:01 <elliott_> monqy: i think it may be related to Data.Sequence but i'm not sure
16:07:29 <monqy> from my glance it's a linked list of (a, a) but can end either in noting an end or an a
16:07:39 <elliott_> monqy: the a on the right is at the _end_
16:07:40 <monqy> noting an end/nothing
16:07:46 <elliott_> so you can access the first and last elements immediately
16:07:52 <elliott_> second and second-last by descending one
16:07:56 <Lymee> elliott_, what are these for?
16:08:35 <elliott_> data Snake = Snake Direction Position (Accordion Direction) deriving (Show)
16:10:02 <elliott_> ooh, i could do it zipper style ... nah
16:12:35 <monqy> so why do you need the reversed list to represent a snake?
16:13:49 <elliott_> monqy: because i both tail and append on it
16:16:52 <monqy> won't any sort of appending mess up one of your lists
16:29:56 <zzo38> Do you know if programs compiled with LLVM can be linked with programs compiled with GCC?
16:40:05 -!- Wamanuz3 has quit (Ping timeout: 244 seconds).
16:41:13 -!- Phantom_Hoover has joined.
16:49:12 -!- Wamanuz3 has joined.
16:54:13 -!- Wamanuz4 has joined.
16:54:13 -!- Wamanuz3 has quit (Ping timeout: 258 seconds).
16:58:14 -!- augur has quit (Remote host closed the connection).
16:58:49 -!- Wamanuz4 has quit (Ping timeout: 258 seconds).
17:06:40 -!- zzo38 has quit (Quit: zzo38).
17:12:17 -!- Slereah has joined.
17:12:29 -!- FireFly has quit (Read error: Connection reset by peer).
17:21:53 -!- choochter has quit (Read error: Connection reset by peer).
17:22:18 <Phantom_Hoover> Lymee, show will eventually just use a typeclass function, so you're not going to get anything useful that way.
17:22:18 <lambdabot> Phantom_Hoover: You have 3 new messages. '/msg lambdabot @messages' to read them.
17:22:28 -!- choochter has joined.
17:25:04 -!- augur has joined.
17:27:15 -!- FireFly has joined.
17:27:56 -!- MigoMipo has quit (Read error: Connection reset by peer).
18:13:16 <Sgeo_> "Square root of zero. Good luck with that."
18:13:50 <Sgeo_> http://www.reddit.com/r/geek/comments/i74yk/bob_sends_a_message_to_alice/c21ful3
18:16:51 -!- CakeProphet has quit (Ping timeout: 240 seconds).
18:40:19 -!- choochter has quit (Ping timeout: 255 seconds).
18:47:42 <newsham> phantom/lymee: you can show the source for a class.
18:47:45 -!- oerjan has joined.
18:48:26 <elliott_> data Accordion a = End | Leaf a | Join a (Accordion a) a
18:48:34 <elliott_> but the definition of Seq looks different
18:49:12 <oerjan> well you can only add the same number to the beginning and end...
18:49:35 <elliott_> not true at all; it's isomorphic to [a]
18:49:40 <newsham> looks a little like a finger tree
18:49:44 <oerjan> elliott_: that is essentially just ([(a,a)],a)
18:49:49 <elliott_> newsham: Seq is based on finger trees, so...
18:49:54 <elliott_> oerjan: note that the a at the end is at the _end_
18:50:01 <elliott_> think of a weird space-time accordion
18:50:07 <elliott_> second and second-last are smaller
18:50:13 <elliott_> until the middle is really small
18:50:26 <elliott_> cons and snoc are O(n), though :)
18:50:26 <oerjan> elliott_: um my point is you have no way to remove the first without removing the last simultaneously, efficiently
18:50:39 <elliott_> leftA :: Accordion a -> Maybe (a, Accordion a)
18:50:39 <elliott_> leftA (Leaf a) = Just (a, End)
18:50:39 <elliott_> leftA (Join a xs b) = Just (a, xs `addA` b)
18:50:40 <elliott_> rightA :: Accordion a -> Maybe (Accordion a, a)
18:50:45 <elliott_> rightA (Leaf a) = Just (End, a)
18:50:46 <elliott_> rightA (Join a xs b) = Just (a `joinA` xs, b)
18:51:54 -!- augur has quit (Remote host closed the connection).
18:52:34 <elliott_> oerjan: i guess it is just worse than Seq in every way :)
18:52:47 <elliott_> it's just that taking the init of a Seq is ugly, you need the second-last element of the Seq that inits returns...
18:53:09 <elliott_> I'm storing a snake, you see, from the game
18:53:16 <elliott_> data Snake = Snake { snakeDirection :: Direction
18:53:16 <elliott_> , snakeSegments :: Accordion Direction }
18:53:23 <elliott_> advance (Snake d p ds) = Snake d (move d p) (tailA ds `addA` d)
18:53:35 <elliott_> then you can find all the blocks to draw by just starting with the position and inverting all the movements
18:54:17 <oerjan> elliott_: um init is just something like case rightview s of s' :> _ -> s'
18:54:39 <oerjan> (where i've forgotten the actual name of rightview)
18:55:42 <oerjan> and i believe that's a* O(1) where a* is the same word i couldn't remember a while ago :P
18:56:14 <lambdabot> Data.Sequence viewr :: Seq a -> ViewR a
18:56:53 <lambdabot> Prelude scanl :: (a -> b -> a) -> a -> [b] -> [a]
18:56:54 <lambdabot> Data.ByteString scanl :: (Word8 -> Word8 -> Word8) -> Word8 -> ByteString -> ByteString
18:56:54 <lambdabot> Data.List scanl :: (a -> b -> a) -> a -> [b] -> [a]
18:57:08 <elliott_> scanlA :: (a -> b -> a) -> a -> Accordion b -> Accordion a
18:57:08 <elliott_> scanlA f z (Leaf x) = Join (f z x) End z
18:57:10 <elliott_> scanlA f z (Join a xs b) = Join z xs' (f z' b)
18:57:12 <elliott_> where xs' = scanlA f (f z a) xs
18:57:16 <elliott_> this is broken and i don't know why :)
18:57:36 <oerjan> elliott_: well Seq _should_ be Foldable, doesn't that have some scanl thing?
18:58:18 <oerjan> Traversable would also work
18:58:52 <oerjan> i mean, there should be a Foldable instance. i guess the modules may not be integrated (orphans and everything)
18:59:42 <newsham> http://www.haskell.org/ghc/docs/7.0.2/html/libraries/containers-0.4.0.0/Data-Sequence.html says Foldable and Traversable
19:00:08 <elliott_> advance (Snake d p ds) = Snake d (move d p) (ds' |> d)
19:00:12 <elliott_> grow (Snake d p ds) = Snake d (move d p) (ds |> d)
19:00:30 <elliott_> *Main> snakePositions (grow initialSnake)
19:00:30 <elliott_> fromList [(1,0),(2,0),(3,0),(4,0),(3,0)]
19:00:32 -!- pikhq has quit (Quit: New kernel time).
19:03:17 -!- pikhq has joined.
19:05:24 <oerjan> elliott_: oh right, scanl _is_ in Data.Sequence
19:05:36 <oerjan> (which may be what you said)
19:07:46 -!- augur has joined.
19:15:51 <oerjan> <elliott> where's oerjan when you need him
19:16:14 <oerjan> walking to the shop, or possibly already inside
19:18:24 <oerjan> <Lymee> ?pl let move 'u'(x,y)=(x,pred y);move 'd'(x,y) = (x,succ y); move 'l'(x,y) = (pred x,y); move 'r'(x,y) = (succ x,y) in scanl (flip move) (0,0) ['r','d','d','d']
19:18:41 <oerjan> Lymee: ?pl has its own partial haskell parser for only the things it understands
19:19:29 <Phantom_Hoover> This surprises me, because it's very close to the maximum of sunkishness.
19:19:48 <oerjan> Lymee: also, nearly nothing with pattern matching can be ?pl'ed. 2-tuples being one exception.
19:20:21 <elliott_> oerjan: hm is there a monadic foldl...
19:20:28 <elliott_> so that I can use the Maybe monad to prematurely terminate it
19:20:33 <lambdabot> Data.Foldable foldlM :: (Foldable t, Monad m) => (a -> b -> m a) -> a -> t b -> m a
19:21:27 <elliott_> actually, what I want is concatMapM.
19:21:45 <Sgeo_> "3 completely identical human beings stop eating fats, carbohydrates and proteins respectively. In what order to they die, if at all, and what happens? "
19:21:52 <Sgeo_> "This is a very hypo post, try it on your own body - it's there for experiencing."
19:22:16 <elliott_> > mapM (\x -> if even x then Just 9 else Nothing) [0,0,9]
19:22:47 <elliott_> > foldlM (\r x -> if even x then (9:) `fmap` r else Nothing) [] [0,0,9]
19:22:47 <pikhq> Sgeo_: What a strange question.
19:22:59 <elliott_> oerjan: i just want it to stop processing the list and use the zero value whenever I return Nothing :(
19:23:10 <oerjan> elliott_: WriterT Maybe, maybe?
19:23:19 <Sgeo_> I just find that answer very um... nasty
19:23:22 <Sgeo_> http://www.reddit.com/r/askscience/comments/i7as8/3_completely_identical_human_beings_stop_eating/
19:24:00 <oerjan> elliott_: um no? you would use tell to add new parts to concat...
19:24:06 <elliott_> errorflux just looks like a boring trollidiot
19:24:20 <elliott_> oerjan: i have never really used Writer much :
19:24:39 <pikhq> Sgeo_: But, yeah, odds are the person without carbs wouldn't actually die from it, though they *might* have somewhat poor health.
19:24:56 <Sgeo_> pikhq, that seems to be the consensus in the thread
19:25:10 <oerjan> elliott_: oh hm you want it to keep the parts _before_ the first Nothing?
19:25:12 <elliott_> Phantom_Hoover: the very bottom one which he quoted
19:25:31 <elliott_> oerjan: basically, I always advance the snake
19:25:37 <oerjan> elliott_: sounds like an unfoldr-like thing, then
19:25:51 <elliott_> I don't want to advance the snake
19:25:54 <elliott_> I want to close the list then and there
19:26:52 <oerjan> Phantom_Hoover> "IAmA reddit admin - AMA!" <-- without even looking, i assume that's a parody on all the fake IAMAs?
19:27:55 <oerjan> Phantom_Hoover: huh :P
19:28:15 <elliott_> mknin9n9n0j0ninji9nujhujhuijijuijujijjijijijkjikjkkjijjj
19:29:08 <oerjan> elliott_: hm, MaybeT Writer perhaps...
19:29:26 <oerjan> that ought to keep things already written
19:29:43 <elliott_> oerjan: that requires pulling in maybet :(
19:29:47 <elliott_> wouldn't a plain unfoldr work?
19:30:02 <oerjan> perhaps? is the function pure...
19:30:35 <lambdabot> forall b a. (b -> Maybe (a, b)) -> b -> [a]
19:30:41 <oerjan> @hoogle (a -> Maybe b) -> [a] -> [b]
19:30:41 <lambdabot> Data.Maybe mapMaybe :: (a -> Maybe b) -> [a] -> [b]
19:30:41 <lambdabot> Prelude mapM :: Monad m => (a -> m b) -> [a] -> m [b]
19:30:41 <lambdabot> Control.Monad mapM :: Monad m => (a -> m b) -> [a] -> m [b]
19:30:57 <oerjan> @hoogle (a -> m (Maybe b)) -> [a] -> m [b]
19:31:00 <elliott_> > unfoldr (\(x:xs) -> if even x then Just ("yaaaaaaay", xs) else Nothing) [0,0,0,9]
19:31:01 <lambdabot> ["yaaaaaaay","yaaaaaaay","yaaaaaaay"]
19:31:39 <elliott_> unfortunately, I need to handle empty list
19:31:51 <elliott_> because I need to produce more elements
19:31:59 <elliott_> and what would the reduced value be?
19:32:10 <Phantom_Hoover> elliott_, quick, get to the nearest particle accelerator.
19:33:15 <oerjan> um what would you do if hitting an empty list, you say
19:33:41 <elliott_> oerjan: add the "advance the snake" event, mainly
19:33:55 <elliott_> but if I halt the processing early e.g. in case of game over, I do _not_ want to do that
19:34:01 <elliott_> oerjan: I'm starting to think a manual recursion over the list might be best...
19:34:39 <oerjan> if there are too many options to branch over
19:37:20 <elliott_> oerjan: hmm oh, I also need a sort of feedback loop thing...
19:37:29 <oerjan> each of those can be defined in terms of the other, you need at least one of the first two
19:37:32 <elliott_> because triggering AdvanceSnake will trigger something looking up where the snake is now, which then might trigger a game over
19:37:38 <elliott_> oerjan: starting to think I need a _proper_ event system here
19:37:56 <Phantom_Hoover> "What are the benefits of a 45.7% increase in serum testosterone levels?"
19:38:10 <oerjan> Phantom_Hoover: lycanthropy, duh
19:38:13 <Phantom_Hoover> AskScience, you have been fatally holed below the waterline.
19:38:44 <oerjan> Phantom_Hoover: i assume that was inspired by the recent post about the results of not masturbating for a week
19:39:28 <oerjan> elliott_: either that or you need some truly gordian knot tying :P
19:39:43 <elliott_> oerjan: that's my idea of a library :D
19:39:54 <elliott_> oerjan: I have a feeling I'm about to reinvent FRP
19:40:23 <oerjan> FRP is out, now it's all RDP
19:41:07 <monqy> I could figure out frp is functional reactive programming but what's that
19:41:23 <oerjan> elliott_: http://awelonblue.wordpress.com/2011/05/21/comparing-frp-to-rdp/
19:41:58 <elliott_> oerjan: im not going to have to expand my brain am i
19:42:08 <elliott_> "Reactive Demand Programming (RDP) was invented by me (David Barbour) around April 2010"
19:42:11 <elliott_> oerjan: this is not a good start
19:42:16 <oerjan> elliott_: i may be slightly exaggerating here :P
19:42:20 <elliott_> has conal or luke said anything yet
19:42:35 <elliott_> yeah there is no way i am going to read this
19:42:44 <elliott_> not until i see a response at least
19:43:39 <monqy> I'm reading the overall
19:43:57 <oerjan> elliott_: i'm just reposting from r/haskell, anyhow
19:44:22 <elliott_> it seems interesting but tl;dr at this stage in my mind
19:44:38 <elliott_> although i'm not sure i like the tone, it reminds me too much of me
19:52:45 -!- azaq23 has joined.
20:28:57 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 5.0/20110615151330]).
21:29:13 -!- elliott_ has quit (Ping timeout: 246 seconds).
21:33:40 -!- zzo38 has joined.
21:34:19 <zzo38> I seem to have found a bug in LLVM (and I did report it on their IRC channel and bug report system) (as you might see from the report, I prefer to use pipes)
21:35:09 <zzo38> http://llvm.org/bugs/show_bug.cgi?id=10181
21:46:41 <oerjan> it's pretty cool here up north
21:47:25 <Phantom_Hoover> (OK so I'm quite a bit south of you but I'm still really north by, like, American standards.)
21:48:04 * oerjan isn't finnish in case someone is confused
21:48:46 -!- Sgeo_ has changed nick to Sgeo.
21:49:27 <olsner> btw, tomorrow this is what sweden is doing: http://www.youtube.com/watch?v=e3ft1YyUkYY
21:50:50 <zzo38> I don't know if it would ever actually be useful to use a code like that in the bug report!
21:51:15 <oerjan> tomorrow? we have our midsummer celebration today.
21:52:59 <olsner> oerjan: you weird norwegians
21:53:02 <oerjan> det var ju lustigt att se
21:53:26 <olsner> midsummer's eve is always on a friday in sweden for ... well holiday scheduling reasons
21:54:02 <olsner> but today is also a de-facto friday since tomorrow is a no-work day
21:54:30 <oerjan> oh, you get midsummer's eve off?
21:55:05 <olsner> or do you get the 'day' off instead of the 'eve'?
21:55:23 <oerjan> afair neither is an official day :P
21:56:17 <olsner> you celebrate midsummer on a work day? even if it is before a work day so you have to work hung over?
21:56:30 <olsner> this is just so bad, oerjan
21:56:57 <oerjan> well if it's on a thursday there _might_ be a slight decrease in people working on the day after :P
21:57:31 <oerjan> which is just as with other movable days off
22:00:18 <olsner> as always in sweden everything goes to a fixed pattern: thursday is queueing at systembolaget to get beer and schnaps, friday is pickled herring, schnaps and dancing the frog dance around the phallos, saturday is dedicated to being hung over
22:00:59 -!- Phantom_Hoover has quit (Remote host closed the connection).
22:01:09 <olsner> ordning och reda, pengar på freda'
22:22:49 <Sgeo> Did comex just call Java a fine language?
22:23:02 <Sgeo> By pointing to a comment that called it a fine language, I mean
22:28:50 -!- Patashu has joined.
22:43:46 -!- augur has quit (Remote host closed the connection).
22:43:53 -!- CakeProphet has joined.
22:43:54 -!- CakeProphet has quit (Changing host).
22:43:54 -!- CakeProphet has joined.
22:50:16 -!- Wamanuz4 has joined.
23:04:44 -!- Wamanuz4 has quit (Ping timeout: 258 seconds).
23:08:20 -!- Wamanuz4 has joined.
23:12:14 -!- augur has joined.
23:13:16 -!- Wamanuz4 has quit (Ping timeout: 240 seconds).